MemAvailable才是真正的可用内存,它综合MemFree、可回收缓存(Buffers/Cached)及SReclaimable等,反映可立即分配给新进程的内存量;而MemFree仅表示完全未使用的物理内存,数值通常极低且不具备实际参考价值。

直接看 free -h 输出里的 available 字段,它就是当前可立即分配给新进程的物理内存余量,不是 free 那个“完全没动过”的值。
为什么不能信 free 列的数值
Linux 会把大量空闲内存用于 Buffers 和 Cached(比如文件读取缓存),这部分内存随时能被回收,所以 free 列显示的“空闲”远低于真实可用量。误判会导致你过早扩容或重启服务。
-
MemFree是内核眼里“彻底没用过”的内存,通常极低(几十 MB),但不代表系统卡顿 -
MemAvailable是内核估算的、剔除不可回收部分后,真正能立刻分给新进程的量,它已包含可回收缓存的预期 - 如果
MemAvailable持续低于总内存的 10%(比如 64GB 机器低于 6.4GB),才真该警惕
free -h 怎么一眼定位可用余量
执行 free -h 后,只盯 Mem 行的 available 列:
total used free shared buffers cache available Mem: 15Gi 11Gi 287Mi 1.2Gi 394Mi 3.3Gi 3.1Gi Swap: 2.0Gi 256Mi 1.8Gi
- 上例中
available是3.1Gi,即当前有约 3.1GB 物理内存可立即使用 - 别被
free列的287Mi吓到——那只是未被任何用途占用的“冷内存” - 若
available接近 0 且Swap的used开始增长,说明物理内存真的快撑不住了
需要更细粒度验证时查 /proc/meminfo
当脚本或监控需要精确值,或 free 输出异常(比如 available 明显不合理),直接读原始字段:
- 运行
cat /proc/meminfo | grep MemAvailable,输出形如MemAvailable: 3245672 kB - 这个值和
free的available理论一致,但它是内核实时计算的原始数据,无格式化误差 - 注意:
MemFree和MemAvailable差值巨大是常态,差个几 GB 完全正常 - 如果
MemAvailable远低于free命令显示值,可能是内核版本太老(vmstat 辅助判断
容易被忽略的陷阱:swap 不为 0 ≠ 内存耗尽
Swap used 非零常被当成“内存不够”的铁证,其实不然:
- Linux 会在内存压力尚可时就预换出部分不活跃页(尤其是匿名页),这是主动优化,不是崩溃前兆
- 关键看
vmstat 1 5输出中的si(swap-in)和so(swap-out):持续 >50KB/s 才说明频繁换页,拖慢响应 - 哪怕
Swap used有 1GB,只要MemAvailable还剩 2GB 且si/so几乎为 0,系统依然健康 - 盲目关闭 swap 或增大 pagefile 可能适得其反——某些服务(如 JVM)依赖 swap 存活策略,禁用后反而 OOM
真正要盯死的只有两个数:MemAvailable 是否持续萎缩,以及 si/so 是否高频波动。其余都是干扰项。


















