首页/系统/Linux 运维命令速查/vmstat 系统级资源速览
性能与监控48 条

vmstat 系统级资源速览

vmstat 把 CPU、内存、IO、上下文切换压进一行:r 队列长度、si/so 换页、bi/bo 块 IO、cs 切换、wa 等待,老二样之外最实用。

Linux 运维命令速查系统更新于 2026-10-13

vmstat 是什么

vmstat 把 CPU、内存、IO、上下文切换压进一行输出,是排查系统级瓶颈时最快的第一个命令。它的第一行是开机以来的平均值,从第二行开始才是按间隔采样的实时数据,分析必须从第二行看起。字段里最有价值的是 r(可运行队列)、si 与 so(换入换出)、bi 与 bo(块设备进出)以及 wa(CPU 等待 IO 的比例)。

基本信息

适用平台Linux 发行版通用,由 procps-ng 提供
命令语法vmstat [间隔 [次数]]
常用选项-w 宽格式 / -s 累计统计 / -d 按设备的磁盘统计 / -p 按分区统计 / -S 指定单位
判读前提先知道机器有几个核,r 才有比较基准

常用示例

常用示例
vmstat 1 10            # 每秒一行,共 10 行
vmstat -w 1 5          # 宽格式,列不易错位
vmstat -s | head       # 累计统计摘要
vmstat -d | head       # 按设备的磁盘统计
vmstat -p sda1 1 3     # 按分区的读写统计
nproc                  # 先看清核数,r 才有比较基准

字段逐列读法

字段含义正常与异常
r正在运行或等待 CPU 的进程数持续大于核数说明 CPU 在排队
b处于不可中断睡眠的进程数长期大于 0 多与磁盘 IO 相关
si / so从交换分区换入 / 换出的内存量持续非零说明真在用 swap,性能会陡降
bi / bo每秒从块设备读入 / 写出的块数与 wa 一起看
in每秒中断次数突增可能来自网卡或设备风暴
cs每秒上下文切换次数结合 us 与 sy 判断,并非越高越坏
us / sy / id / wa用户态、内核态、空闲、等待 IO 的 CPU 占比wa 持续偏高就去查磁盘
st被虚拟机管理程序偷走的 CPU 时间云主机上偏高说明宿主机存在资源争抢

判读顺序

  • 先看 r 与核数的关系,判断是否存在 CPU 排队
  • 再看 si 与 so 是否非零,排除换页导致的整体变慢
  • 然后看 wa 与 bi、bo,把矛头指向磁盘
  • 用 cs 与 in 区分正常高吞吐和异常风暴
  • 云主机再看 st,宿主机争抢会表现为同样的服务变慢
第一行是开机以来的平均值,拿它做判断会把历史峰值当成现状;分析一律从第二行起,并且至少观察 5 到 10 个采样点再下结论。
cs 高本身不是问题,高吞吐服务天然会频繁切换线程;只有当 cs 升高、us 与 sy 也上升,吞吐却下降时,才说明切换开销成了负担。

常见组合用法

  • 看短时抖动:vmstat 1 30,连续看半分钟再判断
  • 长周期趋势交给 sar,vmstat 只负责现场快速判断
  • 怀疑磁盘:先看 wa 与 b,再用 iostat 定位到具体设备
  • 怀疑内存:先看 si 与 so,再用 ps 按内存排序找大户
  • 对照基线:把健康时段的输出存档,异常时比对差异
si 与 so 是相对交换分区的统计,容器里若没有可见的 swap,这两个字段会一直是 0;排查容器内存压力要转看 /proc/meminfo 与 cgroup 的内存统计。
wa 高不等于磁盘坏了:备份任务、大文件顺序写、虚拟机快照都会推高 wa,先确认这些活动是否本来就在计划之中。
加 -w 使用宽格式会把列间距拉开,宽表在终端里不容易错位,复制到工单或聊天工具里也更好读。
采样次数要给足:vmstat 1 3 只有三行,很容易被某个瞬时峰值带偏;现场排查建议至少看 10 行以上,或者持续输出、看够再中断。
bi 与 bo 的单位是块,实际字节数取决于内核块大小。跨机器对比这两列时先换算到字节,否则容易得出相反结论。
判读顺序建议固定下来:先看运行队列与上下文切换判断 CPU 侧是否拥塞,再看交换与内存判断是否承受内存压力,最后看块设备等待判断存储是否拖慢整体。一次采样不足以定性,按固定间隔连续采几次再比较变化,结论才站得住。

易错点

  • 把第一行当成实时值,容易得出与事实相反的结论
  • r 只看绝对值不看核数:8 核机器上 r 为 4 其实很健康
  • 只看 wa 就断定磁盘有问题:虚拟化与网络文件系统也会推高 wa,需要用 iostat 交叉验证
  • 精简容器里可能没有 vmstat,先用 /proc/loadavg 与 /proc/meminfo 兜底
  • 采样间隔设得过短会放大工具自身开销,常规排查 1 秒已经足够
  • 把采样次数与间隔当成随便给的两个数字:间隔太短会放大工具自身开销,太长会平滑掉有意义的波动,常规排查用 1 秒间隔、多次采样是较稳妥的起点

数据来源与参考

  • man 8 vmstat(procps-ng)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