一、iostat 命令描述
“iostat”命令用于监测系统输入/输出设备的负载情况,其通过观察设备处于活跃状态的时间与平均传输速率之间的关系来实现这一目的。该命令会生成报告,这些报告可用于调整系统配置,以更好地平衡物理磁盘之间的输入/输出负载。
iostat 命令生成的第一份报告会提供有关系统自启动以来的时间的统计信息(除非使用了 -y 选项)。在这种情况下,第一份报告将被省略。每次后续报告都会涵盖自上一次报告以来的时间。每次运行 iostat 命令时,都会报告所有统计信息。报告包括一个 CPU 标题行,随后是一行 CPU 统计信息。在多处理器系统中,CPU 统计信息是按系统范围计算的,即所有处理器的平均值。会显示一个设备标题行,随后是每个配置设备的一行统计信息。
“间隔参数”指定了每次报告之间的时间间隔(以秒为单位)。而“计数参数”则可以与“间隔参数”一同设定。如果指定了“计数参数”,其值将决定在每隔“间隔时间”秒内生成的报告数量。如果
如果未指定计数参数,则间隔参数一经设定,iostat 命令就会持续生成报告。
安装: yum -y install sysstat
二、iostat 常用参数介绍
参数 | 作用与说明 | 典型用法示例 |
---|---|---|
-c | 仅显示 CPU 统计(%user %nice %system %iowait %idle) | iostat -c 1 3 |
-d | 仅显示磁盘/设备统计 | iostat -d 1 |
-x | 扩展模式:额外给出 await svctm %util avgqu-sz 等关键指标,定位 I/O 瓶颈必用 |
iostat -x 1 |
-k/-m | 以 KiB/s 或 MiB/s 为单位显示吞吐量(默认是 block/s) | iostat -dk 1 |
-p | 指定某个设备或分区,避免被无关设备刷屏 | iostat -p sda 1 |
-t | 输出时间戳,方便做日志或趋势对比 | iostat -xt 1 10 > io.log |
-y | 跳过第一次采样(避免系统启动平均值干扰) | iostat -xy 1 |
-z | 隐藏无活动的设备,输出更干净 | iostat -dz 1 |
三、实例:
实例1. 输出所有设置负载情况
如下可以看出我只有一块设置
nvme0n1
# iostat
Linux 4.18.0-348.7.1.el8_5.x86_64 (localhost.localdomain) 08/04/2025 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.45 0.00 1.36 2.74 0.00 95.44
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
nvme0n1 676.62 11660.61 11867.46 159227855 162052488
scd0 0.00 0.08 0.00 1041 0
cpu属性值说明:
- %user:正常优先级用户进程占 CPU 的时间
- %nice:被 nice 降过优先级的用户进程占 CPU 的时间
- %system:内核态(系统调用、中断等)占 CPU 的时间
- %iowait:CPU 空闲但等待 I/O 完成的时间
- %steal:被虚拟机 Hypervisor 或其他 VM 偷走的 CPU 时间
- %idle:CPU 真正空闲、无任务可运行的时间
disk属性值说明:
- tps:每秒传输(I/O)次数
- kB_read/s:每秒从设备读数据量
- kB_wrtn/s:每秒向设备写数据量
- kB_read:启动至今累计读量
- kB_wrtn:启动至今累计写量
实例2. 定时显示所有信息
每隔两秒显示,总共显示3次
# iostat 2 3
Linux 4.18.0-348.7.1.el8_5.x86_64 (localhost.localdomain) 08/04/2025 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.44 0.00 1.32 2.65 0.00 95.59
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
nvme0n1 654.28 11275.47 11475.50 159227963 162052618
scd0 0.00 0.07 0.00 1041 0
avg-cpu: %user %nice %system %iowait %steal %idle
0.06 0.00 0.31 0.00 0.00 99.62
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
nvme0n1 0.00 0.00 0.00 0 0
scd0 0.00 0.00 0.00 0 0
avg-cpu: %user %nice %system %iowait %steal %idle
0.06 0.00 0.25 0.00 0.00 99.69
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
nvme0n1 0.00 0.00 0.00 0 0
scd0 0.00 0.00 0.00 0 0
实例3. 查看TPS和吞吐量
查看
nvme0n1
磁盘的吞吐量信息,第一次tps显示644.79
是系统启动以来(或工具启动以来)的累计统计”,从第二次开始才是“每 1 秒的实时增量”。
# iostat -d nvme0n1 -m 1 3
Linux 4.18.0-348.7.1.el8_5.x86_64 (localhost.localdomain) 08/04/2025 _x86_64_ (8 CPU)
Device tps MB_read/s MB_wrtn/s MB_read MB_wrtn
nvme0n1 644.79 10.85 11.04 155496 158254
Device tps MB_read/s MB_wrtn/s MB_read MB_wrtn
nvme0n1 0.00 0.00 0.00 0 0
Device tps MB_read/s MB_wrtn/s MB_read MB_wrtn
nvme0n1 0.00 0.00 0.00 0 0
实例4. 查看设备使用率(%util)和响应时间(await)
# iostat -d nvme0n1 -x -k 1 1
Linux 4.18.0-348.7.1.el8_5.x86_64 (localhost.localdomain) 08/04/2025 _x86_64_ (8 CPU)
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
nvme0n1 293.84 341.03 10940.83 11135.15 0.00 0.21 0.00 0.06 3.06 4.47 2.42 37.23 32.65 0.09 5.59
- r/s:每秒读请求个数(读 IOPS)
- w/s:每秒写请求个数(写 IOPS)
- rMB/s:每秒读取的数据量(读吞吐量)
- wMB/s:每秒写入的数据量(写吞吐量)
- rrqm/s:每秒合并的读请求(合并后减少实际磁盘读)
- wrqm/s:每秒合并的写请求(合并后减少实际磁盘写)
- %rrqm:读请求合并比例(越高越省磁盘)
- %wrqm:写请求合并比例(越高越省磁盘)
- r_await:读请求平均响应时间(从提交到完成,单位毫秒)
- w_await:写请求平均响应时间(从提交到完成,单位毫秒)
- aqu-sz:平均队列长度
- rareq-sz:(等待 + 正在服务的 I/O 数)
- wareq-sz:平均读请求大小(KB/请求)
- svctm:平均写请求大小(KB/请求)
- %util:设备繁忙度(100% 表示磁盘饱和)