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 多的线程,以及知道了线程栈。

当然,因为线程栈打印的是执行时间点的信息,所以,最好是在任务执行的时候多次这么操作,然后就可以知道对应线程执行的代码在哪块,然后分析是不是有优化的空间。

4. ref

问题排查

posted @ 2021-08-31 16:49  爬行  阅读(646)  评论(0编辑  收藏  举报