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

浙公网安备 33010602011771号