http://www.linuxatemyram.com/提到使用free
命令查看Linux
系统使用内存时,used
一项会把当前cache
的大小也会加进去,这样会造成free
这一栏显示的内存特别少:
$ free -m
total used free shared buff/cache available
Mem: 1504 1491 13 0 855 869
Swap: 2047 6 2041
可是实际上,cache
根据应用程序的需要是可以回收利用的,因此free
这一栏并不能真实地表现有多少“可以使用”的内存。实际系统可用内存应该以available
数据为准。
linuxatemyram
所提到的free
命令也许是比较老的版本,我尝试了RHEL 7.2
,Ubuntu 16.04
和Arch Linux
这3
个Linux
发行版,均没有出现used
包含cache
的情况:
$ free -m
total used free shared buff/cache available
Mem: 64325 47437 3150 1860 13737 14373
另外,从man free
命令中也可以得到,目前计算used
的值是要减掉free
和buff/cache
的:
used Used memory (calculated as total – free – buffers – cache)
可以使用-w
命令行选项得到buff
和cache
各自使用的数量:
$ free -wm
total used free shared buffers cache available
Mem: 64325 48287 2476 1859 1430 12131 13524
需要注意的是,free
表示的是当前完全没有被程序使用的内存;而cache
在有需要时,是可以被释放出来以供其它进程使用的(当然,并不是所有cache
都可以释放,比如当前被用作ramfs
的内存)。而available
才真正表明系统目前可以提供给应用程序使用的内存。/proc/meminfo
从3.14
内核版本开始提供MemAvailable
的值;在2.6.27
~3.14
版本之间,是free
程序自己计算available
的值;早于2.6.27
版本,available
的值则同free
一样。
参考资料:
Understanding output of free in Ubuntu 16.04;
How can I get the amount of available memory portably across distributions?。