iostat如何揪出Linux磁盘瓶颈?

安装与基础命令

  1. 安装(默认未安装时)

    • Ubuntu/Debian:sudo apt-get install sysstat
    • CentOS/RHEL:sudo yum install sysstat
    • 验证安装:iostat -V
  2. 基础语法

    iostat [选项] [间隔时间] [执行次数]
    • 示例:iostat 2 5 → 每 2 秒输出 1 次,共 5 次

核心选项解析

选项 作用 示例命令
-c 仅显示 CPU 使用率 iostat -c 1
-d 仅显示磁盘 I/O 统计 iostat -d 2
-x 显示扩展磁盘统计(关键指标) iostat -x 1
-m 以 MB/s 代替 KB/s 显示吞吐量 iostat -d -m
-p 指定单个设备(如 sda) iostat -p sda
-t 输出时包含时间戳 iostat -t 1
-h 人类可读格式(与 -m 配合) iostat -d -m -h

输出结果解读(重点)

执行 iostat -x 1 后的关键列:

  1. 磁盘标识

    • Device: 磁盘名称(如 sda、nvme0n1)
  2. I/O 性能指标

    • r/s:每秒读请求次数
    • w/s:每秒写请求次数
    • rkB/s:每秒读取数据量(KB)
    • wkB/s:每秒写入数据量(KB)
  3. 队列与延迟(瓶颈判断核心)

    • %util:磁盘繁忙百分比(>80% 表示可能过载
    • await:I/O 平均等待时间(ms)(>10ms 需警惕
    • svctm:磁盘处理 I/O 所需时间(ms)
    • aqu-sz:平均请求队列长度(>1 表示排队

实战场景示例

  1. 诊断磁盘瓶颈

    iostat -x 1 3  # 每1秒刷新,共3次,观察 %util 和 await
    • %util 持续 >90% 且 await 飙升 → 磁盘过载
  2. 对比读写吞吐量

    iostat -d -m 2  # 每2秒显示磁盘读写(MB/s)
    • 输出示例:
      Device    rMB/s   wMB/s  
      sda       45.2    12.8
  3. 监控特定分区

    iostat -p sdb1 -h 1  # 监控 /dev/sdb1 分区

高级技巧

  1. 结合 CPU 分析

    iostat -c -d -x 1  # 同时监控 CPU 和磁盘
    • %iowait(CPU 等待 I/O 时间)高 → 磁盘成为瓶颈
  2. 生成 CSV 日志

    iostat -o JSON -d -x 1 10 > iostat.log  # 保存为 JSON 格式
  3. 对比 SSD 与 HDD 性能

    iostat -x -p nvme0n1,sda 1  # 同时监控 SSD 和机械硬盘

注意事项

  1. 数据来源:统计基于 /proc/diskstats,非实时硬件监控。
  2. 首次输出:无间隔时间的命令(如 iostat)显示系统启动至今的平均值。
  3. %util 误区:RAID 或 SSD 可能 >100%,因并行处理(需结合 await 判断)。
  4. 性能基线:长期运行 iostat -x 60 > log.txt 建立基准数据。

iostat 是诊断磁盘 I/O 性能的首选工具:

  • 快速定位瓶颈:关注 %utilawaitaqu-sz
  • 关键命令组合:iostat -x 1(扩展统计) + iostat -d -m(吞吐量)
  • 结合场景分析:高 %iowait 需联动磁盘指标排查

引用说明参考 Linux 手册页(man iostat)、IBM 性能分析文档及 Red Hat 系统监控指南,数据指标定义遵循 Sysstat 工具集官方标准。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6717.html

(0)
酷番叔酷番叔
上一篇 2025年7月8日 18:51
下一篇 2025年7月8日 19:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信