判断应用程序还能申请多少内存,关键看 free -h 输出中 mem 行的 available 值,它是内核动态估算的、可立即分配且不触发 swap 的内存量,已扣除不可回收部分,无需人工计算。

判断应用程序还能申请多少内存,关键不是算“用了多少”,而是看系统当下能立即给新进程分配多少——这个值就是 available,它已经把可回收的缓存(buff/cache)估算进去了。
重点盯住 available 这一列
运行 free -h,输出中 Mem 行的 available 值,就是当前可直接用于启动新应用、且不会触发 swap 的内存估算量:
- 它 ≠ free + buff/cache 的简单相加,而是内核根据可回收性动态估算的结果;
- 不可回收的部分(如 ramfs、部分共享内存、锁住的 page)已被扣除;
- 只要 available 还剩总内存的 10% 以上,通常无需干预;低于 5%,就要警惕 OOM 风险。
别被 used 和 free 带偏方向
used 包含实际占用和部分不可回收缓存,free 只是完全空闲的内存,两者单独看都容易误判:
- 看到 used 占了 12G、free 剩 200M 就以为快爆了?错。如果 available 还有 6G,说明缓存占了大头,且随时可释放;
- 看到 free 是 3G 就觉得宽裕?也不一定。如果 available 只有 400M,说明 buff/cache 中大部分已不可回收,真实余量极低。
结合 buff/cache 理解内存弹性
buff/cache 数值高不等于浪费,它是 Linux 主动利用空闲内存提升 I/O 效率的机制:
- buffers:暂存待写入磁盘的数据(如日志缓冲);
- cache:缓存刚读过的文件页,下次访问更快;
- 这两部分在内存紧张时会被内核优先回收,所以 available 的可靠性正建立在这个回收能力上。
用动态监控验证可用性趋势
单次 free -h 只是快照,要确认真实可用性是否持续下降,得观察变化:
-
free -h -s 2:每 2 秒刷新,手动 Ctrl+C 停止; -
free -h -s 3 -c 10:3 秒一次,共 10 次,适合抓一段稳定负载下的趋势; - 如果 available 缓慢但持续走低,再配合
vmstat 1看 so(swap out)是否开始非零——那就真是余量见底了。
不复杂但容易忽略:应用程序的真实可用内存,就写在 available 那一格里,不需要你自己加减计算。











