java如何分析cpu使用率很高的线程

当我们发现一个java进程cpu使用率很高的时候,怎么去分析具体是哪个线程的问题呢,阅读本文

操作流程

  1. 查看cpu使用率高的进程
    通过linux命令top,如下图,进程id是129741占用的cpu最高,那么就以此为例做分析
    top截图

  2. 查看该进程使用率高的线程
    获取熬进程id后,接下来就是查看这个进程中使用cpu最多的线程,通过linux命令top -Hp 129741,列出该进程下所有的线程,如下图,可以看到使用cpu最高的线程是130212。
    top截图

  3. 查看该线程的栈
    我们知道java提供了jstack来获取jvm的当前线程栈使用情况,其中也列出了每个线程的id,只是jvm是以16进制展示的,这里我们需要将130207转换成16进制1fc9f。再通过jstack命令查看该线程的线程栈。
    jstack 129741 | grep 1fca4 -C 50

总结

结合linux对进程的cpu使用分析以及jstack对线程栈的分析,可以快速定位到某个占用cpu很大的线程

ulysses wechat
订阅+