需要帮助分析Java线程转储吗

需要帮助分析Java线程转储吗,java,threadpool,Java,Threadpool,我正在使用武士工具来分析线程转储。看起来它有许多阻塞的线程。我没有线索从线程转储中得到任何东西 我的Java应用程序中有一个SQL查询,它运行在weblogic上,需要花费大量时间才能完成。在多次单击我的Java应用程序按钮运行此查询后,挂起我的JVM 可以找到线程转储@: 你能帮我理解线程转储说明了什么吗?你提供的数据量有点大,所以让我们给你一个如何继续的提示。为了进行分析,我使用了基于TDA的开源应用程序。解析3个MiB值的数据需要几秒钟,但在中很好地显示了一个文件中22个不同的堆栈跟踪转储

我正在使用武士工具来分析线程转储。看起来它有许多阻塞的线程。我没有线索从线程转储中得到任何东西

我的Java应用程序中有一个SQL查询,它运行在weblogic上,需要花费大量时间才能完成。在多次单击我的Java应用程序按钮运行此查询后,挂起我的JVM

可以找到线程转储@:


你能帮我理解线程转储说明了什么吗?

你提供的数据量有点大,所以让我们给你一个如何继续的提示。为了进行分析,我使用了基于TDA的开源应用程序。解析3个MiB值的数据需要几秒钟,但在中很好地显示了一个文件中22个不同的堆栈跟踪转储:


深入查看会发现一系列令人不安的警告和警报

我没有时间检查所有这些,但这里有一个标记为致命的列表,请记住,误报也是可以预期的:

等待SLSB豆子 描述:正在等待SLSB空闲池中的无状态会话Bean SLSB实例

建议:豆子都在使用中,自由池大小不足

僵局 描述:检测到导致死锁的循环锁依赖项

建议:在锁中检测到循环依赖的死锁,如果不重新启动服务器,被阻止的线程将无法恢复。修复锁定顺序,或尝试避免锁定,或在代码级别更改锁定顺序,向SR报告服务器/产品代码

终结器线程阻塞 描述:终结器线程被阻止

建议:检查终结器线程是否因锁而被阻止,该锁可能导致浪费等待从终结器队列回收的内存

WLS单播分簇 描述:群集成员之间的单播消息传递不正常

建议:单播组成员无法正常通信,无法应用最新的单播相关修补程序,无法启用消息排序或切换到多播

WLS Muxer正在处理服务器请求 描述:WLS Muxer正在处理子系统请求

建议:WLS服务器运行状况不健康,因为某些子系统被请求淹没,导致Muxer线程直接处理请求。而不是调度到相关子系统。这里可能有一个bug

粘线 描述:线程被卡住,请求需要很长时间才能完成

建议:检查线程或呼叫为何花费很长时间??。它是否因不可用或资源不好或正在争夺锁而被阻止?。如果它在循环中重复工作,则可以忽略。就像适配器线程在无限循环中轮询事件一样


您提供的数据量有点大,所以让我们给您一个如何继续的提示。为了进行分析,我使用了基于TDA的开源应用程序。解析3个MiB值的数据需要几秒钟,但在中很好地显示了一个文件中22个不同的堆栈跟踪转储:


深入查看会发现一系列令人不安的警告和警报

我没有时间检查所有这些,但这里有一个标记为致命的列表,请记住,误报也是可以预期的:

等待SLSB豆子 描述:正在等待SLSB空闲池中的无状态会话Bean SLSB实例

建议:豆子都在使用中,自由池大小不足

僵局 描述:检测到导致死锁的循环锁依赖项

建议:在锁中检测到循环依赖的死锁,如果不重新启动服务器,被阻止的线程将无法恢复。修复锁定顺序,或尝试避免锁定,或在代码级别更改锁定顺序,向SR报告服务器/产品代码

终结器线程阻塞 描述:终结器线程被阻止

建议:检查终结器线程是否因锁而被阻止,该锁可能导致浪费等待从终结器队列回收的内存

