iostat命令

iostat(Input/Output Statistics)是Linux系统中用于监控磁盘I/O性能和CPU使用率的核心工具,可实时查看磁盘读写速度、I/O等待时间、设备繁忙程度等关键指标,与top、free命令互补——top侧重进程与CPU,free侧重内存,iostat聚焦I/O子系统,是排查磁盘瓶颈、定位I/O密集型进程的必备工具。默认情况下,iostat会输出系统启动以来的平均I/O统计信息,支持实时刷新监控。

一、iostat命令基础使用

1.1 安装说明

iostat属于sysstat工具集,部分最小化安装的Linux系统可能未预装,需手动安装:

# CentOS/RHEL系列
yum install -y sysstat

# Ubuntu/Debian系列
apt-get install -y sysstat

# 验证安装
iostat --version

1.2 基本语法

# 基础用法:输出系统启动以来的CPU和磁盘I/O平均统计
iostat

# 完整语法
iostat [选项参数] [设备名] [刷新间隔秒数] [刷新次数]

说明:设备名(如sda、vda)可选,不指定则显示所有磁盘设备;刷新间隔和次数配合使用,实现实时监控(如iostat 2 3表示每2秒刷新一次,共刷新3次)。

1.3 核心选项参数

iostat选项丰富,核心用于过滤输出内容、优化显示格式,常用选项如下:

# 核心功能选项
-c:仅显示CPU相关统计信息(等价于默认无选项的CPU部分)
-d:仅显示磁盘I/O相关统计信息(最常用,聚焦磁盘性能)
-x:显示扩展I/O统计信息(含读写响应时间、设备繁忙率等核心指标,推荐排查问题时使用)
-k:以千字节(KiB)为单位显示磁盘读写数据量(默认)
-m:以兆字节(MiB)为单位显示磁盘读写数据量(日常使用更直观)
-t:在输出中添加时间戳,便于日志记录和时间关联分析
-p <设备名>:显示指定设备及其分区的I/O统计(如-p sda,显示sda及sda1、sda2等分区)

# 其他实用选项
-h:以人类可读格式显示(部分系统支持,自动适配单位)
-V:显示iostat版本信息
-o <文件名>:将统计结果输出到指定文件,便于后续分析

二、iostat命令输出界面解读

iostat默认输出分为CPU统计区磁盘I/O统计区,结合核心选项-dxtm可获取更全面的I/O性能数据,以下分场景详细解读。

2.1 默认输出(iostat)

Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)  01/27/2026  _x86_64_    CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.25    0.00    0.10    0.01    0.00   99.64

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               0.85        12.30         4.50    1265432     460890
vdb               0.05         0.20         0.00     20480          0    (4               

CPU统计区(avg-cpu)

与top命令的CPU统计逻辑一致,重点关注%iowait字段(I/O等待时间占比):

  • %user:用户空间CPU占用率;
  • %nice:优先级调整后的用户进程CPU占用率;
  • %system:内核空间CPU占用率;
  • %iowait:CPU等待磁盘I/O完成的时间占比(核心I/O关联指标,持续高于5%说明磁盘I/O存在瓶颈);
  • %steal:虚拟机被宿主机抢占的CPU占比;
  • %idle:CPU空闲率。

磁盘I/O统计区(Device)

每一行对应一个磁盘设备(如vda、vdb),默认以KiB为单位,字段含义如下:

  • Device:磁盘设备名称(虚拟机常用vda/vdb,物理机常用sda/sdb);
  • tps:每秒向磁盘设备发起的I/O请求数(Transactions Per Second),包含读写请求,反映设备繁忙程度;
  • kB_read/s:每秒从磁盘读取的数据量(KiB);
  • kB_wrtn/s:每秒向磁盘写入的数据量(KiB);
  • kB_read:系统启动以来从磁盘读取的总数据量(KiB);
  • kB_wrtn:系统启动以来向磁盘写入的总数据量(KiB)。

2.2 扩展I/O输出(iostat -dxtm 2 3)

执行iostat -dxtm 2 3(仅显示磁盘、扩展信息、MiB单位、每2秒刷新一次、共3次),输出更详细的I/O性能指标,是排查I/O瓶颈的核心命令:

Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)         01/27/2026         _x86_64_        (4 CPU)

02:30:00 PM
Device:         rrqm/s   w    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
vda              0.00      0.02    0.10    0.75     0.01     0.00     30.50     0.00    2.10    1.80    2.15   0.30   0.02
vdb              0.00      0.00    0.00    0.05     0.00     0.00     8.00      0.00    0.50    0.00    0.50   0.20   0.00rqm/s     r/s     w/s

