vmstat 是 linux 下轻量、实时、全貌式系统性能观测工具,专注 cpu、内存、i/o 三类瓶颈诊断,无需安装,输出简洁,适合紧急排查;关键字段包括 r(运行队列)、b(不可中断进程)、swpd/si/so(swap 使用)、free(空闲内存)、bi/bo(块 i/o)、us/sy/id/wa/st(cpu 时间占比),需跳过首行均值、观察趋势、结合 pidstat/iostat/free 等命令交叉验证。

vmstat 是 Linux 下轻量、实时、全貌式的系统性能观测工具,擅长快速定位 CPU、内存、I/O 三类核心瓶颈。它不依赖额外安装,输出简洁,适合在资源紧张或远程终端中第一时间判断问题方向。
看懂 vmstat 关键字段含义
执行 vmstat 1(每秒刷新)后,重点关注以下几列:
- r:运行队列长度(正在 CPU 上运行 + 等待 CPU 的进程数)。持续 > CPU 核心数,说明 CPU 调度压力大;
- b:不可中断睡眠进程数(通常为等待磁盘 I/O)。值长期 > 0,提示可能存在 I/O 卡顿;
- swpd:已使用的 swap 空间(KB)。非零且持续增长,说明物理内存不足,内核开始换出页;
- free:空闲内存(KB)。单独看意义有限,需结合 buff、cache 和 si/so 综合判断;
- si/so:每秒从磁盘换入(swap in)/换出(swap out)的内存(KB)。si > 0 且持续不为零,是内存严重不足的明确信号;
- bi/bo:每秒块设备读(block in)/写(block out)数量(块/秒)。bo 高不一定异常,但若伴随高 wa 和低 us/sy,可能 I/O 等待拖慢整体响应;
- us/sy/id/wa/st:CPU 时间占比。wa > 20% 且 id 较低,强烈提示 I/O 瓶颈;us 长期接近 100%,说明用户态程序占满 CPU;sy 过高(如 > 30%)可能因频繁系统调用或上下文切换剧烈。
按现象反推瓶颈类型
根据常见症状,对照 vmstat 输出快速归因:
- 系统明显卡顿、命令响应慢 → 先看 r 和 wa:r 高 + id 低 → CPU 瓶颈;wa 高 + bi/bo 同步活跃 → 磁盘 I/O 瓶颈;
- 服务启动失败或 OOM Killer 触发 → 检查 swpd、si、so:si/so 持续非零 → 内存不足;free 极低但 cache 很高 → 可能只是缓存未回收,未必真缺内存;
- top 显示大量进程 D 状态(uninterruptible sleep)→ 对应 vmstat 中 b 值升高,基本锁定为底层存储延迟(如坏盘、NFS 挂载异常、LVM 同步卡住);
- CPU 使用率不高但负载高(load average 远高于 CPU 核数)→ r 值持续大于核数,而 us/sy/wa 都不高 → 多为锁竞争、网络等待或某些内核路径阻塞,需进一步用
pidstat -w或perf深挖。
配合其他命令交叉验证
vmstat 提供宏观趋势,但不能定位具体进程或设备。需搭配使用:
- 确认 CPU 瓶颈 → 接着跑
pidstat -u 1找高 %CPU 进程,或mpstat -P ALL 1看各核负载是否均衡; - 确认 I/O 瓶颈 → 用
iostat -x 1查看 %util、await、svctm,判断是设备饱和还是响应延迟;再用iotop定位读写大户; - 确认内存压力 →
free -h看总体使用,cat /proc/meminfo | grep -E "MemAvailable|SwapCached"判断可用内存和 swap 缓存状态;slabtop排查内核内存泄漏; - 排查 D 状态进程 →
ps aux | awk '$8 ~ /D/ {print $0}',再结合/proc/<pid>/stack</pid>看内核栈,常暴露存储驱动或 NFS 问题。
实用技巧与避坑提醒
避免误读 vmstat,注意这些细节:
- 第一行输出是系统启动以来的平均值,无参考价值,直接跳过,从第二行开始观察;
- 采样间隔不宜过短(如 0.1s),否则自身开销干扰结果;生产环境建议 1–5 秒;
- 不要只盯单次数值,要观察连续 10–20 行的趋势变化(例如 si 从 0 突增至 2000 并维持,比某次瞬时 500 更具诊断意义);
- 容器环境中,vmstat 显示的是宿主机视图,无法反映单个容器资源限制情况,需结合
docker stats或 cgroup 数据; - 某些云盘(如 AWS EBS gp3、阿里云 ESSD)存在 IOPS/吞吐配额,vmstat 看似正常(wa 不高),但 iostat 显示 await 异常升高,此时需查云平台监控配额使用率。











