CentOS 7.2中磁盘iowait过高解决(4)

(4)通过lsof -p pid查找由那个文件引起的IOwait
[root@iZ23iod5vslZ ~]# lsof -p 18987
COMMAND    PID USER  FD  TYPE DEVICE  SIZE/OFF    NODE NAME
cronolog 18987 root  cwd    DIR 202,17      20480  2400258 /guojinbao/tomcat/logs
cronolog 18987 root  rtd    DIR  202,1      4096        2 /
cronolog 18987 root  txt    REG  202,1      48627  152798 /usr/local/sbin/cronolog
cronolog 18987 root  mem    REG  202,1    2107600  132826 /usr/lib64/libc-2.17.so
cronolog 18987 root  mem    REG  202,1    160240  132819 /usr/lib64/ld-2.17.so
cronolog 18987 root    0r  FIFO    0,8        0t0 42614018 pipe
cronolog 18987 root    1w  CHR    1,3        0t0    1028 /dev/null
cronolog 18987 root    2u  CHR  136,0        0t0        3 /dev/pts/0 (deleted)
cronolog 18987 root    3w  REG 202,17 5704875979  2400280 /guojinbao/tomcat/logs/catalina.2017-08-14.out

lsof 命令可以展示一个进程打开的所有文件,或者打开一个文件的所有进程。从这个列表中,我们可以找到具体是什么文件被写入,根据文件的大小和/proc中io文件的具体数据.
    为了确认我们的怀疑,我们可以使用 /proc文件系统,每个进程目录下都有一个叫io的文件,里边保存这和iotop类似的信息
[root@iZ23iod5vslZ ~]# cat /proc/18987/io 
rchar: 58891582418
wchar: 58891579778
syscr: 46556085
syscw: 46556077
read_bytes: 212992
write_bytes: 59580235776
cancelled_write_bytes: 0

read_bytes和write_bytes是这个进程从磁盘读写的字节数。这个例子中cronolog读取了212992byte(0.2M)数据,写入了59580235776bytes(55.4G)数据到磁盘上。

(5)通过df -h /guojinbao来查看服务器那块磁盘的根目录
[root@iZ23iod5vslZ ~]# df -h /guojinbao/
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvdb1      45G  38G  4.7G  89% /guojinbao

最后,通过以上的信息我们可以放心的说lsof的结果就是我们要查找的文件

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

转载注明出处:https://www.heiqu.com/13597.html