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