iostat 是干什么的
iostat 属于 sysstat 工具集,用来观察磁盘与 CPU 的 IO 压力。加 -x 输出扩展指标,其中 %util 反映设备忙碌比例,await 反映平均等待时间,aqu-sz 反映排队长度;按秒刷新能抓到突发压力。系统变慢但 CPU 不高时,先看它就是最快的一步。
基本信息
| 所属包 | sysstat(需安装,DEB 系同包名) |
|---|---|
| 基本用法 | iostat -x 1 5 |
| 只看磁盘 | iostat -dx 1 5 |
| 单位控制 | -m 以 MB 为单位 |
| 历史数据 | sar -d(同属 sysstat) |
典型使用场景
- 数据库或应用响应变慢,判断磁盘是否成为瓶颈
- 定位是哪块盘压力大,区分系统盘与数据盘
- 上线前压测时评估存储能力与延迟拐点
- 区分读压力与写压力,判断业务是查多还是写多
- 结合 sar 历史数据确认是持续问题还是偶发抖动
常用命令
常用命令
dnf install -y sysstat # 安装工具包,DEB 系用 apt
iostat -x 1 5 # 每秒一次共 5 次,输出扩展指标
iostat -dx 1 5 /dev/sda # 只看指定磁盘
iostat -m -x 1 5 # 以 MB 为单位更直观
iostat -p vda # 显示分区级明细
sar -d -f /var/log/sa/sa13 # 回看某天的磁盘历史数据关键列怎么读
| 列 | 含义 | 异常表现 |
|---|---|---|
| %util | 设备忙碌时间占比 | 持续接近 100 说明排队明显 |
| await | 平均 IO 等待,含排队时间 | 机械盘十几毫秒以上要关注 |
| r_await / w_await | 读与写各自的平均延迟 | 用于区分读瓶颈还是写瓶颈 |
| aqu-sz | 平均队列长度 | 持续大于 1 说明请求在排队 |
| r/s 与 w/s | 每秒读写次数 | 配合延迟判断是否小 IO 密集 |
| areq-sz | 平均请求大小 | 数值偏小说明随机 IO 偏多 |
关注阈值与介质有关:机械盘 await 到十几毫秒、SSD 到毫秒级就值得排查;云主机与虚拟磁盘要先排除宿主机侧抖动,不能只凭一台虚机判断。
-x 输出的第一行是自开机以来的平均值,趋势必须看后续刷新行,否则容易把历史均值当成当前状态。
排查顺序建议
- 先用 iostat -x 找出忙碌与延迟同时偏高的设备
- 再用 iotop 或 pidstat -d 定位到具体进程
- 确认是否有备份、拷贝类任务在长时间顺序读写
- 同时看 df -h 排除空间不足导致的写入异常
- 设备本身有报错时用 smartctl 看健康状态