【发布时间】:2020-10-07 07:06:47
【问题描述】:
当 Java 应用程序挂起时,您甚至不知道导致此问题的用例并想要调查,我知道线程转储可能很有用。
但是我们如何才能轻松地从线程转储中获取有用的数据以找出问题所在呢?我一直在使用的服务器应用程序会产生非常长的线程转储,因为它是一个 EJB 架构,并且线程转储包含许多我不确定是否应该查看的容器线程(即没有运行我的应用程序代码的线程,而是 JBoss 的代码)。
昨天我尝试了Thread Dump Analyzer 工具。该工具绝对比在文本编辑器中查看原始线程转储要好,因为您可以过滤掉您不感兴趣的线程,查看线程列表,单击线程以查看其详细信息,比较线程转储以查找长时间运行的线程等。
但仍有太多数据需要分析 - 将近 300 个线程。我不知道有什么标准可以用来过滤掉我不感兴趣的所有 JBoss 线程。我不确定我是否应该只查看当前处于“可运行”状态的线程,或者“等待条件”和“在 Object.wait 中”是否也很重要。
您通常会采用哪些方法以及您通常会使用哪些工具?
【问题讨论】:
-
我写了这个,它分析线程转储,无需安装:spotify.github.io/threaddump-analyzer
-
@JohanWalles 好工具!
标签: java debugging deadlock thread-dump