5 分钟上手 iostat
本页承诺:5 分钟内确认磁盘到底是不是瓶颈——是哪块盘在忙、IO 延迟多高、是随机小 IO 还是顺序大 IO。当 top/vmstat 显示 wa(iowait) 高、b 队列大时,就轮到 iostat 出场。
阅读时间约 4 分钟 + 动手 3 条命令。完整版见 iostat 使用教程。
第 1 步:装好 iostat
bash
yum install -y sysstat # CentOS/RHEL
apt install -y sysstat # Debian/Ubuntu
iostat -V # 能输出版本号 = 装好了第 2 步:跑起来
bash
iostat -x 1 # 扩展模式,每秒刷新(最常用,含 %util/await 关键列)先看顶部 CPU 行确认 iowait 确实高,再看下方设备行。想看某块盘:iostat -x 1 sda nvme0n1。
第 3 步:按列判读(核心 5 列)
bash
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s r_await w_await aqu-sz rareq-sz wareq-sz %util
sda 12.0 340.0 192.0 43520.0 0.0 15.0 0.30 8.50 2.90 16.0 128.0 96.20| 列 | 含义 | 判读 |
|---|---|---|
r/s w/s | 每秒读/写请求数(IOPS) | 量级参考:单块机械盘约 100~200 IOPS,SSD 数千~数万 |
rkB/s wkB/s | 每秒读写吞吐 | 顺序大 IO 时接近盘的理论带宽 |
r_await w_await | 读写平均延迟(ms,含排队+服务) | 最关键。机械盘正常个位数~十几 ms,SSD 应 <1ms;偏高 = 盘慢或请求在排队 |
aqu-sz | 平均队列深度 | 持续 >1 = 请求在排队等设备 |
%util | 设备繁忙占比 | SSD/NVMe 上会失真,别单独看(见下方坑) |
三连问定位瓶颈类型:
- 哪块盘忙 →
%util接近 100% 的盘 - 延迟高不高 →
await是否远超该介质正常值 - 随机还是顺序 →
rareq-sz/wareq-sz:几 KB = 随机小 IO(效率低、伤盘),几百 KB = 顺序大 IO
常见坑(3 秒自查)
| 现象 | 原因 | 解决 |
|---|---|---|
%util 100% 但盘明明没满 | %util 在多队列盘(SSD/NVMe)上失真:并行请求会被重复计入忙时间 | 看 await 和 aqu-sz 判断真实瓶颈 |
| 只知道盘忙,不知道哪个进程 | iostat 数据到设备级为止 | 落进程用 iotop 或 pidstat -d |
| 第一行和后面的数不一样 | 第一行是开机以来平均 | 忽略第一行,从第二行起看实时值 |
| 想细到分区 | 默认只显示整盘 | iostat -xp 1 展开到 sda1/sda2... |
深度入口
- iostat 使用教程—— 全部字段、
/proc/diskstats数据来源、判断口诀 - 5 分钟上手 vmstat—— 先用
wa/b确认方向,再上 iostat - 5 分钟上手 top—— 整机第一现场
- 5 分钟上手系列
一句话总结:iostat 三步 = iostat -x 1 刷新 → 找 %util 高的盘 → 看 await(延迟)+ rareq-sz/wareq-sz(随机/顺序)三连问,5 分钟确认磁盘是不是瓶颈、瓶颈长什么样。