新增扩展字段解读(核心指标重点标注):

  • rrqm/s:每秒合并的读请求数(内核将多个连续读请求合并,减少磁盘寻道时间,值越高越好);
  • wrqm/s:每秒合并的写请求数(同理,值越高说明写请求合并效果越好);
  • r/s:每秒实际处理的读请求数(区别于rrqm/s,为合并后的最终读请求数);
  • w/s:每秒实际处理的写请求数(同理,为合并后的最终写请求数);
  • rMB/s:每秒读取的数据量(MiB,比kB_read/s更直观);
  • wMB/s:每秒写入的数据量(MiB);
  • avgrq-sz:平均每个I/O请求的大小(扇区数,换算为字节需×512),值越大说明I/O请求越集中(如大文件读写),值越小说明请求越零散(如小文件随机读写);
  • avgqu-sz:平均等待处理的I/O请求队列长度(核心指标,持续大于1说明请求排队严重,磁盘处理能力不足);
  • await:平均每个I/O请求的总等待时间(毫秒),包含队列等待时间和设备处理时间(正常情况下应小于20ms,持续高于50ms说明I/O压力大);
  • r_await:平均每个读请求的等待时间(毫秒);
  • w_await:平均每个写请求的等待时间(毫秒);
  • svctm:平均每个I/O请求的设备处理时间(毫秒,反映磁盘硬件的实际处理速度,受磁盘转速、接口类型影响);
  • %util:磁盘设备繁忙率(核心指标,百分比,反映磁盘在单位时间内的忙碌程度,持续高于80%说明磁盘已接近满负荷,存在I/O瓶颈)。

三、iostat命令常用场景示例

3.1 日常快速排查磁盘I/O状态(推荐)

iostat -dxtm 1 5  # 每1秒刷新一次,共5次,显示扩展I/O信息,MiB单位
# 重点观察%util(繁忙率)、await(等待时间)、avgqu-sz(队列长度),快速定位是否存在I/O瓶颈

3.2 监控指定磁盘设备的I/O性能

iostat -dxtm -p vda 2  # 仅监控vda磁盘及其分区,每2秒刷新一次
# 适合聚焦特定磁盘(如存储数据的vdb)进行针对性监控

3.3 记录I/O性能日志(带时间戳)

iostat -dxtm -t 5 10 -o io_log.txt  # 每5秒刷新一次,共10次,带时间戳,结果写入io_log.txt
# 便于后续分析I/O性能变化趋势,或排查历史I/O异常问题

3.4 仅查看CPU与I/O的关联统计

iostat -tm 2  # 显示CPU和磁盘I/O统计,MiB单位,每2秒刷新一次
# 重点关注%iowait与磁盘%util的关联,判断CPU空闲是否因I/O等待导致

四、关键误区与注意事项

  1. 误区:tps高即代表I/O瓶颈 tps仅反映请求次数,需结合avgrq-sz判断:若tps高但avgrq-sz小(零散小请求),可能导致%util升高;若tps中等但avgrq-sz大(大文件读写),%util可能较低,未必是瓶颈。核心需结合%util、await综合判断。
  2. %util与实际磁盘性能的关系 传统机械硬盘的%util持续高于80%可判定为瓶颈;固态硬盘(SSD)因支持并行I/O,%util接近100%时仍可能有较好性能,需结合await(等待时间)和业务响应速度综合评估,而非单一依赖%util。
  3. 区分“请求合并”与“请求零散” rrqm/s、wrqm/s值越高,说明内核合并请求效果越好,磁盘寻道时间减少,I/O效率越高;若这两个值极低且r/s、w/s很高,说明请求零散(如大量小文件读写),易导致磁盘繁忙。
  4. 实时监控需排除首屏平均数据 iostat首屏输出的是系统启动以来的平均统计数据,参考价值有限,实时监控时建议忽略首屏,重点关注后续刷新的即时数据(如iostat 2 5的第2-5屏数据)。
  5. 与其他命令配合排查瓶颈 iostat仅显示磁盘I/O整体状态,若需定位具体进程,需结合iotop(进程级I/O监控)、pidstat -d(进程I/O统计)等命令,找到占用I/O资源最高的进程。
  6. 注意设备名称对应关系 部分系统中磁盘设备名可能与分区对应(如vda1是vda的分区),使用-p选项可清晰区分设备与分区,避免误判。

五、补充说明

iostat是I/O性能监控的基础工具,适合快速定位整体磁盘瓶颈;若需更深入的分析(如I/O请求类型、文件系统层面的I/O),可结合blktrace(磁盘I/O跟踪)、df -i(inode使用情况)等命令。此外,对于虚拟化环境(如KVM、Docker),iostat显示的是宿主机层面的磁盘I/O,若需监控容器内部的I/O,需结合容器化工具(如docker stats)或在容器内安装sysstat工具。

posted @ 2026-01-26 17:03  向闲而过  阅读(2)  评论(0)    收藏  举报