vmstat 的 IO 视角
vmstat(procps-ng)从 /proc 汇总系统级内存、进程、CPU 与块设备 IO 数据。与磁盘相关的三列是:bi 每秒从块设备读入的块数、bo 每秒写入的块数、wa CPU 等待 IO 完成的时间占比。它给的是整机口径,用来回答「是不是 IO 拖住了系统」,至于哪块盘、哪个进程,要靠 iostat 与 pidstat -d 下钻。
基本信息
| 适用平台 | Linux(procps-ng),部分类 Unix 亦有实现 |
|---|---|
| 首行含义 | 自开机以来的平均值,只看第二行起的区间值 |
| 关键列 | bi 读块 / bo 写块 / wa IO 等待占比 / b 不可中断睡眠进程数 |
| 块大小 | 默认 1024 字节,受内核与版本影响,换算前先确认 |
| 配套工具 | iostat -dx 看设备,pidstat -d 看进程 |
典型使用场景
- 整机变慢初筛:先看 wa 与 r、b 列,判断瓶颈在 CPU、内存还是 IO
- 批量任务排期:观察备份或压缩任务运行期间的 bo 变化,评估对在线业务的影响
- 验证缓存效果:预热前后对比 bi 的下降幅度
- 识别换页写盘:si/so 非零且 bo 高时,写入来自换页而不是业务
- 宿主巡检:虚拟化与容器宿主上快速确认是否存在 IO 压力
常用命令
常用命令
vmstat 1 5 # 1 秒间隔采 5 次,第二行起为区间值
vmstat -d 1 3 # 直接查看块设备级的读写与 IO 计数
vmstat -s | head -20 # 汇总统计:换页、中断、上下文切换
iostat -dx 1 3 # 设备级下钻,确认是哪块盘在忙输出逐列读法
| 列 | 含义 | 异常判读 |
|---|---|---|
| r | 运行队列中的可运行进程数 | 持续大于 CPU 核数说明 CPU 排队 |
| b | 不可中断睡眠的进程数 | 持续大于 0 通常伴随 IO 或锁等待 |
| si/so | 每秒换入/换出内存 KB | 非零说明在换页,会放大磁盘写压力 |
| bi | 每秒从块设备读入的块数 | 与 wa 同时升高指向读路径瓶颈 |
| bo | 每秒写入块设备的块数 | 日志落盘或刷盘突增时明显抬升 |
| wa | CPU 等待 IO 的时间百分比 | 持续偏高说明 CPU 长时间在等盘 |
wa 只在 CPU 有空闲时才会计入,多核高并发场景下会被摊薄。判断 IO 压力要结合 b 列与 iostat 的设备级数据,不能只凭 wa 下结论。