Linux系统I/O性能监控:iostat命令深度解析
iostat基础用法与核心参数
在排查Linux系统性能瓶颈时,iostat 是评估磁盘I/O负载的关键工具。它能实时输出设备读写吞吐量、请求频率及响应延迟等关键指标。
基本语法
iostat [选项] [间隔时间] [采样次数]
-d:仅显示设备(磁盘)使用情况,不包含CPU统计。-c:仅输出CPU使用率信息。-k:以KB为单位显示数据,替代默认的扇区数。-m:以MB为单位输出,适用于大容量存储场景。-x:启用详细模式,展示更深入的I/O统计项。间隔时间:每次刷新的时间间隔(秒)。采样次数:指定输出行数,省略则持续运行。
快速入门示例
iostat -d -k 2
该命令每2秒刷新一次磁盘活动状态,单位为千字节(KB),适用于观察整体读写速度和传输频率。
详细指标解读(-x 模式)
启用-x后,输出包含多个关键性能维度:
| 字段 | 含义 |
|---|---|
rrqm/s | 每秒合并的读请求数量,反映读操作聚合程度。 |
wrqm/s | 每秒合并的写请求数量,指示写入合并效率。 |
r/s | 每秒完成的读请求数。 |
w/s | 每秒完成的写请求数。 |
avgrq-sz | 平均每次I/O操作的数据块大小(扇区数)。 |
avgqu-sz | 平均等待处理的I/O队列长度,值越低越好。 |
await | 单个I/O请求的平均响应时间(毫秒),包含排队与服务时间。 |
svctm | 单个I/O请求的实际服务时间(毫秒),不包括排队。 |
%util | 设备繁忙时间占比,超过80%即表明高负载。 |
关键关系分析
- await vs svctm:若
await远大于svctm,说明存在大量排队等待,需优化应用或升级硬件。 - %util 接近100%:表示设备几乎持续工作,可能已达到性能极限。
- avgqu-sz 长期偏高:提示系统存在持续性I/O阻塞,应检查是否存在慢速磁盘或并发过高。
典型应用场景
# 查看特定磁盘的吞吐与请求速率(单位KB)
iostat -d -k 1 10
# 以MB为单位查看性能趋势
iostat -d -m 2
# 获取全面的I/O性能指标(含队列、响应时间)
iostat -d -x -k 1 10
# 监控CPU I/O等待占比
iostat -c 1 10
案例分析
某次观测中,对sda10设备进行持续采样:
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda10 1.98 24.75 419.80 6.93 13465.35 253.47 6732.67 126.73 32.15 2.00 4.70 2.00 85.25
分析结果: - 平均每秒约420次读操作,读取速度达6.7MB/s; - 响应时间约4.7毫秒,处于可接受范围; - 设备利用率高达85%,接近满负荷,建议评估是否需要扩容或优化应用逻辑。