WLS单播分簇 描述:群集成员之间的单播消息传递不正常

建议:单播组成员无法正常通信,无法应用最新的单播相关修补程序,无法启用消息排序或切换到多播

WLS Muxer正在处理服务器请求 描述:WLS Muxer正在处理子系统请求

建议:WLS服务器运行状况不健康,因为某些子系统被请求淹没,导致Muxer线程直接处理请求。而不是调度到相关子系统。这里可能有一个bug

粘线 描述:线程被卡住,请求需要很长时间才能完成

建议:检查线程或呼叫为何花费很长时间??。它是否因不可用或资源不好或正在争夺锁而被阻止?。如果它在循环中重复工作,则可以忽略。就像适配器线程在无限循环中轮询事件一样


问题在于WLDF将信息记录到日志文件中。一旦禁用,它有助于提高性能
极大地我不喜欢使用ThreadLogic作为线程转储分析工具。无论问题有多复杂,当您卡住线程时,它都会显示循环死锁。

问题是WLDF将信息记录到日志文件中。一旦禁用,它将极大地提高性能。我不喜欢使用ThreadLogic作为线程转储分析工具。无论问题有多复杂,当您卡住线程时,它都会显示循环死锁。

线程转储是给定时刻应用程序中运行的所有线程的快照。线程转储将有数百/数千个应用程序线程。很难在每个线程中滚动堆栈跟踪的每一行。调用堆栈树将所有线程堆栈跟踪合并到一棵树中,并提供一个视图。它使线程转储导航更加简单和容易。下面是fastThread.io生成的调用堆栈树示例

图1:调用堆栈树

您可以继续深入查看代码执行路径。图2显示了调用堆栈树图中特定分支的深入版本

图2:向下钻取的调用堆栈树


线程转储是在给定时刻应用程序中运行的所有线程的快照。线程转储将有数百/数千个应用程序线程。很难在每个线程中滚动堆栈跟踪的每一行。调用堆栈树将所有线程堆栈跟踪合并到一棵树中,并提供一个视图。它使线程转储导航更加简单和容易。下面是fastThread.io生成的调用堆栈树示例

图1:调用堆栈树

您可以继续深入查看代码执行路径。图2显示了调用堆栈树图中特定分支的深入版本

图2:向下钻取的调用堆栈树


megafileupload链接??祝你好运。我建议你从列表中删除所有空闲的线程。这将把你减少到一到四个线程,你应该能够将它们粘贴到这个问题中。有没有一种快速的方法可以按照上面的要求删除所有空闲线程?一个megafileupload链接??祝你好运。我建议你从列表中删除所有空闲的线程。这会将您的线程数减少到1到4个,您应该能够将其粘贴到这个问题中。是否有一种快速方法可以按照上述要求删除所有空闲线程?如果出现死锁,为什么我使用的武士工具在其GUI中不显示死锁图标?@shifahim:不知道,没有任何工具是完美的。面对这两者的输出,也许你会发现一些有用的东西。深入到真正令人不安的警告和警报列表。从何处以及如何获取快照?我有TDA工具,但不知道从何处获得。也有一些可能是原因,其他可能是原因的结果。我们有没有办法找出问题的真正原因?@shifahim:我在使用tda之上构建的threadlogic。使用前一个,它有更多的功能。我想它应该能让你了解哪些线程导致了问题。如果出现死锁,为什么我使用的武士工具在GUI中不显示死锁图标?@shifahim:不知道,没有工具是完美的。面对这两者的输出,也许你会发现一些有用的东西。深入到真正令人不安的警告和警报列表。从何处以及如何获取快照?我有TDA工具,但不知道从何处获得。也有一些可能是原因,其他可能是原因的结果。我们有没有办法找出问题的真正原因?@shifahim:我在使用tda之上构建的threadlogic。使用前一个,它有更多的功能。我认为它应该让您了解哪些线程导致了问题。