最直接方法是用 watch -n 2 'free -h' 每2秒刷新查看available内存;需先运行 free -h 确认available列序(通常为$7),可用 grep + awk 提取并高亮,无watch时可用while循环+sleep替代。

可以用 free -h 配合 watch 命令实现按指定时间间隔刷新查看内存可用量(available 列)的动态变化,这是最直接、轻量且无需额外安装工具的方法。
使用 watch + free 实时刷新(推荐)
watch 是 Linux 系统自带的命令行工具,用于周期性执行并高亮显示命令输出。结合 free -h 可清晰观察 available 内存的实时波动:
- 每 2 秒刷新一次(默认单位为秒):
watch -n 2 'free -h' - 只关注关键列(更简洁),过滤出
Mem:行和available列:
watch -n 1 'free -h | grep "Mem:" | awk "{print \$7}"'
(注意:不同版本free输出列数可能略有差异,$7对应常见 Ubuntu/Debian/CentOS 的available列;可先运行free -h确认列序) - 加高亮增强可读性(如将数值变绿):
watch -n 1 'free -h | grep "Mem:" | awk "{print \"Available:\",\$7}" | sed "s/[0-9.]\+G/\x1b[32m&\x1b[0m/"'
确认 available 列位置(避免取错数据)
free 输出中 available 是 Linux 3.14+ 内核引入的关键指标,代表真正可用于启动新应用的内存(已扣除不可回收缓存等)。但列序因版本而异:
- 运行
free -h查看表头,典型顺序为:total used free shared buff/cache available
此时available是第 7 列($7) - 若用
free -m或旧版内核无available,则 fallback 到free + buff/cache近似估算(不精确)
替代方案:用 bash 循环 + sleep(无 watch 时)
若系统未安装 watch(极少见),可用原生 shell 循环模拟:
- 每 3 秒打印一次 available 值:
while true; do free -h | awk '/^Mem:/ {print "Now:", $7, "at", systime()}'; sleep 3; done - 加时间戳便于追踪波动节奏:
while true; do echo "$(date '+%H:%M:%S') → $(free -h | awk '/^Mem:/ {print $7}')"; sleep 2; done
小提示:理解 available 与 free 的区别
别混淆 free 和 available:
-
free列仅表示完全未被使用的物理内存,通常很小(Linux 会尽量利用空闲内存做缓存) -
available才是实际能立即分配给新进程的内存,包含可快速回收的 page cache 等,是判断内存是否紧张的核心指标 - 持续观察
available快速下降并接近 0,才表明内存压力真实存在











