我正在编写一个shell脚本,需要知道系统中可用(可用+可回收)内存的总量。 为此,我parsing了free
命令的输出。 free
的典型输出如下:
$ free -m total used free shared buffers cached Mem: 2488 965 1523 0 83 517 -/+ buffers/cache: 363 2124 Swap: 1565 0 1565
通常认为由缓冲区和高速caching校正的“空闲”列代表空闲或可回收的内存,因此可用于应用程序。 所以在这个例子中,我们将有大约2124 MB可用。
但是,如果正在使用tmpfs,这是不正确的,因为tmpfs使用的任何内存都包含在“caching”中,但是这个内存不可回收( 本文中的更多信息)
那么我们如何才能找出实际可用的内存量呢?
看起来像获得可用内存的数量并不像“free + buffers + cached-shmem”那么容易。 为了解决这个问题,Linux内核3.14引入了一个名为“MemAvailable”的新指标,它考虑了多个因素:
目前,可以根据MemFree,Active(文件),Inactive(文件)和SReclaimable以及来自/不包含的“低”水印来估计可用于新工作负载的内存量, PROC / zoneinfo中。
更多信息可以在内核提交消息中找到 。
对于早于3.14的内核, 有一些工具可以按照内核计算的方式模拟这个度量。