(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的结果就是我们要查找的文件