内存使用率+可用率不等于100

Q:linux大盘显示的内存使用率(mem_used_percent)+内存可用率(mem_available_percent)为什么不是100%

A:

两个指标的计算公式如下:

  • used_percent = 100 * Used / Total
  • available_percent = 100 * Available / Total

再拆解分子:

  • Used = Total - Free - Buffers - Cached
  • Available 两种情况,取值MemAvailable(MemAvailable is in /proc/meminfo (kernel 3.14+)),另一种是没有获取到 MemAvailable 需要手动计算

MemFree不能代表全部可用的内存,系统中有些内存虽然已被使用但是可以回收的,比如cache/buffer、slab都有一部分可以回收,所以这部分可回收的内存加上MemFree才是系统可用的内存,即MemAvailable。/proc/meminfo中的MemAvailable是内核使用特定的算法估算出来的,要注意这是一个估计值,并不精确 ——[转载]/PROC/MEMINFO之谜