java 查看耗 CPU 的线程信息
java 查看耗 CPU 的线程
1. 查找应用 Pid
这个比较简单,如果需要查找具体的问题,一般是已经知道了应用是哪个。可以通过 jps
或者 ps
命令都可以很方便的得到应用的 pid。
2. 查找耗 CPU 的线程id
通过操作系统命令查找:
ps -mp pid -o THREAD,tid,time # 命令查看该进程的线程情况
-m 作为 threads 选项,表示在处理器之后显示线程
-p 作为 list 选项,表示指定特定的 pid
-o 是显示选项,按照用户指定的格式来展示数据。
其他选项可以通过 ps --help all 来查看帮助
查出来的结果里 tid 是 10进制的线程id信息,对应线程栈里 nid 的值,而线程栈里是展示的 十六进制,所以查找是需要转换下。
3. 获取对应线程的线程栈
jstack 1 | grep 416b -A 30
这里就查询到了耗 CPU 多的线程,以及知道了线程栈。
当然,因为线程栈打印的是执行时间点的信息,所以,最好是在任务执行的时候多次这么操作,然后就可以知道对应线程执行的代码在哪块,然后分析是不是有优化的空间。