目录
1. 输入jps -lm 和 top 找到当前jar的进程pid
1. 输入jps -lm 和 top 找到当前jar的进程pid
当前pid为25589
jps -lm|grep function
2. 查看当前进程的cpu消耗
top -p 25589
3. 获取进程的线程的16进制的Tid
根据CPU占用率选择最高的tid 这里是63f6
printf "cpu\t TID\n"
# 进程为25589
ps -mp 25589 -o THREAD,tid,time |awk '{print $2,$8}' | grep -v "TID" | grep -v "-"| awk '{printf "%d%%\t %x\n", $1, $2}' | sort -rn | head -10
4. 打印线程的堆栈信息
jstack 25589 | grep 63f6 -A60
5. 一键使用脚本exec.sh
# 输入参数为进程Id或者输入 进程Id与线程Tid 示例 sh exec.sh 25589 或者 sh exec.sh 25589 63f6
if [ -z "$2" ]; then
if [ -z "$1" ]; then
echo "请输入排查的进程Pid"
exit
fi
printf "cpu\t TID\n"
ps -mp $1 -o THREAD,tid,time |awk '{print $2,$8}' | grep -v "TID" | grep -v "-"| awk '{printf "%d%%\t %x\n", $1, $2}' | sort -rn | head -10
else
jstack $1 | grep $2 -A60
fi