vmstat 是 Linux 下轻量级系统监控工具,以采样方式输出进程、内存、交换、I/O 和 CPU 快照;首行是系统启动以来平均值,后续为周期性采样结果,需重点关注 r、b、swpd、free、si/so、bi/bo 及 CPU 各时间占比字段。

vmstat 是 Linux 下轻量但信息丰富的系统状态监控工具,它不实时刷新,而是以采样方式输出进程、内存、交换、I/O 和 CPU 的统计快照。掌握其输出含义与典型使用模式,能快速定位资源瓶颈,无需安装额外软件。
理解 vmstat 输出字段的关键含义
执行 vmstat 1 5(每秒采样一次,共5次)后,首行是平均值(从系统启动至今),后续为每次采样结果。重点关注以下列:
- r:运行队列中等待 CPU 的进程数。持续 > CPU 核心数,说明 CPU 繁忙或存在调度争用
- b:不可中断睡眠状态(如等待 I/O)的进程数。过高可能暗示磁盘或 NFS 延迟
- swpd:已使用的 swap 空间(KB)。非零且持续增长,表明物理内存不足,内核开始换出页
- free:空闲内存(KB)。注意:Linux 会积极利用空闲内存作缓存,该值低不等于内存紧张
- si/so:swap in/out 速率(KB/s)。si > 0 且持续发生,是内存压力的明确信号
- bi/bo:块设备读/写速率(blocks/s)。结合 iostat 可判断 I/O 是否饱和
- us/sy/id/wa/st:CPU 时间占比。us 高说明用户态程序占 CPU 多;sy 高常见于频繁系统调用(如大量小文件操作);wa 高表示进程在等 I/O 完成;st 高(在虚拟机中)意味着宿主机 CPU 资源被其他 VM 抢占
识别三类典型资源瓶颈场景
通过组合观察多列变化趋势,可快速归因:
- CPU 瓶颈:r 持续 ≥ CPU 核心数,同时 id 长期低于 10%,us 或 sy 占比显著偏高。此时可用 top -H 或 pidstat -u 1 追踪具体线程
- 内存压力:swpd > 0 且 si 持续 > 0,free 缓慢下降,cache/buffer 却未明显增长。说明内核被迫换出活跃页,应用响应可能变慢
- I/O 等待瓶颈:b 值升高、wa > 30%,bi/bo 数值大但应用吞吐未提升。需检查磁盘队列长度(iostat -x 1 中 avgqu-sz)和 await 是否超阈值
实用技巧与注意事项
vmstat 简单,但误读常见:
- 首次运行显示的是系统启动以来的平均值,参考价值有限,应忽略首行,关注后续周期性采样
- 默认单位是 KB,加 -S M 可切换为 MB,更易读(如 vmstat -S M 2)
- 若只关心 CPU,可加 -a 显示 active/inactive 内存页,辅助判断换页是否合理
- 在容器或 KVM 虚拟机中运行时,st(steal time)不可忽视:st > 5% 表明宿主机 CPU 过载,当前 VM 分配时间被强制剥夺
与其他工具配合形成分析闭环
vmstat 是“第一眼诊断”,发现异常后需联动验证:
- 看到 r 高 → 用 pidstat -u 1 查哪个进程 CPU 使用高;再用 perf top 看热点函数
- 看到 si/so 高 → 用 sar -r 1 看内存各区域变化趋势;用 cat /proc/meminfo 查 Active/Inactive 页比例
- 看到 wa 高 → 立即运行 iostat -xmt 1,关注 %util、await、r_await/w_await 差异,确认是读还是写拖慢


















