vmstat 是排查内存与 CPU 交互问题的轻量级核心工具,通过 r、free、si/so、wa 四字段联动诊断资源争用:r 高且 free <10% 物理内存表明 CPU 调度受内存回收拖累;si/so >0 且 wa >10% 揭示 swap 导致 CPU 等待 I/O;r 与 wa 同高即“内存拖累 CPU”典型场景;需配合 -S m(单位 MB)、-n(去重表头)提升可读性,并用 free -h、iostat -x 交叉验证根因。

vmstat 是排查内存与 CPU 交互问题的轻量级核心工具——它不追踪单个进程,但能揭示两者因资源争用而产生的典型耦合现象:比如内存不足触发换页,导致 CPU 长时间等待 I/O(wa 升高);或运行队列持续积压(r 值偏高),同时空闲内存锐减、swap 活跃(si/so > 0),说明 CPU 在等内存释放。
看第一行和后续行的区别
首次输出是系统启动以来的平均值,参考价值低;真正有用的是第二行起的采样数据。必须带时间参数(如 vmstat 2)才能看到动态变化,否则无法判断是瞬时抖动还是持续压力。
重点观察 r、free、si/so、wa 四个字段的联动
它们构成内存-CPU 交互诊断的核心信号链:
- r 列长期大于 CPU 核心数,且 free 持续低于物理内存的 10% → 进程在争抢 CPU,但底层可能是内存紧张迫使内核频繁回收缓存、加剧调度开销
- si 或 so 持续大于 0(尤其 so > 0),同时 wa > 10% → 内存不足已引发换出操作,CPU 大量时间花在等待 swap I/O 完成,此时 wa 实质是内存瓶颈的 CPU 表征
- r 高 + wa 也高 → 典型“内存拖累 CPU”场景:既有进程急于运行,又因缺页或换入阻塞在 I/O 上,需优先检查 free 和 swpd 是否异常
用 -S 和 -n 提升可读性与监控效率
默认单位是 KB,大内存机器易看错数量级;持续刷新时表头重复干扰视线:
- vmstat -S m 2:所有内存、swap、I/O 字段统一显示为 MB,数字更直观
- vmstat -n 2:只在首屏打印一次表头,后续纯数据流,方便重定向保存或快速扫视趋势
- 组合使用:vmstat -S m -n 2,兼顾清晰度与实用性
结合 free 和 iostat 做交叉验证
vmstat 发现异常后,不能仅凭单点数据下结论:
- 若 vmstat 显示 free 极低、si/so 活跃,立即执行 free -h 看 available 是否真实吃紧(避免误判 buff/cache 被回收的正常波动)
- 若 wa 高且 bi/bo 也高,运行 iostat -x 2 查看 %util 和 await,确认是磁盘本身慢,还是 swap 导致的假性 I/O 压力
- 注意:vmstat 的 wa 是“CPU 等待任意 I/O”的总和,不区分磁盘、网络或 swap,必须靠其他命令缩小范围


















