Linux CMD - iostat定位磁盘IO故障
文章转载自:
1. iostat命令介绍
iostat命令用于监视系统I/O设备使用负载,语法如下:
常用参数:
-
-c:显示CPU使用情况
-
-y:跳过不显示第一次报告的数据
-
-d:显示磁盘使用情况
-
-k:以KB为单位显示磁盘读写数据量
-
-m:以MB为单位显示磁盘读写数据量
-
-N:显示磁盘阵列(LVM)信息
-
-n:显示NFS使用情况
-
-p [磁盘]:显示指定磁盘或所有磁盘和分区的统计信息
-
-t:显示终端和CPU的信息
-
-x:显示详细信息,包括额外的设备和CPU统计
-
-V:显示版本信息
2. 命令解析
2.1 iostat 默认输出
第一行:Linux 5.10.134-16.1.al8.x8664 (blog) 06/10/2024 _x86_64 (2 CPU)
第二行:avg-cpu: %user %nice %system %iowait %steal %idle
Tips: 一般来说 %idle 持续游走在 20%以下,瓶颈出现在CPU的性能层面,%iowait 高而 %idle 在 70%以上,瓶颈出现在 I/O 设备层面
第三行,磁盘设备的I/O统计信息(Device):Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
2.2 iostat 详细参数输出
使用-x
选项可以输出详细信息,例如:
# iostat -x -d -y 1 3
各列解释:
-
r/s: 每秒读取操作次数
-
w/s: 每秒写入操作次数
-
rkB/s: 每秒从设备读取的数据量
-
wkB/s: 每秒向设备写入的数据量
-
rrqm/s: 每秒读请求合并次数,即读操作中有多少请求被合并执行
-
wrqm/s: 每秒写请求合并次数,同理,此处也没有写请求合并,值为0.00
-
%rrqm: 读请求合并的百分比,既然没有读请求合并,所以是0.00%
-
%wrqm: 写请求合并的百分比
-
r_await: 平均每次读操作的等待时间,包括等待时间和实际服务时间
-
w_await: 平均每次写操作的等待时间
-
aqu-sz: 平均I/O队列长度,也就是平均有多少个I/O请求在等待处理
-
rareq-sz: 平均读请求大小
-
wareq-sz: 平均写请求大小
-
svctm: 平均服务时间,即I/O操作实际处理时间
-
%util: 设备利用率
%util 表示该设备有I/0非空闲的时间比率,不考虑I/0有多少。由于硬盘设备有并行处理多个I/0请求的能力,所以%util即使达到100%也不意味着设备饱和了。
Tips: r_await、w_await 多大算有问题?
一般情况下:
对于机械硬盘(HDD),如果r_await和w_await持续高于10-20毫秒,可能表明存在I/O延迟问题(机械硬盘 await=寻道延迟+旋转延迟+传输延迟rpm 10000为8.38ms)
对于固态硬盘(SSD),由于其更快的读写速度,理想的r_await和w_await应该更低,通常认为超过1-5毫秒可能需要关注
[参看]