首页/系统/信创系统运维速查/iostat 查看磁盘 IO 压力
服务与运维65 条

iostat 查看磁盘 IO 压力

iostat -x 看每块盘的吞吐与延迟:%util 接近饱和、await/r_await/w_await 升高说明排队;配合 -d 只看磁盘、秒级刷新定位突发压力。

信创系统运维速查系统更新于 2026-10-13

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 看健康状态

易错点

  • 拿首行均值下结论:首行是开机以来的累计平均,采样后的行才是当前状态
  • 引用老资料里的 svctm 列:新版 sysstat 已移除该列,队列长度也已更名为 aqu-sz(旧名 avgqu-sz)
  • 只看 %util 判断饱和:SSD 与多队列设备上该值高不必然等于瓶颈,要结合 await 与业务响应时间
  • 没有启用 sysstat 采集服务就想查历史:历史数据来自 sar 采集,未开启时查不到过去的数据
  • 机械盘与 SSD 用同一套阈值判断:两者合理延迟差一个量级,先确认介质类型再看数值

数据来源与参考

  • man 1 iostat(sysstat)
  • sysstat 官方文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