寻找CPU使用率高的进程方法
问题描述
节点报CPU使用率高,甚至出现“ALM-12016 CPU使用率超过阈值”告警,需要定位是什么进程占用CPU使用率高。
处理过程
对于持续cpu过高的处理:
1.在对应节点使用 “top”命令,然后键盘输入“C”,即按照CPU使用率排序进程。
2.执行 ps -ef | grep <CPU使用率高的PID>
确认该进程的详细信息,确认该进程的日志。查看该组件日志,占用CPU高是否正常。
对于偶发性的cpu过高的处理:
1.在操作系统日志“/var/log/osinfo/statistics/ps.txt”会记录每2分钟执行一次ps命令的结果。
但是该信息只记录了进程的基本信息
2.使用如下命令,可以打印出CPU占用率最高的十个进程的信息
ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
3.在对应节点创建如下shell文件checkcpu.sh
#!/usr/bin/env bash
logFile=/var/log/Bigdata/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
4.后台执行脚本
在节点在后台执行如下shell文件
chmd 700 /opt/checkcpu.sh
nohup /opt/checkcpu.sh > /dev/null 2>/dev/null &
5. 查看日志
查看/var/log/Bigdata/checkCpuUsage.log 日志中,是否有打印CPU使用量高的进程的详细信息。
6. 停止进程
在节点执行“ps -ef | grep checkcpu.sh | grep -v grep” 找到该进程的pid,kill 即可。