命令在看什么
iostat -x 输出每个块设备的扩展统计:r/s 与 w/s 是每秒读写请求数,await 是请求的平均完成时间(毫秒,含排队),aqu-sz 是平均队列深度,%util 表示设备有请求在处理的时间比例,另有 rkB/s、wkB/s 表示吞吐。判断存储瓶颈要把延迟、队列与吞吐合看——单个 %util 达到 100% 不能说明问题,NVMe 与多队列设备本身就能并行处理大量请求。
基本信息
| 适用平台 | Linux(sysstat 包提供 iostat) |
|---|---|
| 常用参数 | -x 扩展统计、-d 只显示设备、-m 以 MB/s 为单位、-t 带时间戳、-z 省略空闲设备 |
| 数据来源 | /proc/diskstats |
| 关键列 | r/s、w/s、rkB/s、wkB/s、await、aqu-sz、%util |
| 首份报告 | 默认是自开机以来的累计均值,用 -y 可跳过 |
| 对比工具 | sar -d(历史)、iotop(进程侧) |
典型使用场景
- 判断是否存在存储瓶颈:延迟、队列与吞吐三者必须合看
- 区分「设备本身慢」与「上游请求太多」:await 高同时 aqu-sz 也高说明在排队
- 多设备或多分区对比,定位哪个盘最吃紧
- 对比 SSD 与机械盘的指标量级,为选型或迁移提供依据
- 容量规划时观察吞吐是否已接近设备能力的上限
查看示例
查看示例
iostat -x 1 3 # 每秒采样一次共 3 次,只看扩展列
iostat -dxm -t 1 5 # 只显示设备、以 MB/s 为单位、带时间戳
iostat -x -z 1 3 # 省略空闲设备,聚焦有负载的目标
iostat -xy 1 3 # -y 跳过自开机以来的首份汇总报告
lsblk -o NAME,MAJ:MIN,SIZE,ROTA # 确认设备名、主次号以及是否机械盘
sar -d 1 3 # 需要历史对比或与 CPU 指标对齐时使用 sar -d关键列读法
| 列 | 含义 | 正常/异常 |
|---|---|---|
| r/s、w/s | 每秒读写请求数 | 与设备类型对比,机械盘通常远低于 NVMe |
| rkB/s、wkB/s | 每秒读写吞吐 | 接近设备上限时说明已饱和 |
| await | 平均完成时间(含排队,毫秒) | 显著高于基线需结合队列判断原因 |
| aqu-sz | 平均队列深度 | 持续偏高说明请求在排队 |
| %util | 设备忙碌时间比例 | NVMe 到 100% 不等于饱和 |
| r_await / w_await | 读写分开的平均延迟 | 混合负载下用于区分读写表现 |
NVMe 与多队列设备可以并行处理大量请求,%util 逼近 100% 的同时延迟可能仍然正常。此时应重点看 await 与 aqu-sz 的组合,以及 r/s、w/s 是否已接近设备能力上限。
iostat 的第一份报告(无 -y 时)是自开机以来的累计均值,直接拿它判断「当前」状态会出错。采样式使用时应至少取三份报告,并只看后面几份。