在解决IO问题的时候,主要搞清楚三个问题:
- 问题是否真的出现在IO
- 哪个进程在大量使用IO
- 这个进程访问了哪些文件
通常我们在弄清楚第二个问题的时候,就已经知道IO是什么问题引起的了。
如果还不能,就继续弄清楚第三个问题,当我们知道进程访问了哪些文件后,就能反推程序中哪些地方使用了。
问题是否真的出现在IO
这个问题比较好确定,常见的iostat就能打印出IO相关的信息:
这个命令分三行,首行的系统信息被我忽略掉了。
第二行“avg-cpu”,是总体CPU使用情况统计信息。
我们主要关注%iowait,观察CPU用于等待I/O操作占用CPU总时间的百分比。这个数值比较高的时候,说明系统IO存在瓶颈。
哪个进程在大量使用IO
既然确定了有IO瓶颈,我们就继续往下找出大量使用IO的进程/线程是哪个。
在这里我们会使用到iotop
命令,这个命令很多机器上可能没有安装,可以执行yum先安装:
yum install iotop
这个命令的参数不多,我们通过-help看一下: