如何快速排查机器负载过高的问题
问题
机器突然莫名其妙的很慢,负载很高,这时候需要如何排查问题出现在哪
步骤
1、首先使用 top ,查看整体的机器情况
2、从上一步可以看出cpu占用高,用户态和内核态都很高,负载也高,初步判断是否有脚本在跑,吃cpu资源,但是图中的在跑着的程序,%cpu这一项都不是很高,所以有点蹊跷
然后查看机器的读写情况,看看是不是由很多读写操作
3、使用sar -d 1 10 查看磁盘读写情况,发现wr_sec 和 rd_sec都是0,说明没啥太大的读写程序在跑
4、那接下来是查看网络情况,看看会不会是网络请求多的问题,下图可以看出,确实有大流量进来,估计是有外部调用
5、然后我们用ps查看下是哪些在跑着的程序占用cpu资源高
ps aux | head -n 1;ps aux| awk '{if($8 == "R") print $0}'|sort -k3 | head -n 10
意思是:正在运行的程序,cpu占用排行靠前的10条信息
上图可以看出,有很多stress这个命令在跑着,这个是压测用的,很奇怪,继续追踪,找出调用这个命令的父程序
ps -ef | grep /usr/local/bin/stress| awk '{print $3}'| xargs ps -f| head -n 10
ps -ef 的第三列就是父程序的pid,然后传给 ps -f去查是什么
上图看出,是php代码在调用,又或者可以用 pstree | grep stress
6、然后我们就去搜索我们的代码项目,看看哪个文件有用到stress这个命令的
总结
排查顺序基本是
1、机器的基本情况,top命令
2、机器的io读写和网络情况,sar
3、查看具体是哪个进程有占用资源高的问题,ps
基本上面几步走完,就能定位到问题的所在,至少知道是哪个进程在搞鬼,接下来就是具体去看这个进程的逻辑即可