我正在编写一个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
通常认为,由缓冲区和高速缓存纠正的“空闲”列表示空闲或可回收的内存,因此可供应用程序使用。因此,在上述示例中,我们大约有2124 MB可用空间。
但是,如果正在使用tmpfs,则这是不正确的,因为tmpfs使用的任何内存都包含在“缓存”中,但是此内存不可回收(本文中的更多信息)
然后,我们如何找出实际可用的内存量?
看起来获取可用内存量并不像“空闲+缓冲区+缓存-shmem”那样容易。为了解决此问题,Linux内核3.14引入了一个新的指标“ MemAvailable”,该指标考虑了多个因素:
当前,可以根据MemFree,Active(file),Inactive(file)和SReclaimable以及/中的“低”水印来估计可用于新工作负载的内存量,而无需将系统推入交换状态。 proc / zoneinfo。
更多信息可以在内核提交消息中找到。
对于3.14之前的内核,有一些工具可以用与内核计算相同的方式来模拟该指标。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句