在Linux系统中,我们查看、监控系统内存使用情况,一般最常用的命令就是free,
关于free的实现,其实是调用linux下的/proc/meminfo文件。
[root@web02 /]# free -V
free from procps-ng 3.3.9
[root@web02 /]# free
total used free shared buffers cached
Mem: 1010884 935560 75324 1560 0 22996
-/+ buffers/cache: 912564 98320
Swap: 2129916 565404 1564512
指 标 | 指 标 意 义 |
total | 总的物理内存大小。total=used + free |
used | 已经使用的物理内存。一般情况这个值比较大。used=buffers + cached (maybe add shared also)+ -buffers/cache(used) |
free | 完全未使用的物理内存 |
shared | 应用程序共享的物理内存 |
buffers | 缓存,主要用于块设备缓存,例如用户目录、inode值等(ls大目录可以看到这个值增加) |
cached | 缓存,主要用于缓存文件。 |
指 标 | 指 标 意 义 |
前个值表示-buffers/cache | 应用程序使用的内存大小,used减去缓存值:-buffers/cache=used-buffers-cached |
后个值表示+buffers/cache | 所有可供应用程序使用的内存大小,free加上缓存值:+buffers/cache=free+buffers+cached |
下面是对buffers和cached具体价绍下。
buffers:是指用来给块设备做的缓冲大小,它只记录文件系统的metadata以及 tracking in-flight pages.
cached:是用来给文件做缓冲。
那就是说:buffers是用来存储目录里面有什么内容,权限等等。而cached直接用来缓存我们打开的文件
也就是说buffers是用于存放要输出到disk的块设备数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。
total = used + free
1010884 = 936044 + 74840
-/+buffers/cache(used) 表示第三行的used列的值。-/+buffers/cache(free) 表示第三行free列的值
-/+buffers/cache(used) = used - buffers - cached
911656 = 936044 - 0 - 24388
-/+buffers/cache(free) = free + buffers + cached
99228 = 74840 + 0 + 24388
二、现在我们来看新版,
[root@web04 /]# free -V
free from procps-ng 3.3.10
[root@web04 /]# free
total used free shared buff/cache available
Mem: 1009304 598164 252724 6796 158416 257044
Swap: 2097148 0 2097148
2016年之后发布的内核, "-/+ buffers/cache" 例被取代了。
内存分配改为total = used + free + cache
可用内存直接看available了。