iostat 命令详解
iostat 是 Linux 系统 IO 性能排查的核心工具,用于监控 CPU 和磁盘 I/O 负载。
一、安装与基础语法
安装
# CentOS/RHEL
yum install -y sysstat
# Ubuntu/Debian
apt install -y sysstat
基础格式
iostat [选项] [间隔秒数] [输出次数]
示例:
iostat:输出单次统计(开机至今平均值)iostat 2:每 2 秒输出一次,持续刷新iostat 2 5:每 2 秒输出一次,共输出 5 次
二、常用选项
| 选项 | 作用 |
|---|---|
-c | 仅显示 CPU 统计 |
-d | 仅显示磁盘统计(最常用) |
-x | 显示扩展详细 IO 统计(重点,排查瓶颈必用) |
-k | 单位改为 KB(默认块) |
-m | 单位改为 MB |
-N | 显示 LVM/设备名 |
-p | 显示分区统计(如 sda1、sda2) |
三、默认输出解读
CPU 统计字段
| 字段 | 说明 |
|---|---|
%user | 用户态 CPU 占比 |
%nice | 低优先级进程 CPU 占比 |
%system | 内核态 CPU 占比 |
%iowait | IO 等待占比(关键),数值高 = 磁盘存在瓶颈 |
%steal | 虚拟化场景被宿主机抢占的 CPU |
%idle | 空闲 CPU 占比 |
基础磁盘字段
| 字段 | 说明 |
|---|---|
Device | 磁盘设备名(sda、sdb) |
tps | 每秒 I/O 请求数(合并后次数) |
kB_read/s | 每秒读取量(KB) |
kB_wrtn/s | 每秒写入量(KB) |
四、扩展统计(-x 核心重点,排障必用)
命令:iostat -xdm 2(只看磁盘、单位 MB、2 秒刷新)
关键字段详解
| 字段 | 说明 | 参考值 |
|---|---|---|
%util | 设备繁忙百分比(重中之重) | >80% 存在 I/O 瓶颈 |
await | I/O 请求平均等待时间(ms) | <5ms 理想,>20ms 拥堵 |
r_await | 读请求平均等待时间(ms) | 区分读慢还是写慢 |
w_await | 写请求平均等待时间(ms) | 区分读慢还是写慢 |
svctm | 设备实际处理 I/O 时间(ms) | 远小于 await 表示队列排队严重 |
rrqm/s | 每秒合并读请求数 | — |
wrqm/s | 每秒合并写请求数 | — |
r/s | 每秒读次数 | — |
w/s | 每秒写次数 | — |
五、典型故障判断
| 现象 | 结论 |
|---|---|
%iowait 高、%idle 高,CPU 不忙但系统卡 | 磁盘 IO 瓶颈,优先看 await、%util |
await 很高,但 svctm 很小 | I/O 请求太多,队列阻塞 |
await 和 svctm 都很大 | 磁盘硬件性能不足/故障 |
%util 接近 100%,但读写量不大 | 随机小 IO(数据库、日志频繁刷盘) |
六、常用组合命令
# 1. 磁盘详细统计,MB 单位,2 秒刷新
iostat -xdm 2
# 2. 只看 CPU 状态
iostat -c 2
# 3. 查看磁盘 + 分区详情
iostat -xdp 2
# 4. 开机至今整体汇总(静态统计)
iostat -xd
七、小结
- 日常巡检:
iostat -d 2看基础读写 - 排查卡顿/慢 IO:必加
-x,重点盯await、%util、%iowait - 机械硬盘对随机 IO 敏感,SSD 高
%util不一定代表瓶颈,结合等待时间综合判断
关联文档
- 服务器 IO 过高排查流程 — IO 排查实战
- ../../network/网络 — 网络 IO 排查
- ../../monitoring/监控与可观测性 — 系统指标采集