iostat性能测试中需要特别关注的指标和分析思路
iostat 实际应用示例的命令输出字段的详细解释,以及性能测试中需要关注的关键点。
一、实际应用示例命令输出详解
示例命令
iostat -dx 2 5
-d: 显示磁盘统计。-x: 扩展统计信息。2: 每 2 秒刷新一次。5: 共输出 5 次报告。
输出字段含义
假设输出来自磁盘 sda,部分字段如下:
Device rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.01 1.23 8.0 15.0 320.0 600.0 80.00 1.50 50.0 30.0 70.0 5.0 90.0
-
rrqm/s和wrqm/s- 含义:每秒合并的读/写请求数。
- I/O 调度器会将相邻的磁盘请求合并为更大的操作以提高效率。
- 关注点:合并率高(如
rrqm/s> 10),说明可能存在大量随机小 I/O 请求(例如 OLTP 数据库);合并率低则可能为大文件顺序读写。
- 含义:每秒合并的读/写请求数。
-
r/s和w/s- 含义:每秒实际完成的读/写操作次数。
- 关注点:
- 总和(
r/s + w/s)决定了磁盘的随机 I/O 压力。 - 普通 HDD 的极限约为 150-200 IOPS,SSD 可达数万 IOPS。
- 总和(
-
rkB/s和wkB/s- 含义:每秒读/写的数据量(单位 KB)。如果使用
-m选项则为 MB/s。 - 关注点:
- 监控磁盘的吞吐量(带宽),如持续超过磁盘硬件规格(例如 HDD 100MB/s,SSD 500MB/s)表示带宽瓶颈。
- 含义:每秒读/写的数据量(单位 KB)。如果使用
-
avgrq-sz- 含义:平均每个请求的数据大小(单位为扇区,1 扇区=512B)。
- 计算公式:
avgrq-sz = (rkB/s + wkB/s) * 1024 / (r/s + w/s) / 512。 - 关注点:
- 值越大(如 > 64 扇区=32KB),表示顺序读写为主;
- 值越小(如 < 16 扇区=8KB),表示随机读写为主(如数据库事务)。
-
avgqu-sz- 含义:平均 I/O 队列长度(等待处理的请求数)。
- 关注点:
- 若长期大于 1,表示磁盘已饱和,请求需要排队;
- 例如,若
avgqu-sz=3表示平均有 3 个请求在队列中等待。
-
await、r_await、w_await- 含义:
await: 所有 I/O 请求的平均耗时(包括排队时间 + 服务时间,单位毫秒)。r_await/w_await: 读/写的平均耗时。
- 关注点:
- HDD 的合理范围通常 < 20ms,SSD < 2ms。
- 若
await远高于svctm(如await=50ms,svctm=5ms),说明大部分时间花在排队上,可能存在 I/O 拥塞。
- 含义:
-
svctm- 含义:磁盘处理 I/O 请求的平均服务时间(实际服务时间,不包括排队时间)。
- 注意:在较新的 Linux 内核中,
svctm可能不准确(推荐用await - (avgqu-sz * svctm / 1000)估算排队时间)。
-
%util- 含义:磁盘的 I/O 利用率(设备忙的时间百分比)。
- 关注点:
- 若接近 100%,表示磁盘饱和,成为系统瓶颈。
- SSD/NVMe 的
%util高可能是正常的(并行处理能力强),需结合await综合判断。
二、性能测试中的关键关注点
1. 磁盘负载类型
- 顺序 vs 随机读写:
- 顺序读写(
avgrq-sz大)通常吞吐量高(适合 HDD)。 - 随机读写(
avgrq-sz小)时,需关注 IOPS(r/s + w/s),例如数据库场景。
- 顺序读写(
2. 磁盘性能规格对比
- 如果
%util接近 100% 且吞吐量/IOPS 接近磁盘硬件上限,说明已达瓶颈(如 HDD 吞吐量 100MB/s,SSD 500MB/s)。
3. I/O 队列状态
avgqu-sz和await分析:avgqu-sz持续大于 1:磁盘队列堆积。await> 20ms(HDD)或 > 2ms(SSD):可能存在延迟问题。
4. CPU 与 I/O 的关系
%iowait解读:- 高
%iowait表示 CPU 在等待 I/O,可能是磁盘性能不足,也可能是应用频繁同步写入(如fsync)。 - 若
%iowait高但磁盘%util低,可能是 RAID 卡或驱动程序问题。
- 高
5. 混合读写场景
- 读写比例(
r/s:w/s)会影响性能:- 写密集场景(如日志写入)需关注
w_await和wkB/s。 - 读密集场景(如数据库查询)需关注
r_await和rkB/s。
- 写密集场景(如日志写入)需关注
三、典型性能问题案例分析
案例 1:高磁盘利用率但吞吐量低
- 现象:
%util=99%,但rkB/s=10MB/s(假设是 SATA SSD,标称吞吐量 500MB/s)。 - 原因:大量随机小 I/O(如
r/s=1000,avgrq-sz=8KB),导致 IOPS 耗尽但吞吐量不高。 - 解决:优化应用 I/O 模式(合并小请求)或升级为更高 IOPS 的 NVMe 磁盘。
案例 2:高 await 但低 %util
- 现象:
await=150ms,%util=30%。 - 原因:
- 应用发出大量非顺序请求,磁盘寻道时间较长(HDD 常见)。
- RAID 卡缓存策略不当(如写缓存禁用)。
- 解决:优化 I/O 调度算法(如改为
deadline)、启用磁盘写缓存。
案例 3:SSD %util 接近 100%,但性能正常
- 现象:NVMe SSD 的
%util=100%,但await=0.5ms,avgqu-sz=0.1。 - 解释:SSD 并行处理能力强,
%util仅是时间片占用比例,只要延迟低、队列短,无需担心。
四、性能测试最佳实践
- 持续监控:使用
iostat -dx 1实时观察动态负载,尤其在压测时关注峰值。 - 综合工具分析:
- 使用
iotop查看具体进程的 I/O。 - 结合
vmstat的bi(块输入)、bo(块输出)字段验证全局 I/O 负载。
- 使用
- 区分稳态与峰值:
- 稳态负载:关注
avgqu-sz和%util是否稳定。 - 突发峰值:可能导致短暂队列堆积(如
avgqu-sz突增),需分析是否可接受。
- 稳态负载:关注
- 跨多磁盘分析:
- 若使用 RAID/LVM,需检查所有物理磁盘的负载是否均衡(例如
iostat -x sda sdb)。
- 若使用 RAID/LVM,需检查所有物理磁盘的负载是否均衡(例如
五、总结要点
- 核心字段:
r/s + w/s(IOPS)、rkB/s + wkB/s(吞吐量)、await、%util。 - 性能瓶颈判断:
%util高 +await高 → 磁盘是瓶颈;%iowait高但%util低 → 可能是应用层问题。
- 优化方向:
- 硬件升级(如 HDD → SSD);
- 调整 I/O 调度算法或文件系统参数(如
noatime); - 优化应用逻辑(减少随机 I/O 或合并写入)。
浙公网安备 33010602011771号