iostat必须加-x参数才能获取关键性能指标:await(平均I/O耗时,超10–20ms需警惕)、%util(设备忙时百分比,持续>80%提示饱和,但NVMe下失效)、avgqu-sz(平均队列长度,>1表明有请求等待)、r_await/w_await(读写分离延迟,助定位瓶颈类型)。

iostat 是最直接有效的磁盘 I/O 性能查看工具,但必须加 -x 参数才能看到关键指标(如 await、%util、svctm),默认输出几乎没用。
iostat -x 输出里哪些字段真正影响性能判断
不带 -x 的 iostat 只显示基础吞吐量(kB_read/s、kB_wrtn/s)和简单事务数(r/s、w/s),这些数据无法反映延迟或瓶颈位置。加 -x 后才暴露真实问题:
-
await:I/O 请求平均耗时(毫秒),超过 10–20ms 就要警惕;SSD 通常应 15ms 往往已排队 -
%util:设备忙时百分比,持续 > 80% 表示磁盘饱和,但注意:NVMe 设备可能支持多队列,%util失效,得看avgqu-sz -
avgqu-sz:平均队列长度,> 1 表示有请求在等待;值越大,说明并发压力越高或响应越慢 -
r_await/w_await:分开看读/写延迟,可定位是读密集还是写阻塞(比如日志刷盘卡住)
iotop 适合快速定位“谁在疯狂读写”
iotop 不提供吞吐量绝对值,但能实时按进程排序 I/O 带宽,对排查突发性高 IO 最有效:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 运行
iotop -o只显示当前有 I/O 活动的进程,避免干扰 - 注意看
IO>列(实际读写速率)和IO%列(占设备总带宽比例),后者更反映相对影响 - 如果看到
java或mysqld占比长期 > 70%,基本可锁定为业务负载源;但要注意内核线程(如kswapd0、jbd2)也可能占高 IO,那是系统级行为 - 权限问题常见:非 root 运行
iotop只能看到自己进程,且无法显示所有列,必须用sudo iotop
别只盯单个工具,用 iostat + iotop + vmstat 组合交叉验证
单独看任一工具都容易误判。例如 iostat 显示 %util 很低,但 iotop 发现某个进程持续写入,这时要查 vmstat 1 的 bi/bo(块输入/输出 KB/s)是否同步升高 —— 若不升高,可能是缓存未刷盘,真实压力还没到磁盘;若同步升高,说明确实落盘了。
-
vmstat 1中的b(等待 I/O 的进程数)> 0 是严重信号,表示进程已在队列中阻塞 -
iostat -d -x 1 3和iotop -o -b -n 3可写成一行脚本同时抓取,避免时间错位 - 容器环境要注意:
iotop显示的是宿主机视角的进程,容器内 PID 和宿主机 PID 不同,需用docker top或crictl ps对齐
真正难的是区分「慢磁盘」和「慢应用」:await 高但 svctm 低,说明卡在队列里(可能是上层调度或锁竞争);svctm 高才真代表磁盘响应慢。这个差值经常被忽略。


















