1、问题描述: 发现CGI程序的磁盘IO突然出现峰值上升;
2、判断: 程序突然出现大量的core dump或者某业务异常出发大量的IO写操作;
3、分析方法:
a).使用top按照CPU排序发现CPU使用率很高的进程,一般IO使用率高的进程CPU的消耗也会大幅增加,通过CPU使用率基本能够定位到问题进程;
b).通过iostat查看哪个分区有大量的写磁盘操作;
c).通过block_dump参数查找占用IO最多的进程:
/etc/init.d/sysylog stop 关闭syslog
echo 1 > /proc/sys/vm/block_dump, 等待几秒钟后,内核会将IO信息输出到IO日志中;
dmsg | egrep "READ|WRITE|dirtied" | awk '{print $2}' | sort | uniq -c | sort -rn | head 查找单位时间IO操作最高的进程的PID;
分析完成后关闭block_dump; echo 0 > /etc/init.d/vm/block_dump; /etc/init.d/syslog start
4、查看进程读写的文件信息; 通过 /proc/$PID/fd 下的文件描述符来查看, 同时还可以通过这个方式查看服务器是否存在内存泄漏;
5、通过上述方法基本能够确认是由于哪个进程写哪个文件造成的磁盘IO消耗过高;