文章目录
- 1、iotop
- 2、iostat
- 3、磁盘压力测试
问题描述:在日常运维工作中,经常会遇到Linux服务器出现Disk磁盘I/O( I/O 英文全称是 Input/Output,中文译为 输入与输出,通常指存储器与其他设备之间的数据交换操作)过大告警问题需要紧急处理,本文将详细介绍此问题的排查方法与技巧。
1、iotop
iotop
是一个用来监视磁盘I/O使用状况的top类工具。iotop具有与top相似的UI回显,其中包括PID、用户、I/O、进程等相关信息。
# 只显示IO操作进程,查看哪些进程正在使用磁盘进度读写操作,以进程维度分析最高IO原因
$ iotop -ob
2、iostat
iostat
功能是用于监视系统I/O设备使用情况。
$ iostat -xm 1
- CPU属性 avg-cpu
%user
:CPU处在用户模式下的时间百分比%nice
:CPU处在带NICE值的用户模式下的时间百分比%system
:CPU处在系统模式下的时间百分比%iowait
:CPU等待输入输出完成时间的百分比%steal
:管理程序维护另一个虚拟处理器时,虚拟CPU的无意识等待时间百分比%idle
:表示磁盘在1秒内空闲的时间占总时间的百分比。也就是说,数值越高,表示磁盘的空闲时间越多,负载越轻,性能越好;数值越低,表示磁盘的空闲时间越少,负载越重,性能越差;%idle
是评估磁盘负载和性能的重要指标之一
- 磁盘属性:
Device
:磁盘设备名称rrqm/s
:每秒合并的读请求次数wrqm/s
:每秒合并的写请求次数r/s
:每秒完成的读次数w/s
:每秒完成的写次数rkB/s
:每秒读取的数据量(单位为KB)wkB/s
:每秒写入的数据量(单位为KB)avgrq-sz
:平均每个请求的扇区数。avgqu-sz
:平均请求队列长度await
:平均每个请求的等待时间(毫秒)r_await
:平均每个读请求的等待时间(毫秒)w_await
:平均每个写请求的等待时间(毫秒)svctm
:平均每个请求的服务时间(毫秒)%util
:磁盘利用率,磁盘在1秒钟内的忙碌时间占总时间的百分比,该值只代表持续写入的时间在1s内的占比,并不能体现出磁盘写入的大小,数值越高,表示磁盘的写入时间越高;数值越低,表示磁盘的空闲时间越多
注意点:目前市面上较多的告警规则都使用iostat命令的%util
利用率取值,该值的磁盘IO信息反馈并不准确,不能体现出磁盘的写入速率大小,只反应出写入时间占比。例如:某个磁盘/dev/sda1在1s内持续写入1b/s,此时%util
数值为100%,必然触发告警,但现网中并没有高额的数据写入,因此只能判断为误报。若需要继续判断磁盘是否存在异常需要进行压力测试,使用下面方法即可。
3、磁盘压力测试
# 测试写入1G文件速度
$ dd if=/dev/zero of=${dst_file_path}/test bs=1M count=1000 oflag=direct
# 在目标文件目录下创建一个名为test的文件(可根据现场环境自行修改目标路径),总计大小为1000MB,即1GB(块大小设置为1M,数量为1000)
最终确认磁盘写入速率正常,此告警忽略即可。
耗时:7.70452 s
, 写入速度:136 MB/s
。