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
  1. rrqm/swrqm/s

    • 含义:每秒合并的读/写请求数。
      • I/O 调度器会将相邻的磁盘请求合并为更大的操作以提高效率。
    • 关注点:合并率高(如 rrqm/s > 10),说明可能存在大量随机小 I/O 请求(例如 OLTP 数据库);合并率低则可能为大文件顺序读写。
  2. r/sw/s

    • 含义:每秒实际完成的读/写操作次数。
    • 关注点
      • 总和(r/s + w/s)决定了磁盘的随机 I/O 压力。
      • 普通 HDD 的极限约为 150-200 IOPS,SSD 可达数万 IOPS。
  3. rkB/swkB/s

    • 含义:每秒读/写的数据量(单位 KB)。如果使用 -m 选项则为 MB/s。
    • 关注点
      • 监控磁盘的吞吐量(带宽),如持续超过磁盘硬件规格(例如 HDD 100MB/s,SSD 500MB/s)表示带宽瓶颈。
  4. avgrq-sz

    • 含义:平均每个请求的数据大小(单位为扇区,1 扇区=512B)。
    • 计算公式avgrq-sz = (rkB/s + wkB/s) * 1024 / (r/s + w/s) / 512
    • 关注点
      • 值越大(如 > 64 扇区=32KB),表示顺序读写为主;
      • 值越小(如 < 16 扇区=8KB),表示随机读写为主(如数据库事务)。
  5. avgqu-sz

    • 含义:平均 I/O 队列长度(等待处理的请求数)。
    • 关注点
      • 若长期大于 1,表示磁盘已饱和,请求需要排队;
      • 例如,若 avgqu-sz=3 表示平均有 3 个请求在队列中等待。
  6. awaitr_awaitw_await

    • 含义
      • await: 所有 I/O 请求的平均耗时(包括排队时间 + 服务时间,单位毫秒)。
      • r_await/w_await: 读/写的平均耗时。
    • 关注点
      • HDD 的合理范围通常 < 20ms,SSD < 2ms。
      • await 远高于 svctm(如 await=50mssvctm=5ms),说明大部分时间花在排队上,可能存在 I/O 拥塞。
  7. svctm

    • 含义:磁盘处理 I/O 请求的平均服务时间(实际服务时间,不包括排队时间)。
    • 注意:在较新的 Linux 内核中,svctm 可能不准确(推荐用 await - (avgqu-sz * svctm / 1000) 估算排队时间)。
  8. %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-szawait 分析
    • 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_awaitwkB/s
    • 读密集场景(如数据库查询)需关注 r_awaitrkB/s

三、典型性能问题案例分析

案例 1:高磁盘利用率但吞吐量低

  • 现象%util=99%,但 rkB/s=10MB/s(假设是 SATA SSD,标称吞吐量 500MB/s)。
  • 原因:大量随机小 I/O(如 r/s=1000avgrq-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.5msavgqu-sz=0.1
  • 解释:SSD 并行处理能力强,%util 仅是时间片占用比例,只要延迟低、队列短,无需担心。

四、性能测试最佳实践

  1. 持续监控:使用 iostat -dx 1 实时观察动态负载,尤其在压测时关注峰值。
  2. 综合工具分析
    • 使用 iotop 查看具体进程的 I/O。
    • 结合 vmstatbi(块输入)、bo(块输出)字段验证全局 I/O 负载。
  3. 区分稳态与峰值
    • 稳态负载:关注 avgqu-sz%util 是否稳定。
    • 突发峰值:可能导致短暂队列堆积(如 avgqu-sz 突增),需分析是否可接受。
  4. 跨多磁盘分析
    • 若使用 RAID/LVM,需检查所有物理磁盘的负载是否均衡(例如 iostat -x sda sdb)。

五、总结要点

  • 核心字段r/s + w/s(IOPS)、rkB/s + wkB/s(吞吐量)、await%util
  • 性能瓶颈判断
    • %util 高 + await 高 → 磁盘是瓶颈;
    • %iowait 高但 %util 低 → 可能是应用层问题。
  • 优化方向
    • 硬件升级(如 HDD → SSD);
    • 调整 I/O 调度算法或文件系统参数(如 noatime);
    • 优化应用逻辑(减少随机 I/O 或合并写入)。
posted @ 2025-05-23 10:12  玛卡巴卡糖  阅读(328)  评论(0)    收藏  举报