Linux中可用于应用程序的内存总量

时间:2014-12-17 12:28:49

标签: linux shell memory

我正在编写一个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}})

那么我们怎样才能找出实际可用的内存量?

1 个答案:

答案 0 :(得分:0)

看起来获取可用内存量并不像“free + buffers + cached - shmem”那么简单。为了解决这个问题,Linux内核3.14引入了一个名为“MemAvailable”的新指标,它考虑了多个因素:

  

目前,可用于新工作负载的内存量,   没有将系统推入交换,可以从MemFree估算,   活动(文件),非活动(文件)和SReclaimable,以及“低”   来自/ proc / zoneinfo的水印。

可以找到更多信息in the kernel commit message

对于早于3.14的内核,there are tools可以使用与内核计算方式相同的方式模拟此度量标准。