直接用 iostat -xdm 1 就能实时分析磁盘吞吐量与延迟,关键不是记单个数值,而是看 rMB/s+wMB/s、await、avgqu-sz 三者配合:吞吐反映实际带宽占用,await 表示响应延迟,avgqu-sz 揭示队列积压,需结合设备类型(如 NVMe await >2ms 即需警惕)综合判断瓶颈。

直接用 iostat -xdm 1 就能实时分析磁盘吞吐量与延迟,关键不是记单个数值,而是看几个指标之间的配合关系。
先装好再运行
iostat 属于 sysstat 工具包,系统默认不一定自带:
- CentOS/RHEL/Rocky/AlmaLinux:dnf install -y sysstat(8+)或 yum install -y sysstat(7)
- Debian/Ubuntu:apt update && apt install -y sysstat
- openSUSE:zypper install -y sysstat
装完即可使用,无需启动服务或配置——它直接读取内核的 /proc/diskstats,是纯采集命令。
核心命令与字段含义
推荐日常使用:iostat -xdm 1
-
-x:启用扩展模式,显示真实 IOPS 和延迟指标(
r_ios/w_ios、r_await/w_await、avgqu-sz) - -d:只显示磁盘设备,跳过 CPU 行,界面更干净
- -m:单位统一为 MB/s,比 KB 更直观
- 1:每秒刷新一次,便于观察动态变化
若只关注某块盘(如 /dev/nvme0n1),加设备名:iostat -xdm 1 /dev/nvme0n1
吞吐量怎么看才准
别被 r/s、w/s 或 rkB/s、wkB/s 迷惑——它们受 page cache、请求合并、IO 调度影响,容易失真。
- 真实吞吐量看:rMB/s + wMB/s(绕过缓存,落到块设备的实际速率)
- 真实 IOPS 看:r_ios + w_ios(驱动层上报的物理下发次数)
- 验证一致性:算一下
avgrq-sz × r_ios × 512 ÷ 1024 ≈ rMB/s × 1024,若偏差大,说明有压缩、协议开销或队列重排
例如 SATA SSD 标称 500MB/s,若 rMB/s + wMB/s 长期只有 60MB/s,但 r_ios 很高、await 却飙升,大概率是小 IO 随机访问压垮了介质,而非带宽不足。
延迟怎么判断是否异常
延迟不能孤立看数字,要结合设备类型和队列状态:
-
await(整体平均等待毫秒):机械盘 >15ms、SATA SSD >5ms、NVMe >2ms 就需警惕;持续 >30ms 且
avgqu-sz > 2,基本确认存在排队 - r_await / w_await:分开看读写延迟。比如数据库写延迟高但读正常,可能指向日志刷盘或 WAL 同步问题
- avgqu-sz(平均队列长度):HDD >2、SSD >1、NVMe >4,说明上层下发太快,设备或调度器已跟不上
- 特别注意:await 高但 %util 很低(如 ,说明请求卡在内核层(如 ext4 journal 锁、bio 合并失败、blk-mq 队列拥塞),不是磁盘慢


















