1 top 打开以后使用交互命令 P 获取占用cpu 最高的进程。
2.1 使用 top -H -p <pid> 查看这个进程的执行线程
在使用P 交互命令 可以看到是哪个线程 占用cpu 过高,获取到线程ID。
2.2 使用 ps -T -p <pid>查看线程信息
“SID”栏表示线程ID,而“CMD”栏则显示了线程名称。
2.3 使用 ps -Lf <pid> 查看线程信息
UID PID PPID LWP C NLWP STIME TTY STAT TIME CMD
work 4551 22670 4551 2 7 16:30 pts/2 Sl+ 0:02 ./ad_preprocess
work 4551 22670 4552 0 7 16:30 pts/2 Sl+ 0:00 ./ad_preprocess
work 4551 22670 4553 0 7 16:30 pts/2 Sl+ 0:00 ./ad_preprocess
work 4551 22670 4554 0 7 16:30 pts/2 Sl+ 0:00 ./ad_preprocess
work 4551 22670 4555 0 7 16:30 pts/2 Sl+ 0:00 ./ad_preprocess
work 4551 22670 4556 0 7 16:30 pts/2 Sl+ 0:00 ./ad_preprocess
work 4551 22670 4557 0 7 16:30 pts/2 Sl+ 0:00 ./ad_preprocess
2.4 java进程查看线程信息:
1)top -H -p <pid> 查询出的高cpu threadid
2)jstack <pid> >>a.txt导出线程栈
3) echo “obase=16; <TID>” | bc 将线程ID转换为16进制,大写转换为小写,TID 就是线程ID
4)在a.txt结果里 搜索 步骤三中生成的16进制线程ID ,查看对应线程信息
2.5 java 进程查看线程信息
1)获取线程信息,并找到占用CPU高的线程
ps -mp pid -o THREAD,tid,time | sort -rn
2)将需要的线程ID转换为16进制格式
printf "%x\n" tid
3)打印线程的堆栈信息
jstack pid |grep tid -A 30
如何阅读栈文件?https://blog.csdn.net/xiaoliuliu2050/article/details/102742345