精华内容
下载资源
问答
  • free 命令能够显示系统中物理上的空闲和已用内存,还有交换内存,同时,也能显示被内核使用的缓冲和缓存。这些信息是通过解析文件 /proc/meminfo 而收集到的。 不带任何选项运行 free 命令会显示系统内存,包括空闲...
  • Linux free命令用法详解

    2021-01-09 18:36:27
    Linux free命令 Linux free命令用于显示内存状态。 free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。 语法free [-bkmotV][-s ] 参数说明: -b 以Byte...
  • free命令详解

    2014-03-02 08:32:30
    free命令详解,超详细,有数据,有公式,来龙去脉,一目了然。
  • 作为一名linux系统管理员,监控内存的使用状态是非常重要的,监控内存最常使用的命令free、top等,下面是某个系统free的输出
  • Linux上的free命令详解

    2013-05-05 18:09:49
    解释一下Linux上free命令的输出。  下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如: FO[2][1] = 24677460 FO[3][2] = 10321516 1 2 ...
  • free命令

    千次阅读 2018-05-23 14:20:23
    转载来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/517581161、free命令显示结果$free total used free shared buffers cached Mem: 16464652 16371084 ...

    转载来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/51758116

    1、free命令显示结果

    $free
                 total       used       free     shared    buffers     cached
    Mem:      16464652   16371084      93568          0     305928   14781392
    -/+ buffers/cache:    1283764   15180888
    Swap:            0          0          0
    • 这里写图片描述

    2、参数详解

    参数释义
    total内存总数,物理内存总数
    used已经使用的内存数
    free空闲的内存数
    shared多个进程共享的内存总额
    buffers Buffer缓存内存数
    cached Page缓存内存数
    -buffers/cache应用使用内存数
    +buffers/cache应用可用内存数
    Swap交换分区,虚拟内存

    3、结果说明

    第一部分Mem行:

    • total 内存总数: 15.7G
    • used 已经使用的内存数: 15.6G
    • free 空闲的内存数: 93M
    • shared 当前已经废弃不用,总是0
    • buffers Buffer 缓存内存数: 298M
    • cached Page 缓存内存数:14G

    对操作系统来讲是Mem的参数,buffers/cached 都是属于被使用,所以它认为free只有93M。

    我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在Linux系统中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。

    第二部分(-/+ buffers/cache):

    • (-buffers/cache) used内存数:1.2G (指的第一部分Mem行中的used – buffers – cached)
    • (+buffers/cache) free内存数: 14.4G (指的第一部分Mem行中的free + buffers + cached)

    可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数.

    对应用程序来讲是(-/+ buffers/cach).buffers/cached 是等同可用的,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。

    第三部分Swap交换分区:

    大家自行Google了解。

    4、结果说明

    这里写图片描述

    所以,弄清楚参数意义,就不会产生误解,以为Mem行free内存很少,是不是需要升级服务器内存等等。看内存够不够用重点是要看(-/+ buffers/cache)的free和used为主。

    另外告诉大家一些常识。Linux为了提高磁盘和内存存取效率,Linux做了很多精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache能有效缩短了 I/O系统调用(比如read,write,getdents)的时间。

    5、参考资料

    1、Linux系统内存监控全面讲解:free命令 
    2、Linux的free命令详解 
    3、Swap

    展开全文
  • Linux是有名的开源操作系统之一,它拥有着极其巨大的命令集。...  free命令用于检测物理内存和交换内存已使用量和可用量(默认单位为KB)。下面演示命令的使用情况。  # free  total used free 
  • linux free命令详解

    2020-09-15 05:44:48
    本篇文章主要介绍了linux free命令详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 【Linux学习】Linux free 命令学习

    千次阅读 2018-11-20 15:23:43
    一、学习这个命令的...但是一开始并没有很清楚的明白free命令的每一个数据到底代表的什么意思,导致一直以为优化没有效果。后面认真学习了下free命令,先看看 操作系统版本是 Ubuntu 14.04 linux的内核版本号...

    一、学习这个命令的背景

    因为最近Gitlab服务器占用内存很多,也在下面的这篇博客里面写了怎么减少Gitlab占用的内存问题。
    +【Git学习】解决GitLab内存消耗大的问题

    但是一开始并没有很清楚的明白free命令的每一个数据到底代表的什么意思,导致一直以为优化没有效果。后面认真学习了下free命令,先看看

    操作系统版本是 Ubuntu 14.04
    linux的内核版本号是 3.13.0-24-generic

    在这里插入图片描述

    root@ubuntu116:~# uname -r 
    3.13.0-24-generic
    您在 /var/mail/root 中有新邮件
    root@ubuntu116:~# uname -a
    Linux ubuntu116 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
    您在 /var/mail/root 中有新邮件
    root@ubuntu116:~# cat /proc/version 
    Linux version 3.13.0-24-generic (buildd@panlong) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014
    root@ubuntu116:~#  lsb_release -a
    No LSB modules are available.
    Distributor ID:	Ubuntu
    Description:	Ubuntu 14.04 LTS
    Release:	14.04
    Codename:	trusty
    root@ubuntu116:~# 
    
    

    二、free命令使用

    首先是要 free --help命令,来查看下free命令的用法。
    在这里插入图片描述

    root@ubuntu116:~# free --help
    
    Usage:
     free [options]
    
    Options:
     -b, --bytes         show output in bytes
     -k, --kilo          show output in kilobytes
     -m, --mega          show output in megabytes
     -g, --giga          show output in gigabytes
         --tera          show output in terabytes
     -h, --human         show human-readable output
         --si            use powers of 1000 not 1024
     -l, --lohi          show detailed low and high memory statistics
     -o, --old           use old format (without -/+buffers/cache line)
     -t, --total         show total for RAM + swap
     -s N, --seconds N   repeat printing every N seconds
     -c N, --count N     repeat printing N times, then exit
    
         --help     display this help and exit
     -V, --version  output version information and exit
    
    For more details see free(1).
    
    

    下面我们来测试下几个常用的options

    2.1 free -b

    在这里插入图片描述

    root@ubuntu116:~# free -b
                 total       used       free     shared    buffers     cached
    Mem:    67529682944 64533520384 2996162560  213880832  351289344 58317025280
    -/+ buffers/cache: 5865205760 61664477184
    Swap:   68690112512    7532544 68682579968
    您在 /var/mail/root 中有新邮件
    root@ubuntu116:~# 
    
    

    2.2 free -k

    在这里插入图片描述

    root@ubuntu116:~# free -k
                 total       used       free     shared    buffers     cached
    Mem:      65946956   63518300    2428656     208900     343148   56952900
    -/+ buffers/cache:    6222252   59724704
    Swap:     67080188       7356   67072832
    您在 /var/mail/root 中有新邮件
    root@ubuntu116:~# 
    
    

    2.3 free -m

    在这里插入图片描述

    root@ubuntu116:~# free -m
                 total       used       free     shared    buffers     cached
    Mem:         64401      62458       1942        204        335      55618
    -/+ buffers/cache:       6505      57895
    Swap:        65507          7      65500
    root@ubuntu116:~# 
    
    

    2.4 free -g

    在这里插入图片描述

    root@ubuntu116:~# free -g
                 total       used       free     shared    buffers     cached
    Mem:            62         60          1          0          0         54
    -/+ buffers/cache:          6         56
    Swap:           63          0         63
    root@ubuntu116:~# 
    
    

    2.5 free -h

    在这里插入图片描述

    root@ubuntu116:~# free -h
                 total       used       free     shared    buffers     cached
    Mem:           62G        60G       2.2G       204M       336M        54G
    -/+ buffers/cache:       6.1G        56G
    Swap:          63G       7.2M        63G
    root@ubuntu116:~# 
    
    

    2.6 free -l

    显示详细的低内存和高内存统计信息
    在这里插入图片描述

    root@ubuntu116:~# free -l 
                 total       used       free     shared    buffers     cached
    Mem:      65946956   63396736    2550220     209228     344632   56953528
    Low:      65946956   63396736    2550220
    High:            0          0          0
    -/+ buffers/cache:    6098576   59848380
    Swap:     67080188       7356   67072832
    root@ubuntu116:~# 
    
    

    2.7 free -o

    使用旧格式(没有 -/+buffers/cache 这一行)

    在这里插入图片描述

    root@ubuntu116:~# free -o
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64045184    1901772     209256     344760   56969912
    Swap:     67080188       7356   67072832
    root@ubuntu116:~# 
    
    

    2.8 free -t

    展示RAM和swap的合计
    在这里插入图片描述

    root@ubuntu116:~# free -t
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64118724    1828232     209616     345348   56973588
    -/+ buffers/cache:    6799788   59147168
    Swap:     67080188       7356   67072832
    Total:   133027144   64126080   68901064
    root@ubuntu116:~# 
    
    

    2.9 free -s N

    每相隔N秒重复打印一次内存信息,直到你按下 Ctrl + c

    在这里插入图片描述

    root@ubuntu116:~# free -s 3
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64138880    1808076     209708     345616   56957708
    -/+ buffers/cache:    6835556   59111400
    Swap:     67080188       7356   67072832
    
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64073124    1873832     209716     345616   56957720
    -/+ buffers/cache:    6769788   59177168
    Swap:     67080188       7356   67072832
    
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64167628    1779328     209720     345616   56957732
    -/+ buffers/cache:    6864280   59082676
    Swap:     67080188       7356   67072832
    
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64159796    1787160     209720     345620   56957728
    -/+ buffers/cache:    6856448   59090508
    Swap:     67080188       7356   67072832
    
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64166776    1780180     209724     345628   56957740
    -/+ buffers/cache:    6863408   59083548
    Swap:     67080188       7356   67072832
    
                 total       used       free     shared    buffers     cached
    Mem:      65946956   63093948    2853008     209724     345632   56957756
    -/+ buffers/cache:    5790560   60156396
    Swap:     67080188       7356   67072832
    
    

    2.10 free -c N

    重复打印N次内存信息,然后退出

    在这里插入图片描述

    root@ubuntu116:~# free -c 3
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64199120    1747836     209780     345744   56974404
    -/+ buffers/cache:    6878972   59067984
    Swap:     67080188       7356   67072832
    
                 total       used       free     shared    buffers     cached
    Mem:      65946956   63949560    1997396     209780     345744   56974404
    -/+ buffers/cache:    6629412   59317544
    Swap:     67080188       7356   67072832
    
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64093104    1853852     209780     345744   56974408
    -/+ buffers/cache:    6772952   59174004
    Swap:     67080188       7356   67072832
    root@ubuntu116:~# 
    
    

    2.11 free -V

    显示版本号信息

    在这里插入图片描述

    root@ubuntu116:~# free -V
    free from procps-ng 3.3.9
    root@ubuntu116:~# 
    
    

    三、free命令输出内容名词解释

    在这里插入图片描述

    root@ubuntu116:~# free
                 total       used       free     shared    buffers     cached
    Mem:      65946956   64255040    1691916     213840     356892   56805760
    -/+ buffers/cache:    7092388   58854568
    Swap:     67080188       7356   67072832
    root@ubuntu116:~# 
    
    

    3.1 Mem,-/+ buffers/cache,Swap 解释

    我们看到free命令有三行内容:Mem,-/+ buffers/cache,Swap,代表的内容如下:

    名称代表的内容
    Mem内存的使用情况
    -/+ buffers/cache表示物理内存已用多少,可用多少
    Swap交换空间的使用情况

    3.2 total,used,free,shared,buffers,cached 解释

    列的内容是total,used,free,shared,buffers,cached,代表的内容如下:

    名称代表的内容
    total总量
    used已使用的
    free空闲的
    shared共享的,在linux里面有很多共享内存,比如一个libc库,很多程序调用,但实际只存一份
    buffers缓存,可回收
    cached缓存,可回收
    • 关于buffers和cached的区别
      这里有个地方要注意,关于buffers和cached的区别。
      关于free命令里面的cached、buffers的区别,下面一幅图可以表达:
      (图片引用自 https://blog.csdn.net/juS3Ve/article/details/79191634 宋宝华老师的博客)
      在这里插入图片描述

    cached和buffers都可以读写,它们唯一的区别就是:buffers以裸设备或分区为背景,cached以文件系统里的文件为背景。

    比如 cat /dev/sda1 > /dev/null,那**/dev/sda1的内容进入buffers**,
    如果cat /opt/test.py > /dev/null,则**/opt/test.py的内容进入cached**。

    在有些时候buffer和cache这两个词经常混用。不过在一些比较低层的软件里是要区分这两个词的,看老外的洋文:

    • A buffer is something that has yet to be “written” to disk.
    • A cache is something that has been “read” from the disk and stored for later use.
      也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。

    Linux和其他成熟的操作系统(例如windows),为了提高IO read的性能,总是要多cache一些数据,这也就是为什么Mem这一行cached 比较大,而Mem这一行free 比较小的原因。

    四、free命令输出内容计算公司

    下面我们来计算一下free命令各个参数是怎么计算出来的,参考下面的图片
    (图片引用自 https://blog.csdn.net/juS3Ve/article/details/79191634 宋宝华老师的博客)
    在这里插入图片描述

    4.1 关于Mem这一行的total的计算公式

    计算公式为 : total = used + free

    在这里插入图片描述

    total (65946956) = used (64255040) + free (1691916)

    比如本例中,Mem的used是64255040,free是1691916,加起来刚好是total的65946956.

    4.2 关于 -/+ buffers/cache这一行的used的计算公式

    free输出的第二行是从一个应用程序的角度看系统内存的使用情况。

    -/+ buffers/cache这一行的used,即 -buffers/cache ,表示一个应用程序认为系统被用掉多少内存,实实在在吃掉的内存

    计算公式为: -/+ buffers/cache的used = Mem这一行的used - Mem这一行的buffers - Mem这一行的cached

    在这里插入图片描述

    `-/+ buffers/cache的used (7092388) = Mem这一行的used (64255040) - Mem这一行的buffers (356892)- 去Mem这一行的cached (56805760)

    比如本例中,-/+ buffers/cache的used是7092388,这个值是由Mem这一行的used 64255040,减去Mem这一行的buffers 356892,再减去Mem这一行的cached 56805760。

    4.3 关于 -/+ buffers/cache这一行的free的计算公式

    -/+ buffers/cache这一行的free,即 +buffers/cache ,表示一个应用程序认为系统还有多少内存,可以挪用的内存总数

    计算公式为: -/+ buffers/cache的free = Mem这一行的free + Mem这一行的buffers + Mem这一行的cached

    在这里插入图片描述

    -/+ buffers/cache的free (58854568) = Mem这一行的free (1691916) + Mem这一行的buffers (356892) + Mem这一行的cached (56805760)

    比如本例中,-/+ buffers/cache的free 是58854568,这个值是由Mem这一行的free 1691916,加上Mem这一行的buffers 356892,再加上Mem这一行的cached 56805760

    因为被系统cache和buffer占用的内存可以被快速回收,所以通常**-/+ buffers/cache这一行的free会比Mem这一行的free**大很多。

    4.4 关于Swap这一行的total的计算公式

    计算公式为 : total = used + free

    在这里插入图片描述

    total (67080188) = used (7356) + free (67072832)

    比如本例中,Swap的used是7356,free是67072832,加起来刚好是total的67080188.

    4.5 关于估算空闲的物理内存

    估算空闲的物理内存时可参考-/+ buffers/cache的free的值,但实际的可用内存要小于这个值,因为不能所有的buffers和cached都释放。

    我想大家看了上面,还是很晕.第一部分(Mem)与第二部分(-/+ buffers/cache)的结果中有关usedfree为什么这么奇怪?

    其实我们可以从二个方面来解释.

    操作系统来讲是Mem这一行的buffers/cached 都是属于被使用,所以它认为free只有1691916

    应用程序来讲是**-/+ buffers/cach。 buffers/cached 是等同可用的**,因为buffer/cached是为了提高程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。

    五 关于 buffer和cache

    5.1 什么是buffer/cache?

    buffer 和 cache 是两个在计算机技术中被用滥的名词,放在不通语境下会有不同的意义。

    在 Linux 的内存管理中,这里的 buffer 指 Linux 内存的: Buffer cache 。这里的 cache 指 Linux 内存中的: Page cache 。翻译成中文可以叫做缓冲区缓存页面缓存
    在历史上,它们一个( buffer )被用来当成对 io 设备写的缓存,而另一个( cache )被用来当作对 io 设备的读缓存,这里的 io 设备,主要指的是块设备文件和文件系统上的普通文件。
    但是现在,它们的意义已经不一样了。
    在当前的内核中, page cache 顾名思义就是针对内存页的缓存,说白了就是,如果有内存是以 page 进行分配管理的,都可以使用 page cache 作为其缓存来管理使用。
    当然,不是所有的内存都是以页( page )进行管理的,也有很多是针对块( block )进行管理的,这部分内存使用如果要用到 cache 功能,则都集中到 buffer cache 中来使用。(从这个角度出发,是不是 buffer cache 改名叫做 block cache 更好?)然而,也不是所有块( block )都有固定长度,系统上块的长度主要是根据所使用的块设备决定的,而页长度在 X86 上无论是 32 位还是 64 位都是 4k 。

    明白了这两套缓存系统的区别,就可以理解它们究竟都可以用来做什么了。

    5.2 什么是 page cache

    Page cache 主要用来作为文件系统上的文件数据的缓存来用,尤其是针对当进程对文件有 read / write 操作的时候。如果你仔细想想的话,作为可以映射文件到内存的系统调用: mmap 是不是很自然的也应该用到 page cache ?在当前的系统实现里, page cache 也被作为其它文件类型的缓存设备来用,所以事实上 page cache 也负责了大部分的块设备文件的缓存工作。

    5.3 什么是 buffer cache

    Buffer cache 则主要是设计用来在系统对块设备进行读写的时候,对块进行数据缓存的系统来使用。这意味着某些对块的操作会使用 buffer cache 进行缓存,比如我们在格式化文件系统的时候。一般情况下两个缓存系统是一起配合使用的,比如当我们对一个文件进行写操作的时候, page cache 的内容会被改变,而 buffer cache 则可以用来将 page 标记为不同的缓冲区,并记录是哪一个缓冲区被修改了。这样,内核在后续执行脏数据的回写( writeback )时,就不用将整个 page 写回,而只需要写回修改的部分即可。

    5.4 如何回收 cache ?

    Linux 内核会在内存将要耗尽的时候,触发内存回收的工作,以便释放出内存给急需内存的进程使用。一般情况下,这个操作中主要的内存释放都来自于对 buffer / cache 的释放。尤其是被使用更多的 cache 空间。既然它主要用来做缓存,只是在内存够用的时候加快进程对文件的读写速度,那么在内存压力较大的情况下,当然有必要清空释放 cache ,作为 free 空间分给相关进程使用。所以一般情况下,我们认为 buffer/cache 空间可以被释放,这个理解是正确的。

    但是这种清缓存的工作也并不是没有成本。理解 cache 是干什么的就可以明白清缓存必须保证 cache 中的数据跟对应文件中的数据一致,才能对 cache 进行释放。所以伴随着 cache 清除的行为的,一般都是系统 IO 飙高。因为内核要对比 cache 中的数据和对应硬盘文件上的数据是否一致,如果不一致需要写回,之后才能回收。

    • 人工触发缓存清除

    在系统中除了内存将被耗尽的时候可以清缓存以外,我们还可以使用下面这个文件来人工触发缓存清除的操作:

    [root@tencent64 ~]# cat /proc/sys/vm/drop_caches
    

    方法是:

    echo 1 > /proc/sys/vm/drop_caches
    

    当然,这个文件可以设置的值分别为 1 、 2 、 3 。它们所表示的含义为:

    echo 1 > /proc/sys/vm/drop_caches

    表示清除 pagecache 。

    echo 2 > /proc/sys/vm/drop_caches

    表示清除回收 slab 分配器中的对象(包括目录项缓存和 inode 缓存)。 slab 分配器是内核中管理内存的一种机制,其中很多缓存数据实现都是用的 pagecache 。

    echo 3 > /proc/sys/vm/drop_caches
    表示清除 pagecache 和 slab 分配器中的缓存对象。

    六、参考链接


    作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
    转载请保留原文地址:https://blog.csdn.net/qq446282412/article/details/84292776
    如果本文对您有所帮助,欢迎您扫码下图所示的支付宝和微信支付二维码对本文进行打赏。

    展开全文
  • 1、free命令是什么? free 命令是一个显示系统中空闲和已用内存大小的工具。free 命令的输出和 top 命令相似。大多数Linux发行版已经含有 free 命令。 其实 free 命令中的信息都来自于 /proc/meminfo 文件。/proc/...

    1、free命令是什么?

    free 命令是一个显示系统中空闲和已用内存大小的工具。free 命令的输出和 top 命令相似。大多数Linux发行版已经含有 free 命令。 其实 free 命令中的信息都来自于 /proc/meminfo 文件。/proc/meminfo 文件包含了更多更原始的信息,只是看起来不太直观。
    在这里插入图片描述

    2、为什么要使用free命令?和top,ps命令相比,有什么内存显示优点?

    系统管理员必须维护他们服务器的健康运行。其中一个重要的部分就是内存。当服务器内存使用率过高时,它会降低服务器的性能。Linux有一个称为 free 的工具,来监控内存使用率。

    看完top、ps显示中虽然包含内存占用情况,那为什么还要独出一个free命令呢?

    先看看显示结果:
    在这里插入图片描述

    Mem行:

    • total:物理内存总量,total=used+free

    • used:物理内存使用量

    • free:物理内存释放量

    • shared:0,废弃,永远为0

    • buffers:buffer用于作为写入磁盘的内容缓冲区

    • cached:用于从磁盘中读取的内容缓存

    • available 列显示还可以被应用程序使用的物理内存大小

    我想只有在理解了一些基本概念之后,上面的输出才能帮助我们了解系统的内存状况。

    3、cache和buffer详解

    buffer 和 cache 应该是两种类型的内存,但是 free 命令为什么会把它们放在一起呢?要回答这个问题需要我们做些准备工作。让我们先来搞清楚 buffer 与 cache 的含义。

    buffer 在操作系统中指 buffer cache, 中文一般翻译为 “缓冲区”。要理解缓冲区,必须明确另外两个概念:“扇区” 和 “块”。扇区是设备的最小寻址单元,也叫 “硬扇区” 或 “设备块”。块是操作系统中文件系统的最小寻址单元,也叫 “文件块” 或 “I/O 块”。每个块包含一个或多个扇区,但大小不能超过一个页面,所以一个页可以容纳一个或多个内存中的块。当一个块被调入内存时,它要存储在一个缓冲区中。每个缓冲区与一个块对应,它相当于是磁盘块在内存中的表示:
    在这里插入图片描述
    buffer cache 只有块的概念而没有文件的概念,它只是把磁盘上的块直接搬到内存中而不关心块中究竟存放的是什么格式的文件。

    cache 在操作系统中指 page cache,中文一般翻译为 “页高速缓存”。它主要用来减少对磁盘的 I/O 操作。是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。页高速缓存缓存的是内存页面。缓存中的页来自对普通文件、块设备文件(这个指的就是 buffer cache 呀)和内存映射文件的读写。

    页高速缓存对普通文件的缓存:当内核要读一个文件(比如 /etc/hosts)时,它会先检查这个文件的数据是不是已经在页高速缓存中了。如果在,就放弃访问磁盘,直接从内存中读取。这个行为称为缓存命中。如果数据不在缓存中,就是未命中缓存,此时内核就要调度块 I/O 操作从磁盘去读取数据。然后内核将读来的数据放入页高速缓存中。这种缓存的目标是文件系统可以识别的文件(比如 /etc/hosts)。

    页高速缓存对块设备文件的缓存就是我们在前面介绍的 buffer cahce。因为独立的磁盘块通过缓冲区也被存入了页高速缓存(缓冲区最终是由页高速缓存来承载的)。

    总结:无论是缓冲区还是页高速缓存,它们的实现方式都是一样的。缓冲区只不过是一种概念上比较特殊的页高速缓存罢了。

    为什么 free 命令不直接称为 cache 而非要写成 buff/cache?

    答:这是因为缓冲区和页高速缓存的实现并非天生就是统一的。在 linux 内核 2.4 中才将它们统一。更早的内核中有两个独立的磁盘缓存:页高速缓存和缓冲区高速缓存。前者缓存页面,后者缓存缓冲区。当你知道了这些故事之后,输出中列的名称可能已经不再重要了。

    4、free 与 available

    在 free 命令的输出中,有一个 free 列,同时还有一个 available 列。这二者到底有何区别?

    答:free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。请注意,**这只是一个很理想的计算方式,**实际中的数据往往有较大的误差。

    5、交换空间(SWAP space)

    在 free 命令的输出中,有一个 free 列,同时还有一个 available 列。这二者到底有何区别

    答:free 是真正尚未被使用的物理内存数量。至于 available 就比较有意思了,它是从应用程序的角度看到的可用内存数量。Linux 内核为了提升磁盘操作的性能,会消耗一部分内存去缓存磁盘数据,就是我们介绍的 buffer 和 cache。所以对于内核来说,buffer 和 cache 都属于已经被使用的内存。当应用程序需要内存时,如果没有足够的 free 内存可以用,内核就会从 buffer 和 cache 中回收内存来满足应用程序的请求。所以从应用程序的角度来说,available = free + buffer + cache。 请注意,这只是一个很理想的计算方式,实际中的数据往往有较大的误差。

    5、free命令使用

    • 想要运行,只需在控制台输入free 即可。不带选项运行会显示一个以KB为单位的默认输出。
      在这里插入图片描述
    • free 同样提供给我们 b (B), -k (KB), -m (MB), -g (GB) and –tera (TB)这些单位。要显示我们想要的单位,只要选择一个并在 free 后面跟上。下面一个是以 MB 为单位的输出样例:
      在这里插入图片描述
    展开全文
  • Linux下free命令详解系列一

    千次阅读 2020-04-16 23:59:22
    在Linux系统监控的工具中,free命令是最为常用的命令之一。free命令用于显示Linux系统内存的使用情况,包括物理内存(Mem)、交换内存(swap)和内核缓冲区内存(buffer/cache)。针对不同类型不同版本操作系统,free命令...

    Linux系统监控的工具中,free命令是最为常用的命令之一。free命令用于显示Linux系统内存的使用情况,包括物理内存(Mem)、交换内存(swap)和内核缓冲区内存(buffer/cache)。针对不同类型不同版本操作系统,free命令所展示的内存使用情况有所差异,我们这里以centos6.5centos7.2系统为例对命令的输出内容展开说明。

    1、centos7.2下free 命令现实内存使用情况

    在这里插入图片描述

    free -m 其中-m的是用MB来显示输出的内容

    Mem: 内存的使用信息
    Swap: 交换空间的使用信息

    第一行说明:

    total : 系统总的物理内存大小

    used: 系统已使用物理内存大小

    free: 系统还剩余的物理内存大小

    shared: 被共享使用的物理内存大小

    buff/cache: buffer/cache使用的物理内存大小

    buffers Memory used by kernel buffers (Buffers in /proc/meminfo)

    cached Memory used by the page cache and slabs (Cached and SReclaimable in /proc/meminfo)

    available 从应用程序角度来看,还可以被 应用程序 使用的物理内存大小

    计算方式:

    total = used + free + buff/cache
    buff/cache = buffers + cache
    available = free + buff/cache - 不可释放部分

    对于buffer和cache到底是什么,二者之间有什么区别?底层实现原理到底是什么?什么时候该用buffer?什么时候该用cache?我相信很多人与我一样都是一头雾水,没有完全搞明白。

    剑桥大学的计算机科学家大卫·惠勒 (David Wheeler)曾经说过一句很有哲理的话:

    “Any problem in computer science can be solved by anther layer of indirection.”

    翻译过来就是“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决” 。
    在这里插入图片描述

    大道至简,这句话真的是无与伦比的精辟,一句话从顶层设计上概括了整个计算机体系结构无论是软件系统还是硬件系统的分层结构思想。个人认为buffer和cache也是基于上诉分层体系思想而实现的。从字面上看,buffer的含义是缓存,cache的含义是缓存。我们知道硬件由于制作工艺不同,不同硬件读写速率有差距是非常悬殊的。比如,一般来说,内存访问的速度是硬盘读写速度的10倍以上。

    假设有两个需要通信的硬件设备A和B,A的读写速率为100M/S,B的读写速率为50M,那么A与B相互访问时会存在两种相似场景:

    • 一是A向B写入100M文件内容,由于A的读写速率是B的两倍,B每秒钟只能读取50M,剩下50M还需要1秒钟,A白白浪费了1秒钟;

    • 二A从B读取100M文件内容,B每秒钟只能写入50M,A读取剩下50M还需要1秒钟,因此也白白浪费了1秒钟。

    那有什么办法让A设备向B设备读/写的时候可以不浪费时间在1秒钟中内完成呢?我们知道A白白浪费了1秒钟而不能去处理其他任务,根本原因是两个设备读写速率不一致产生的延迟等待。因此,聪明的小伙伴可能会想到刚才大神说得那句至理名言:

    “Any problem in computer science can be solved by anther layer of indirection.”

    没错,我们可以在A设备与B设备之间嫁接一个中间层(middle layer),让中间层能够抹平双方的读写速率差异。计算机系统不同硬件之间的读写协议不同,因此需要通过接口进行交互。在middle layer靠近A处提供接口IA,IA读写速率与A近乎相同;靠近B处提供接口IB,IB读写速率与B近乎相同,A与B读写文件必须通过中间层的IA和IB接口。
    在这里插入图片描述

    • 对于第一种场景:A向B写入100M文件内容,A知道只要通过middle layer就可以向B写入文件,因此通过IA接口将100M文件内容写入到middle layer。A从自身角度来看,已经将文件完整发送给B了,然后就可以开心得去处理其他工作了。一般情况下middle layer不会马上将文件写入到B中,middle layer相当于充当了buffer缓冲区的作用。缓冲区的使用场景是读写速率高的设备流向读写速率低的设备区域。例如,CPU寄存器写数据到内存,内存写数据到磁盘。

    • 对于第二种场景:A从B读取100M文件内容,第一次读取的时候由于受B的速率所拖累,还是白白等待浪费了水岸。但是在第二次读取的时候,middle layer将提早读取B的文件内容并进行缓存,A要读取B文件内容时直接是从middle layer缓存区读取,middle layer相当于一个cache缓存区。这时另外的设备C、D、E等要读取B的文件内容,也可以直接从缓存区读取,这些操作简直不要太酸爽了。当然如果cache不同步,可以清理掉cache。
      在这里插入图片描述

    Page cache实际上是针对文件系统的缓存,从磁盘读取的内容会写入到这里,因此应用程序读取时速度会非常快。比如grep等命令第一次查找时会慢很多,后面再重复执行就会快好多。

    Buffer cache是针对磁盘块的缓存,缓冲的这一部分内存数据最终是要写入到磁盘中。缓冲的数据不是实时写入到磁盘的,防止数据丢失可以在计算机断电前多执行几次sync命令。

    那么最后来看下如何清理Buffer/Cache。Buffer/Cache释放前最好sync一下,防止丢失数据,但是一般情况下没有必要手动释放内存。

    • Clear PageCache only

    $sync; echo 1 > /proc/sys/vm/drop_caches

    • Clear dentries and inodes.

    $sync; echo 2 > /proc/sys/vm/drop_caches

    • Clear PageCache, dentries and inodes.

    $sync; echo 3 > /proc/sys/vm/drop_caches

    2、centos6.5下free 命令现实内存使用情况

    在这里插入图片描述
    Mem: 内存的使用信息,从操作系统角度分析内存使用情况
    -/+ buffers/cache:从应用程序角度分析内存使用情况

    -buffers/cache:也就是used-buffers-cache,表示当前系统中实际被应用程序吃掉的内存;

    +buffers/cache:也就是free+buffers+cache,表示当前系统中还可以挪用分配给应用程序的实际内存总数;

    愿你也能走出你的信息茧房
    代码之外的骚技能

    个人博客:http://www.geek-make.com

    展开全文
  • free命令引发的buff/cache思考

    千次阅读 2021-01-14 20:49:32
    1、free命令 free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。 1.1 语法格式 Usage: free [options] Options: -b, --bytes show output in bytes -k, --kilo show output in...
  • Linux free命令及详解

    2019-12-03 14:12:04
    Linux free命令用于显示内存状态。 free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。 二、free详解 默认情况下是以KB为单位显示 total:表示总物理...
  • Linux中的free命令

    万次阅读 2019-04-11 18:22:37
    在Linux中,我们经常用free命令来查看系统内存的使用状态。 一、命令 free -h 二、分析 free命令的返回结果有三行:Mem、-/+buffers/cache、Swap,下面逐一了解。 1、Mem行 各列含义如下: 列名 含义 ...
  • free linux中,free命令用来查看内存状态。在一台linux主机上,使用free命令后,得到如下结果: #free total used free shared buffers cached Mem: 16467424 15696636 770788 0 1...
  • 一、free 命令 通过 free 命令查看系统的内存使用情况,内存大小单位为 KB,执行结果如下图所示: 通过 free -m 命令查看系统的内存使用情况,内存大小单位为 MB,执行结果如下图所示: 通过 free -g 命令查看系统...
  • Linux free命令使用

    万次阅读 2018-01-30 10:42:59
    Linux free命令使用 摘要: free命令用以显示当前系统内存使用情况,其数据取自/proc/meminfo文件。本文第一部分为free命令及参数(源自linux man手册)、第二部分展示常见命令free -m各字段含义,第三部分解释free...
  • linux free 命令free/available区别

    千次阅读 2020-11-27 13:40:20
    [root@VM_16_17_centos bin]# free -h total used free shared buff/cache available Mem: 1882892 785272 280428 40496 817192 852060 Swap: 0 0 0 先说明一些基本概念 第一列
  • free命令常用参数详解

    千次阅读 2017-03-02 10:48:00
    free命令常用参数详解  作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。        在运维期间我们会经常去查看服务器硬件信息,比如说内存,大家可能知道看内存用“[root@yinzhengjie ~]# cat ...
  • Linux使用free命令查看实际内存占用

    千次阅读 2017-08-31 17:50:45
    转自:http://www.cnblogs.com/pengdonglin137/p/3315124.html Linux下在终端环境下可以使用free命令看到系统实际使用内存的情况,一般用free -m方式查看内存占用情况(兆为单位)。而系统实际可用内存是不是free部分...
  • free命令参数概括 free命令主要用于查看当前系统的物理内存使用情况,包含内存总量,已使用的内存和可使用的内存,如下: [xyz@linux ~]$ free -mh total used free shared buffers cached Mem: 5.7G 5.5G 19...
  • Linux free命令:buffer 与 cache 区别

    千次阅读 2018-01-20 12:04:44
    Linux free命令查询剩余可用内存的最常用命令,其中 buffer 与 cache 有何区别呢?米扑博客,专门总结了一篇博客《Linux free命令:buffer 与 cache 区别》,分享到CSDN更多经典技术博客,请见我的米扑博客:...
  • CentOS的free命令

    万次阅读 2016-11-05 12:15:47
    CentOS6和CentOS7的free命令解释
  • top命令+free命令

    千次阅读 2017-03-02 10:06:52
    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。退出 top 的命令为 q (在 top 运行中敲 q 键一次) 可以选择按进程查看或者按用户查看,如想查看pso用户的进程内存使用情况: ...
  • LInux的free命令

    千次阅读 2018-09-29 00:25:42
     我想Linux的free命令对于很多的Linux老司机来说,应该是非常熟悉的了。我作为一个小白,下面来详细分析一下Linux 的free 命令。 free详解 目录 用处 free的详细解析 free的一些语法 用处 在...
  • free命令新旧两个版本的区别

    千次阅读 2018-08-30 17:11:57
    Linux新版本的free命令: 总物理内存 total=used+free+buff/cache 还可以申请的物理内存 = available 系统已使用的物理内存 = total - available available <= free + buff/cache 因为系统的一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 261,311
精华内容 104,524
关键字:

free命令