Linux如何使用vmstat监控系统性能_Linux vmstat监控系统性能总结

2026-05-10电脑数码35861

vmstat关键指标需交叉验证:r持续≥CPU核数×1.5、b≥2且wa>20%表IO瓶颈;si/so>0才表明swap压力;sy远高于us需查系统调用;wa高时us+sy高是假象;st>5%说明宿主机资源被抢占。

vmstat 不是“看一眼就懂”的工具,关键指标容易误读,尤其在多核、高IO或内存压力场景下,直接看 usid 可能完全错过瓶颈。

怎么看 r 和 b 才知道 CPU 或 IO 真的忙了

很多人只盯着 r(运行队列长度)是否大于 CPU 核数,但忽略了时间维度和上下文:

  • r 值瞬时跳到 8 不代表问题,要连续观察 5~10 行,若长期 ≥ CPU 总核数 × 1.5(比如 4 核机器持续 r≥6),才说明 CPU 调度排队严重
  • b(不可中断睡眠进程数)> 0 是常态,但若 b 持续 ≥ 2 且 wa > 20%,基本可锁定是磁盘 IO 卡住进程(如慢存储、锁表、sync 压力)
  • 注意:r 高 + b 高 + wa 低 → 更可能是大量短时系统调用(如频繁 open()/close()),不是磁盘慢,而是内核路径开销大

swpd 不为 0 就一定内存不足?别急着加 RAM

swpd 显示交换区已用大小(KB),但它本身不反映压力。真正要看的是交换活动:

  • 只要 si(swap in)和 so(swap out)长期稳定为 0,哪怕 swpd 是几 GB,也只是内核预分配的“备用空间”,不影响性能
  • 危险信号是:siso 持续 > 0(尤其 > 10 KB/s),同时 free 极低(如 cache 被大量回收(对比前后行 cache 值明显下降)
  • 某些 Java 应用启动时会主动触发 swap 预分配,swpd 上升但无 si/so,属正常行为,不用干预

为什么 us + sy > 80% 还不一定 CPU 不够

us(用户态)和 sy(内核态)加起来高,只说明 CPU 时间被占满,但不等于“需要更多 CPU”:

Kaiber

Kaiber是一个视频生成引擎,用户可以根据自己的图片或文字描述创建视频

下载

  • 如果 sy 占比远高于 us(比如 sy=65%, us=15%),重点查系统调用:用 pidstat -w 1 看哪些进程 cswch/s(上下文切换)异常高,再结合 strace -p PID 定位高频调用(如 epoll_wait 卡死、锁争用)
  • 如果 wa 同时很高(>30%),us+sy 高其实是假象——CPU 大量时间在等 IO,实际计算能力未饱和,此时升级 CPU 无效,应查磁盘延迟或应用层批量读写逻辑
  • 虚拟机环境还要看 st(steal time):若 st > 5%,说明宿主机 CPU 被其他 VM 抢占,本机再优化也白搭

vmstat 的最小可靠采样间隔是多少

vmstat 1 看实时波动很诱人,但 1 秒间隔在多数生产环境反而失真:

  • Linux 内核统计基于 tick(通常 10ms),vmstat 的采样是离散快照,间隔太短会导致噪声放大(比如单次磁盘延迟抖动拉高 wa
  • 推荐起始值:vmstat 5(5 秒)观察趋势;确认有异常后再用 vmstat 1 10 抓 10 秒细节
  • 避免 vmstat 0.5 这类亚秒级——它不会提高精度,反而因频繁系统调用抬高自身 sy,污染数据
  • 长期监控建议用 vmstat 10 144(每 10 秒一次,共 144 次 = 24 分钟),导出后用脚本聚合分析峰值/均值,比肉眼盯屏可靠得多

真正难的不是跑出 vmstat,而是把 rbwacs 这几个数字放在同一时间轴上交叉验证——单独看任一列,都可能指向错误的方向。

《Linux如何使用vmstat监控系统性能_Linux vmstat监控系统性能总结.doc》

下载本文的Word格式文档,以方便收藏与打印。