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使用的任何内存都包含在"缓存"中,但此内存不可回收(本文中有更多信息)
那么我们怎样才能找出实际可用的内存量?
看起来获取可用内存量并不像“空闲+缓冲区+缓存-shmem”那么容易。为了解决这个问题,Linux 内核 3.14 引入了一个名为“MemAvailable”的新指标,它考虑了多个因素:
目前,可以根据 MemFree、Active(file)、Inactive(file) 和 SReclaimable 以及 / 的“低”水印来估计可用于新工作负载的内存量,而无需将系统推入交换区。过程/区域信息。
对于 3.14 之前的内核,有一些工具可以以与内核计算相同的方式模拟该指标。