我正在编写一个shell脚本,需要知道系统中可用(免费+可回收)内存的总量。为此,我正在解析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
通常认为" free"列由缓冲区和缓存校正,表示可以自由或可回收的内存,因此可供应用程序使用。因此,在上面的示例中,我们将有大约2124 MB可用。
然而,如果使用tmpfs,这是不正确的,因为tmpfs使用的任何内存都包含在" cached"中,但此内存不可回收(更多信息在{ {3}})
那么我们怎样才能找出实际可用的内存量?
答案 0 :(得分:0)
看起来获取可用内存量并不像“free + buffers + cached - shmem”那么简单。为了解决这个问题,Linux内核3.14引入了一个名为“MemAvailable”的新指标,它考虑了多个因素:
目前,可用于新工作负载的内存量, 没有将系统推入交换,可以从MemFree估算, 活动(文件),非活动(文件)和SReclaimable,以及“低” 来自/ proc / zoneinfo的水印。
可以找到更多信息in the kernel commit message。
对于早于3.14的内核,there are tools可以使用与内核计算方式相同的方式模拟此度量标准。