Linux iostat
命令详解:CPU 和磁盘 I/O 监控
在 Linux 服务器上,性能优化和故障排查是日常运维的重要任务,而 iostat
命令是分析 CPU 负载 和 磁盘 I/O 的利器。
本文将深入解析 iostat
的使用方法,并通过 实例解析 CPU 和磁盘 I/O 指标,帮助大家掌握其应用场景。
1. 什么是 iostat
?
iostat
(I/O Statistics)用于 监控 CPU 使用率 和 磁盘 I/O 性能,帮助判断:
- CPU 是否因 I/O 过载
- 磁盘是否存在瓶颈
- 系统整体负载情况
iostat
主要包含两部分:
- CPU 负载信息(用户态、系统态、I/O 等待等)
- 磁盘 I/O 负载信息(吞吐量、TPS、读写速率等)
2. iostat
命令安装
如果系统没有安装 iostat
,可以通过 sysstat
软件包进行安装:
# CentOS / RHEL
yum install -y sysstat# Ubuntu / Debian
apt install -y sysstat
3. iostat
命令基本使用
(1) 查看 CPU 和磁盘 I/O 负载
iostat
示例输出:
Linux 2.6.32-696.10.1.el6.x86_64 (devhost32) 03/20/2025 _x86_64_ (32 CPU)avg-cpu: %user %nice %system %iowait %steal %idle0.15 0.00 0.06 0.04 0.00 99.76Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 2.97 0.53 76.33 8195476 1180424664
sdb 1.56 0.98 45.19 15172746 698917744
📌 分析:
- CPU 部分:
%iowait = 0.04%
→ 说明磁盘 I/O 没有严重影响 CPU 性能。%idle = 99.76%
→ CPU 资源充足,负载较低。
- 磁盘部分:
sda
的Blk_wrtn/s = 76.33
→ 磁盘写入压力较大,但 TPS(2.97)不高。
4. 详细参数解析
(1) CPU 负载指标
avg-cpu: %user %nice %system %iowait %steal %idle
指标 | 说明 |
---|---|
%user | 用户态 CPU 使用率(应用程序占用) |
%nice | 低优先级任务 CPU 使用率(nice 调度的进程) |
%system | 内核态 CPU 使用率(驱动程序、系统调用等) |
%iowait | CPU 等待磁盘 I/O 的时间,高于 10% 可能存在 I/O 瓶颈 |
%steal | 被虚拟机管理程序(hypervisor)抢占的 CPU 时间,用于虚拟化环境 |
%idle | CPU 空闲率,越高代表负载越低 |
(2) 磁盘 I/O 指标
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
指标 | 说明 |
---|---|
Device | 设备名称(如 sda 、sdb 、dm-* 等) |
tps | 每秒 I/O 传输数(事务数),代表磁盘 IOPS |
Blk_read/s | 每秒读取的块数(默认 512B/块) |
Blk_wrtn/s | 每秒写入的块数 |
Blk_read | 读取的总块数 |
Blk_wrtn | 写入的总块数 |
📌 重点关注 tps
和 iowait
:
tps
高,但iowait
低 → 说明磁盘可以承受压力,I/O 性能正常。tps
低,但iowait
高 → 可能是磁盘 I/O 瓶颈,建议优化存储。
5. iostat
高级用法
(1) 每秒更新一次,连续监控
iostat 1
📌 适用于实时监控系统 I/O 变化趋势。
(2) 只显示磁盘 I/O 统计
iostat -d 2
📌 每 2 秒刷新一次,仅显示磁盘 I/O 信息。
(3) 显示扩展 I/O 信息
iostat -x 1
📌 包含 util
指标,显示磁盘利用率:
Device: rrqm/s wrqm/s r/s w/s svctm %util
sda 0.00 45.33 10.21 78.14 1.32 85.23
指标 | 说明 |
---|---|
rrqm/s | 每秒合并的读请求数 |
wrqm/s | 每秒合并的写请求数 |
r/s | 每秒读取次数 |
w/s | 每秒写入次数 |
svctm | 平均 I/O 响应时间(毫秒) |
%util | 磁盘忙碌率(接近 100% 表示磁盘瓶颈) |
📌 如何判断磁盘瓶颈?
%util > 80%
:磁盘负载过高。svctm
过大(> 10ms):I/O 响应变慢,可能是磁盘性能问题。
6. 典型故障分析
(1) iowait
过高(磁盘瓶颈)
%user %system %iowait %idle1.5 1.2 40.3 57.0
📌 解决方案:
- 确认磁盘负载:
iostat -x 1
- 查看 I/O 进程:
iotop
- 增加 SSD、优化磁盘 RAID 或 I/O 调度策略
(2) %steal
过高(虚拟化瓶颈)
%user %system %steal %idle5.0 3.2 45.7 46.1
📌 解决方案:
%steal
过高 → 说明 CPU 资源被虚拟化管理器抢占,需要增加物理 CPU 资源。
7. 总结
关注点 | 现象 | 可能问题 |
---|---|---|
%iowait 过高 |
>10% |
磁盘 I/O 瓶颈 |
%util 过高 |
>80% |
磁盘压力大 |
%steal 过高 |
>20% |
虚拟机资源不足 |
✅ iostat
是 分析 CPU 与磁盘 I/O 瓶颈的利器,可以与 iotop
、vmstat
等工具结合使用,快速定位系统性能问题。