前言
在 Linux 性能分析与故障排查过程中,磁盘 I/O 性能往往是系统瓶颈的重要来源之一。iostat
作为 sysstat 工具包中的一个关键工具,能够实时监控 CPU 使用率和磁盘 I/O 统计信息,是系统管理员必备的命令之一。本文将围绕 iostat
命令的使用进行深入讲解,涵盖基础语法、各字段含义、实战场景分析以及结合其他工具进行扩展使用,帮助读者全面掌握 iostat
的使用技巧。
一、iostat 简介
1.1 命令介绍
iostat
(Input/Output Statistics)是用于报告 CPU 统计信息和所有块设备的 I/O 统计数据的工具。
1.2 工具安装
在部分 Linux 系统中默认未安装,可通过以下命令安装:
# Debian/Ubuntu 系统
sudo apt install sysstat
# CentOS/RHEL 系统
sudo yum install sysstat
安装完成后,可使用 iostat
命令。
二、基本语法与输出解析
2.1 基本语法
iostat [参数] [时间间隔] [次数]
例如:
iostat 2 3
表示每 2 秒输出一次,共输出 3 次。
2.2 常用参数
参数 | 含义 |
---|---|
-c | 仅显示 CPU 统计信息 |
-d | 仅显示磁盘统计信息 |
-x | 显示扩展磁盘统计信息 |
-k/-m | 以 KB/MB 为单位显示 |
-t | 显示时间戳 |
-p [device] | 显示设备及其分区统计信息 |
2.3 输出字段说明(以 iostat -x
为例)
CPU 部分
字段 | 含义 |
---|---|
%user | 用户空间占用 CPU 百分比 |
%nice | nice 值为非零的用户进程占用 CPU 百分比 |
%system | 内核空间占用 CPU 百分比 |
%iowait | 等待 I/O 完成所占用的 CPU 百分比 |
%steal | 虚拟化中其他客户占用的 CPU 时间 |
%idle | 空闲 CPU 百分比 |
设备部分
字段 | 含义 |
---|---|
Device | 设备名,如 sda、nvme0n1 |
rrqm/s | 每秒合并的读请求数 |
wrqm/s | 每秒合并的写请求数 |
r/s | 每秒完成的读 I/O 请求数 |
w/s | 每秒完成的写 I/O 请求数 |
rkB/s | 每秒读取的 KB 数 |
wkB/s | 每秒写入的 KB 数 |
avgrq-sz | 平均每次 I/O 请求的数据大小(扇区) |
avgqu-sz | 平均 I/O 请求队列长度 |
await | 平均每次 I/O 操作的等待时间(毫秒) |
svctm | 平均每次 I/O 请求的服务时间(毫秒) |
%util | 设备利用率(越接近 100%,表示越繁忙) |
三、典型使用场景与实战分析
3.1 快速查看 CPU 与磁盘整体使用率
iostat -cd 1 5
-
实时观察 CPU 与磁盘 I/O 负载。
3.2 分析磁盘瓶颈
iostat -x 1 5
-
关注
%util
是否持续接近 100%,await
是否过高。 -
avgqu-sz
较大表示磁盘排队严重。
3.3 查看指定磁盘的 I/O 活动
iostat -x -p sda 2 3
-
同时查看
/dev/sda
及其分区的性能指标。
3.4 带时间戳的日志记录(结合 -t
)
iostat -xt 2 >> /var/log/iostat.log
-
后期可用于分析趋势。
四、结合其他工具的扩展分析
4.1 与 sar 联合使用
sar
可长期采集历史性能数据,与 iostat
实时分析互补。
sar -d 1 5
4.2 使用 iotop 分析进程级磁盘 I/O
sudo iotop
-
实时显示哪个进程在进行 I/O 操作。
4.3 与 grafana + prometheus 结合
-
node_exporter
提供磁盘指标,Grafana 面板可直观展示趋势图。
五、持久化记录与监控方案
5.1 自定义脚本记录 iostat
#!/bin/bash
while true; do
date >> /var/log/iostat_daily.log
iostat -x -t >> /var/log/iostat_daily.log
sleep 60
done
-
可配置为 systemd 或 crontab 后台运行。
5.2 配置日志轮转
使用 logrotate
工具控制日志增长。
六、性能调优参考
-
%iowait
长时间过高,可能说明磁盘 I/O 等待成为瓶颈。 -
%util
过高但svctm
很低,可能是磁盘承压能力较差。 -
优化手段:SSD 替换、磁盘 RAID、调整队列深度、优化应用程序 I/O 模型等。
七、常见问题与误区
7.1 iostat 第一次输出不准确?
-
第一次输出为系统启动以来的累计平均值,非实时数据。
-
建议使用
iostat 2 5
方式获取连续输出中的后几次值。
7.2 %util 一定是满磁盘?
-
不完全正确,高 util 说明 I/O 密集,但也可能是大量小 I/O。
7.3 await 一定表示性能差?
-
不完全成立,需要结合
avgqu-sz
和%util
综合判断。
八、结语
通过本文的讲解,相信你已经掌握了 iostat
的核心用法与分析技巧。在实际工作中,磁盘性能问题不仅会拖慢系统响应,还可能引发服务异常,掌握 iostat
有助于快速定位瓶颈、提升系统稳定性。同时,建议配合 iotop
、sar
、perf
、blktrace
等工具综合分析。
未来你可以将 iostat
纳入日常监控体系中,如结合 Prometheus 采集指标,构建完整的 I/O 监控面板,实现自动化预警与告警,为系统运维保驾护航。