欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

Linux 查看磁盘IO并找出占用IO读写很高的进程

程序员文章站 2022-05-27 19:03:59
背景-线上告警线上一台服务器告警,磁盘利用率 disk.util > 90,并持续告警。登录该服务器后通过iostat -x 1 10查看了相关磁盘使用信息。相关截图如下: # 如果没有 ios...

背景-线上告警

线上一台服务器告警,磁盘利用率 disk.util > 90,并持续告警。

登录该服务器后通过iostat -x 1 10查看了相关磁盘使用信息。相关截图如下:

 # 如果没有 iostat 命令,那么使用 yum install sysstat 进行安装
# iostat -x 1 10

Linux 查看磁盘IO并找出占用IO读写很高的进程

由上图可知,vdb磁盘的 %util【io】几乎都在100%,原因是频繁的读取数据造成的。

其他字段说明

device:设备名称
tps:每秒的io读、写请求数量,多个逻辑请求可以组合成对设备的单个i/o请求。
blk_read/s (kb_read/s, mb_read/s):从设备读取的数据量,以每秒若干块(千字节、兆字节)表示。块相当于扇区,因此块大小为512字节。
blk_wrtn/s (kb_wrtn/s, mb_wrtn/s):写入设备的数据量,以每秒若干块(千字节、兆字节)表示。块相当于扇区,因此块大小为512字节。
blk_read (kb_read, mb_read):读取块的总数(千字节、兆字节)。
blk_wrtn (kb_wrtn, mb_wrtn):写入块的总数(千字节,兆字节)。

rrqm/s:每秒合并到设备的读请求数。即delta(rmerge)/s
wrqm/s:每秒合并到设备的写入请求数。即delta(wmerge)/s
r/s:每秒完成的读i/o设备次数。即delta(rio)/s
w/s:每秒完成的写i/0设备次数。即delta(wio)/s
rsec/s (rkb/s, rmb/s):每秒读取设备的扇区数(千字节、兆字节)。每扇区大小为512字节
wsec/s (wkb/s, wmb/s):每秒写入设备的扇区数(千字节、兆字节)。每扇区大小为512字节

avgrq-sz:平均每次设备i/o操作的数据量(扇区为单位)。即delta(rsec+wsec)/delta(rio+wio)
avgqu-sz:平均每次发送给设备的i/o队列长度。
await:平均每次io请求等待时间。(包括等待队列时间和处理时间,毫秒为单位)
r_await:平均每次io读请求等待时间。(包括等待队列时间和处理时间,毫秒为单位)
w_await:平均每次io写请求等待时间。(包括等待队列时间和处理时间,毫秒为单位)
svctm:平均每次设备i/o操作的处理时间(毫秒)。警告!不要再相信这个字段值,这个字段将在将来的sysstat版本中删除。
%util:一秒中有百分之多少的时间用于i/o操作,或者说一秒中有多少时间i/o队列是非空的。当该值接近100%时,设备饱和发生。

找到 io 占用高的进程

通过 iotop 命令

如果没有该命令,请通过yum install iotop进行安装。

# iotop -op

Linux 查看磁盘IO并找出占用IO读写很高的进程

通过这个命令可以看见比较详细信息,如:进程号,磁盘读取量,磁盘写入量,io百分比,涉及到的命令是什么「两个都是 grep 命令造成的io读取量大」。

通过 pidstat 命令

# 命令的含义:展示i/o统计,每秒更新一次
# pidstat -d 1

Linux 查看磁盘IO并找出占用IO读写很高的进程

可见其中 grep 命令占用了大量的读io,之后可根据 pid 查看相关进程信息。

说明:本图与上图的pid不同,原因是上图涉及的进程执行完了,本图是之后执行产生的进程【都执行的同一个脚本】。

总结

以上所述是小编给大家介绍的linux 查看磁盘io并找出占用io读写很高的进程,希望对大家有所帮助!