available 才是判断内存压力的关键指标,代表当前可立即分配给新进程的内存总量,包含 free 和可回收的 buff/cache;free 和 used 已不能反映真实状况。

看懂 available 才算真正会用 free
别再盯着 used 和 free 算总数了——这两个值在现代 Linux(CentOS 7+/Ubuntu 16.04+)里已经不能反映真实内存压力。available 才是关键指标,它代表系统当前能立刻分配给新进程的内存总量,包含真正空闲的 free + 可回收的 buff/cache 中大部分(但不是全部,比如共享内存段、ramfs 不可回收)。
- 如果
available接近 0,且swap开始被使用,说明内存真的紧张了 - 如果
used很高但available仍充足,大概率只是内核在积极缓存文件,完全正常 -
available是从内核 3.14+ 引入的,老系统(如 CentOS 6)不显示该列,需参考-/+ buffers/cache行的free值
free -h 是日常使用的唯一合理姿势
单位混乱是误读的主因:free 默认以 KB 显示,但人脑对 8058904 这种数字毫无感知;-m 或 -g 虽可读,却可能因四舍五入掩盖小量变化;-h 自动选 B/K/M/G/T 并保留一位小数,兼顾精度与可读性,是运维和开发日常检查的黄金标准。
- 错误示范:
free | head -2—— 单次快照无意义,且单位难判断 - 正确习惯:
free -h查当前状态;free -h -s 2动态观察突增/泄漏;free -h -c 5录 5 次快照做简单趋势比对 - 注意:
-h在极老内核(如 2.6.32 早期版)可能不可用,此时退回到-m即可
Swap 使用 ≠ 内存不足,但 used 持续飙高需警惕
Swap 行的 used 值本身不危险:Linux 会在内存尚有余量时就预换出部分匿名页(如堆内存),这是主动策略,不是告急信号。真正要盯的是 Mem 行的 available 是否持续低于阈值(例如总内存的 5%),以及 Swap 的 used 是否在增长且 free 不回升。
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统
- 常见误判:看到
Swap: 124M used就以为 OOM 在即 —— 实际可能available还剩 2G - 危险信号:
available长期 Swap used 持续上升 +top中%MEM高的进程不断增多 - 补充验证:用
cat /proc/meminfo | grep -E "^(MemAvailable|SwapTotal|SwapFree)"直读原始值,绕过free的计算逻辑
动态监控时别忽略 -c 和信号中断
用 free -s N 持续刷屏看着爽,但容易忽略两个实操细节:一是没加 -c 就停不下来,只能 Ctrl+C,可能打断其他操作;二是某些容器环境或受限 shell 下,free 的刷新可能被 SIGSTOP 暂停,导致数据“卡住”。
- 安全做法:始终配对使用
-s和-c,例如free -h -s 3 -c 10明确只采 10 次 - 避免后台失控:
free -h -s 5 > mem.log &后记得用jobs和kill %1管理,别让它一直跑 - 极端情况:若发现
free输出停滞,先kill -0检查进程是否存活,再查/proc/meminfo确认内核层数据是否更新
最常被跳过的点:很多人把 buff/cache 当成“浪费”,想用 echo 3 > /proc/sys/vm/drop_caches 清掉——这不仅治标不治本,还可能引发后续 I/O 尖峰。真正该做的是理解 available 的构成,然后去查谁占用了不可回收的那部分(比如 ipcs -m 看共享内存,find /dev/shm -size +10M 找大块 ramfs)。









