如何快速排查机器负载过高的问题

问题

机器突然莫名其妙的很慢,负载很高,这时候需要如何排查问题出现在哪

步骤

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

基本上面几步走完,就能定位到问题的所在,至少知道是哪个进程在搞鬼,接下来就是具体去看这个进程的逻辑即可