判断内存是否够用需结合free和vmstat:重点看available(低于10%需警惕)、Swap used(持续非零表明内存不足),再用vmstat观察free下降趋势、so>0及b值不为0等动态指标。

看内存是否够用,不能只盯“used”数字——free和vmstat配合着看,才能看清真实压力。
free:快速摸清内存家底
执行 free -h 就能一目了然地看到当前内存整体情况。重点不是 total 或 used,而是:
- available:系统估算出的、真正能立刻分配给新进程的内存。这是判断内存是否紧张的核心指标;低于总内存的10%,就得警惕
- buff/cache:缓存和缓冲区占的内存,不是“被占用”,而是“可随时回收”。它高≠内存紧张,反而是系统在高效利用资源
- Swap used:如果这一栏持续非零,尤其数值还在涨,说明物理内存已不够,系统被迫往磁盘搬数据,性能必然下降
vmstat:追踪内存动态变化
运行 vmstat 1(每秒刷新一次),重点关注三类字段:
- memory 区域的 free:持续观察它的趋势。如果 free 值不断下降、接近零,且 buff/cache 没同步上升,说明内存正在被真实占用
- swap 区域的 si/so:si(swap in)和 so(swap out)只要长期大于 0,就是在频繁换页,是内存瓶颈的明确信号
- procs 区域的 r/b:r 值长期大于 CPU 核数,b 值持续不为 0,往往伴随内存不足导致进程排队或等待 I/O
两者怎么搭配用?
先跑 free -h 快速定性:available 是否充足?Swap 是否启用?再开 vmstat 2 持续观察 30 秒以上,看 free 是否缓慢流失、so 是否间歇跳动、b 值是否反复出现。如果 free 在掉、so 在动、available 在逼近警戒线,基本可以确认是内存资源瓶颈,而不是临时缓存抖动。
几个实用小技巧
- 想让
free每 3 秒自动刷新:用free -h -s 3 - 排查内存泄漏时,
vmstat 1看 swpd 是否随时间缓慢上涨,比单次快照更可靠 - 发现 available 很低但 buff/cache 占比极高?试试
echo 3 > /proc/sys/vm/drop_caches(仅测试环境,生产慎用)释放缓存验证是否真缺内存
基本上就这些。不复杂,但容易忽略 available 和 swpd 的联动关系。