iostat 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
iostat(input/output statistics,IO 统计)——性能观测与调试命令族(见性能观测命令族)。当 vmstat 显示 IO 瓶颈时,它负责把磁盘看细。
iostat 来自 sysstat 套件(系统性能监控工具集),报告 CPU 使用率和磁盘设备的 IO 统计。当系统"卡"但 CPU 不忙、vmstat 显示 wa(iowait)高时,iostat 能告诉你是不是磁盘扛不住了、哪块盘最忙。
一、基本用法
iostat # 一次快照(CPU + 设备汇总)
iostat -x 1 # -x 扩展统计,每 1 秒刷新
iostat -x 1 5 # 每 1 秒,共 5 次
iostat -d -x 1 # 只看设备,不看 CPU 行和 vmstat 一样,第一行是启动以来均值,看趋势从第二行起。
-x必加——没有它信息量太少,看不到await、%util这些关键指标。
二、-x 扩展统计关键列
Device r/s w/s rkB/s wkB/s await svctm %util
sda 12.0 45.0 480 1800 8.50 2.10 92.0| 列 | 含义 | 怎么判断 |
|---|---|---|
r/s / w/s | 每秒读/写次数 | 随机小 IO 看这个 |
rkB/s / wkB/s | 每秒读/写吞吐量 | 顺序大 IO 看这个 |
await | 单个 IO 平均等待时间(队列+服务,ms) | 越高越慢,正常盘应 < 10ms,SSD 更低 |
svctm | 设备服务时间(ms,近似) | 设备实际处理耗时 |
%util | 设备繁忙百分比 | 接近 100% = 设备已饱和 |
%util是核心:它代表磁盘有多少时间在"忙"。到 90%+ 基本就是瓶颈了。但注意:对可并行的高端 SSD/RAID,%util100% 未必代表吞吐到顶(还能并发),此时更看await和饱和队列深度。await远高于svctm说明请求在队列里排很久——IO 积压。
三、iowait 高 ≠ 一定是磁盘慢
# 先看 vmstat:wa 高 + b 高 → 怀疑 IO
vmstat 1
# 再用 iostat -x 确认哪块盘 %util 高、await 大
iostat -x 1一个常见误区:看到
iowait高就怪磁盘。其实 iowait 高只说明"CPU 在等 IO",原因可能是:磁盘真慢、也可能是某个进程在疯狂同步写小文件、甚至是网络存储(NFS)延迟。iostat 的作用是确认到底是不是、是哪块盘——%util高且await大才算坐实磁盘瓶颈。更多见 iowait 高怎么排查。
四、实战:定位慢盘
iostat -x 1
# 发现 sdb 的 %util 常年 99%、await 50ms
# → sdb 是瓶颈盘,检查谁在猛写它
lsof -nP | grep sdb # 看哪些进程在用它
# 或 iotop 看进程的 IO 占用确认是哪块盘后,再查"谁在猛写"(lsof、iotop),是该限速、换盘、还是优化写入模式。整个链路是:vmstat 定性 IO 瓶颈 → iostat -x 定位盘 → 查进程。
五、和 vmstat / top 的分工
| 工具 | 看什么 |
|---|---|
| vmstat | 系统级:有没有 IO 瓶颈(wa/b) |
iostat -x | 设备级:哪块盘、多忙、多慢 |
| top | 进程级:哪个进程 CPU/内存高(top) |
iostat 把"IO 瓶颈"从"有/无"推进到"哪块盘/多严重",是磁盘排障不可替代的一环。若环境没装,先
apt install sysstat/yum install sysstat。
一句话总结
iostat = 磁盘 IO 监控(-x 必开):r/s w/s 看 IO 次数、rkB/s 看吞吐、await 看平均等待、%util 近 100% 即设备饱和;iowait 高先经 vmstat 定性、再 iostat 定位哪块盘,别直接怪磁盘。它把"IO 瓶颈"从有无推进到哪盘多慢,是磁盘排障关键一环。