iostat 是什么
iostat 由 sysstat 提供,报告块设备层面的 IO 情况:每秒读写次数、吞吐量、平均等待时间、队列深度与设备利用率。它最有价值的地方在于把「设备忙不忙」与「单次 IO 慢不慢」分开——await 高说明每次请求耗时长,可能是排队也可能是后端慢;%util 高说明设备一直在忙。两者组合起来,才能判断是负载过重还是存储本身有问题。
基本信息
| 适用平台 | Linux(sysstat 包,部分最小化系统需自行安装) |
|---|---|
| 命令语法 | iostat [选项] [间隔 [次数]] |
| 常用选项 | -x 扩展统计(含 await 与 %util)、-z 跳过无 IO 的设备、-d 只显示设备不显示 CPU、-m 以 MB 为单位、-k 以 KB 为单位、-p 显示分区、-y 忽略第一份自开机以来的统计、-t 显示时间戳 |
| 采样语义 | 第一份报告是自开机以来的累计平均,通常没有参考价值;第二份起才是区间值 |
| 权限要求 | 普通用户即可读取;部分设备统计在容器或受限环境中不可见 |
典型使用场景
- 确认磁盘瓶颈:负载高且 wa 高时,用 iostat 验证是否设备侧饱和
- 区分延迟问题:await 明显偏高而 util 不高,说明后端存储或虚拟化层慢
- 观察写入压力:备份、日志、数据库写入对磁盘的影响
- 容量规划:统计持续吞吐与 IOPS,为选盘与规格调整提供依据
- 定位个别设备:用 -d 与设备名限定范围,避免被无关设备刷屏
- 配合 vmstat 看现场:vmstat 给等待类型,iostat 给设备侧细节
常用示例
常用示例
iostat -xz 1 5 # 扩展统计:1 秒采样,共 5 次
iostat -xz -y 1 3 # 跳过自开机以来的第一份统计
iostat -x -d sda 1 # 只看单个设备
iostat -p ALL 2 # 含分区级统计
iostat -m -x 1 3 # 以 MB/s 为单位
iostat -t -xz 1 3 # 每行带时间戳,便于与日志对齐
vmstat 1 5 # 与 vmstat 的 wa、b 对照看
iotop -o -b -n 2 | head # 找出具体是哪个进程在压 IO关键列读法
| 列 | 含义 | 异常判断 |
|---|---|---|
| r/s、w/s | 每秒读、写请求数(IOPS) | 与小文件密集访问相关 |
| rkB/s、wkB/s | 读写吞吐量 | 与顺序大文件访问相关 |
| await | 平均单次 IO 耗时(毫秒),含排队时间 | 明显高于设备正常水平即为异常 |
| r_await、w_await | 读与写各自的平均耗时 | 分别判断读写哪一侧慢 |
| aqu-sz | 平均队列长度 | 持续增大说明请求堆积严重 |
| %util | 设备有请求在处理的时间比例 | 传统单队列设备上接近 100% 即饱和 |
第一份报告不要用:iostat 输出的第一部分是自开机以来的平均值,采样窗口可能有几天,无法反映当前状态。要么加 -y 跳过它,要么直接看第二次及之后的行。批量采集归档时同样要注意这一点,否则历史曲线会被开机以来的均值污染。
%util 的含义受设备架构影响:它诞生于单队列磁盘时代,在 NVMe 与多队列设备上,即使并行能力早已用满,该值也可能只显示为某个百分比。判断这类设备是否饱和,应更多参考 await 与 aqu-sz 的变化趋势,而不是只盯 %util 是否到 100%。
云主机与 RAID 场景下要交叉验证:iostat 看到的是虚拟机或阵列呈现给操作系统的逻辑设备,其性能还受后端存储、网络块存储与阵列缓存策略影响。本地指标正常而应用仍慢时,应同时查看云平台或存储设备的监控数据。