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

Gro*_*uez 7 linux memory shell

我正在编写一个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
Run Code Online (Sandbox Code Playgroud)

通常认为由缓冲区和缓存校正的"空闲"列表示可以自由或可回收的内存,因此可用于应用程序.因此,在上面的示例中,我们将有大约2124 MB可用.

但是,如果正在使用tmpfs,这是不正确的,因为tmpfs使用的任何内存都包含在"缓存"中,但此内存不可回收(本文中有更多信息)

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

Gro*_*uez 0

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

目前,可以根据 MemFree、Active(file)、Inactive(file) 和 SReclaimable 以及 / 的“低”水印来估计可用于新工作负载的内存量,而无需将系统推入交换区。过程/区域信息。

更多信息可以在内核提交消息中找到。

对于 3.14 之前的内核,有一些工具可以以与内核计算相同的方式模拟该指标。