【工作必备知识】Linux磁盘I/O故障排查分析定位 iostat 介绍
大家好,我是秋意零。
前言:今天,介绍Linux磁盘I/O故障排查时,必备命令iostat。该命令是监视系统I/O设备使用负载,它可以实时监视IO设备,从而帮助我们进行分析定位问题。
iostat 命令介绍
iostat 命令:监视系统I/O设备使用负载
语法:iostat [选项] [时间间隔 interval] [次数 count]
常用参数:
-c
:显示CPU使用情况-y
:跳过不显示第一次报告的数据-d
:显示磁盘使用情况-k
:以KB为单位显示磁盘读写数据量-m
:以MB为单位显示磁盘读写数据量-N
:显示磁盘阵列(LVM)信息-n
:显示NFS使用情况-p [磁盘]
:显示指定磁盘或所有磁盘和分区的统计信息-t
:显示终端和CPU的信息-x
:显示详细信息,包括额外的设备和CPU统计-V
:显示版本信息
命令解析
1)iostat 默认输出
第一行:Linux 5.10.134-16.1.al8.x86_64 (blog) 06/10/2024 _x86_64_ (2 CPU)
参数 | 解释 |
---|---|
Linux 5.10.134-16.1.al8.x86_64 (blog) | 操作系统内核版本、主机名(blog) |
06/10/2024 | 统计日期(2024年6月10日) |
x86_64 | 系统是64位 |
(2 CPU) | 2个CPU核心 |
第二行,CPU的平均使用率(avg-cpu):avg-cpu: %user %nice %system %iowait %steal %idle
参数 | 解释 |
---|---|
%user | 用户态CPU时间占比,表示用户进程消耗的CPU时间百分比,< 60% |
%nice | 以低优先级(nice)运行的用户进程占用的CPU时间百分比 |
%system | 内核态CPU时间占比,即操作系统内核自身消耗的CPU时间百分比,sy+us < 80% |
%iowait(重要) | I/O等待,表示CPU在空闲时因等待I/O操作完成所花费的时间百分比,< 30% |
%steal | 在虚拟化环境中,被hypervisor强制其他VM占用的CPU时间百分比 |
%idle | CPU空闲时间百分比 |
一般来说
%idle
持续游走在 20%以下,瓶颈出现在CPU的性能层面,%iowait
高而%idle
在 70%以上,瓶颈出现在 I/O 设备层面
第三行,磁盘设备的I/O统计信息(Device):Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
参数 | 解释 |
---|---|
Device | 设备名dm 是 disk mapper 的缩写 可以在 /dev/mapper下查对应谁。参数-N 可以将 dm 转换成相应的 LVM名 |
tps | 每秒传输次数(Transactions Per Second),表示每秒磁盘完成的I/O操作数量 |
kB_read/s | 每秒从磁盘读取的数据量(以KB为单位),参数-m 可以以MB为单位 |
kB_wrtn/s | 每秒向磁盘写入的数据量(以KB为单位) |
kB_read | 总共从磁盘读取的数据量(以KB为单位) |
kB_wrtn | 总共向磁盘写入的数据量(以KB为单位) |
2)iostat 详细参数输出: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%也不意味着设备饱和了。
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毫秒可能需要关注
End
参考:
Linux I/O问题排查 哪个设备的问题 iostat命令详解_哔哩哔哩_bilibili
运维工程师系列-掌握iostat命令给你月薪加1000_哔哩哔哩_bilibili