现象:设备按照当前空闲情况是不存在频繁读写磁盘的操作的,但是wa很高又证明在频繁读写
主要判断指标:
%us 过高,则可以在对应服务的线程ID查看具体详情,是否存在死循环,或者长时间的阻塞调用。
%sy 过高,则先使用 strace 定位具体的系统调用,再定位是哪里的应用代码导致的。
%si 过高,则可能是网络问题导致软中断频率飙高。
%wa 过高,则是频繁读写磁盘导致的,可以通过iostat,iotop。
排查:
-
找出具体读写的是哪个磁盘
出现io很高,通过iostat 命令查看io状态信息
iostat只要用于输出CPPU和磁盘IO的相关的统计信息
格式: iostat 选项 时间间隔 次数
-c 单独输出Device的信息不包括CPU信息
-k/m:输出结果以kb或者是mb为单位,而不是以扇区数量为单位
-x:输出更详细的磁盘io的信息
输出结果的重点参数:
iowait%:表示CPU等待的是io时间占用整个cpu周期的百分比。
avgqu-sz表示的是磁盘io的队列长度,即io的等待个数
await:表示的是io请求时间,等待时间和处理时间
svctm:表示的是每次请求的处理的时间
%util表示的是磁盘的忙碌情况,如果>80%就是磁盘可能处于忙碌状态
其中-x
知指明输出更加详细的信息。2 5
表示间隔2秒统计一次总共输出5次。第一行结果是自系统启动以来的统计值,通常排查突发的I/O异常时可忽略。重点看%util
列,表示进程使用I/O的比例
2、找出引起高io的进程
简单的是iotop
命令,比如
|
|
iotop
命令确实是一个很好用的工具,但是很多Linux发行版中默认并没有安装。如果系统里没有这个命令,又不想安装时,怎么办?有没有更简单的方式?
能够实现iotop
类型功能的ps
命令
首先看下进程状态编码
|
|
注意到,如果进程正在等待I/O,进行的状态码经常为D
。通过这个信息,我们可以大概估算出哪些进程在I/O等待中,比如
|
|
这里就发现进行 27456 可能有问题。但等待I/O也不一定说明它在疯狂读写磁盘。为了确定它确实读写很多,可以用/proc
目录下的信息来定位,比如
|
|
3、查看进程频繁读写哪个文件
|
lsof是一个列出当前系统打开文件的工具,在Linux下,任何事物都以文件的形式存在,通过文件不仅可以访问数据,还以访问网络连接和硬件。 |
引用大佬:https://www.cnblogs.com/wyf0518/p/12213790.html
标签:wa,读写,----,排查,io,进程,磁盘,列出 From: https://www.cnblogs.com/Mamie/p/17967195