iostat -x 是诊断磁盘 I/O 性能问题最常用也最关键的组合,它能暴露普通模式下看不到的深层指标,比如请求排队、响应延迟、设备饱和度等;不加 -x 时仅显示 tps、kB_read/s 等总量数据,无法判断是请求太慢还是太多、磁盘真忙还是队列干等,而 -x 提供 await、avgqu-sz、%util 等字段才能精准定位瓶颈。

iostat -x 是诊断磁盘 I/O 性能问题最常用也最关键的组合,它能暴露普通模式下看不到的深层指标,比如请求排队、响应延迟、设备饱和度等。直接运行 iostat 或加 -d 只能看到基础吞吐(读/写 KB/s、IOPS),而 -x 才是定位瓶颈的核心。
为什么必须用 -x 查看扩展统计
不加 -x 时,设备行只显示 tps(每秒 I/O 次数)、kB_read/s、kB_wrtn/s 这类总量型数据,无法判断:
- 是请求太慢?还是请求太多?
- 是磁盘真忙?还是请求在队列里干等?
- 是单次操作耗时长?还是系统发了大量小请求?
-x开启后,会输出await、avgqu-sz、%util、svctm等关键字段,才能回答这些问题。
常用搭配方式与含义
推荐按实际场景选择以下命令之一:
实时持续观察(每2秒刷新10次)
iostat -dx 2 10-d排除 CPU 行干扰,-x启用扩展字段,2是采样间隔(秒),10是总次数。适合排查突发 IO 高峰。只看活跃设备(跳过空闲盘)
iostat -dxz 1-z过滤掉整个采样周期内无任何读写活动的设备,避免信息噪音。带时间戳,便于日志比对
iostat -dxt 1-t在每组输出开头加上当前时间(如07/29/2026 18:22:35),方便关联其他监控或应用日志。聚焦某块盘及其分区(例如 nvme0n1)
iostat -dxp nvme0n1 1-p显示该设备下的所有分区(如nvme0n1p1、nvme0n1p2),适合区分系统盘和数据盘行为。
关键字段怎么看
输出中设备部分新增的列,重点盯这四个:
-
await:平均每次 I/O 的等待+服务总耗时(毫秒)超过 10–20ms(HDD)或 1–3ms(SSD/NVMe)就值得警惕;持续高于 50ms 往往说明队列积压严重。
-
avgqu-sz:I/O 请求在内核队列中的平均数量值 > 1 表示有请求排队;SSD 上长期 > 4 或 NVMe 上 > 8,通常意味着应用发压过猛或存储响应跟不上。
-
%util:设备忙时占比(百分比)接近 100% 不代表绝对瓶颈(尤其多队列 NVMe),但若同时
await和avgqu-sz也高,基本可确认设备已饱和。 -
svctm:设备实际处理单个请求的平均时间(毫秒)注意:该值在现代内核中已逐渐失真(被内核弃用),优先参考
await - avgqu-sz × svctm的逻辑关系,而非单独看svctm。
不复杂但容易忽略


















