以下shell脚本为定位java进程中占用CPU的线程信息
#!/bin/bash
# 找出java中高cpu的线程信息
# author zhouzx
PID=`ps aux | sort -k3nr | grep "java" | head -1 | awk '{print $2}'`
echo "高CPU的线程ID:$PID"
ps -ef | grep $PID | grep -v "grep"
ps -mp $PID -o THREAD,tid,time | sort -k 2 -r | head -20
echo -n -e "输入线程ID:"
read f
if [ -z $f ];then
echo "请出入线程ID!"
else
echo "CPU占用的线程ID:$f"
jstack "$PID" | grep `printf "%x\n" $f` -C 30
fi
最近通过以上脚本定位到工作项目中使用了log4j1.x的日志输出,导致占用了高CPU。详细请看
优化
- 后期的日志记录使用logback或者log4j2
- 不必要的日志不记录