寻找CPU使用率高进程方法
背景
节点报CPU使用率高,需要定位是什么进程占用CPU使用率高。
CPU使用率持续较高
在对应节点使用 “
top
”命令,然后键盘输入“P”,即按照CPU使用率排序进程。
执行
ps -ef | grep <CPU使用率高的PID>
。
确认该进程的详细信息,确认该进程的日志。查看该组件日志,占用CPU高是否正常。
使用如下命令,可以打印出CPU占用率最高的十个进程的信息。
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
CPU使用率偶现较高
使用如下命令,可以打印出CPU占用率最高的十个进程的信息。
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
在对应节点创建如下shell文件。checkcpu.sh ,其中logFile,是日志打印文件,delayTime 是每次执行的间隔,单位秒。
#!/usr/bin/env bash logFile=/tmp/checkCpuUsage.log delayTime=30 # seconds between each excute, default value is 30 seconds while( true ) do echo `date` >> $logFile echo "USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND " >> $logFile ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head >> $logFile sleep $delayTime echo " " >> $logFile done
后台执行脚本。在节点在后台执行如下shell文件:
chmod 700 /opt/checkcpu.sh
nohup /opt/checkcpu.sh > /dev/null 2>/dev/null &
查看日志。查看“/tmp/checkCpuUsage.log”日志中,是否有打印CPU使用量高的进程的详细信息。如果查询出的是java进程,常见因为内存配置过小导致频繁垃圾回收,引起CPU使用率高
停止检查脚本进程。
在节点执行ps -ef | grep checkcpu.sh | grep -v grep
,找到该进程的pid,kill 即可。