linux下iostat使用说明和IO占用高的进程排查

iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况,同时也会汇报出 CPU使用情况

iostat的语法如下

iostat [ 选项 ] [ <时间间隔> [ <次数> ]]
-c:只显示系统CPU统计信息,即单独输出avg-cpu结果,不包括device结果
-d:单独输出Device结果,不包括cpu结果
-k/-m:输出结果以kB/mB为单位,而不是以扇区数为单位
-x:输出更详细的io设备统计信息
interval/count:每次输出间隔时间,count表示输出次数,不带count表示循环输出

iostat命令如果不存在,那么需要我们先进行安装

yum install sysstat

我们使用命令来查看下iostat所列出的字段

iostat -x 5

微信截图_20220817211411.png

rrqm/s:          每秒进行 merge 的读操作数目。即 delta(rmerge)/s
wrqm/s:         每秒进行 merge 的写操作数目。即 delta(wmerge)/s
r/s:            每秒完成的读 I/O 设备次数。即 delta(rio)/s
w/s:            每秒完成的写 I/O 设备次数。即 delta(wio)/s
rsec/s:         每秒读扇区数。即 delta(rsect)/s
wsec/s:         每秒写扇区数。即 delta(wsect)/s
rkB/s:          每秒读K字节数。是 rsect/s 的一半,因为每扇区大小为512字节。(需要计算)
wkB/s:          每秒写K字节数。是 wsect/s 的一半。(需要计算)
avgrq-sz:       平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)
avgqu-sz:       平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await:          平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm:          平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util:          一秒中有百分之多少的时间用于 I/O 操作,或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)

如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈

如果%util侧占用一致100%,我们可以使用iotop命令进行查看占用IO高的进程,我们需要安装iotop命令

yum install iotop

然后使用该命令进行IO占用的查看

iotop -oP

微信截图_20240530151411.png

通过这个命令可以看见比较详细信息,如:进程号,磁盘读取量,磁盘写入量,IO百分比。

也可以使用pidstat命令进行查看IO占用高的进程,用法和iostat基本差不多

pidstat -d 1 3

微信截图_20240530151647.png

上述pidstat和iotop命令均可以查看到进程PID,然后通过PID可以进行详细定位进程。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/873.html