需要帮助分析Java Thread dump

时间:2012-12-16 12:09:32

标签: java threadpool

我正在使用武士工具来分析线程转储。看起来它有很多被阻塞的线程。我不知道从线程转储中获取任何东西。

我的Java应用程序中有一个SQL查询,它运行在weblogic上,需要很长时间才能完成。通过单击我的Java应用程序按钮运行此查询几次挂起我的JVM。

可以在@ http://www.megafileupload.com/en/file/379103/biserver2-txt.html

找到线程转储

你能帮我理解一下线程转储的内容吗?

3 个答案:

答案 0 :(得分:3)

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

Dumps

向下钻取以显示令人不安的警告和警报列表。

Alerts

我没有时间检查所有这些内容,但这里列出了标记为致命的内容(请记住,假设也会出现误报):

  

等待SLSB Beans

     

描述:从SLSB免费池中等待无状态会话Bean(SLSB)实例

     

建议:所有正在使用的Bean,免费池大小不足

     

DEADLOCK

     

描述:检测到循环锁定依赖性导致死锁

     

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

     

终结者线程被阻止

     

描述:终结者线程被阻止

     

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

     

WLS单播群集不健康

     

描述:群集成员之间的单播消息传递不健康

     

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

     

WLS Muxer正在处理服务器请求

     

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

     

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

     

被困线程

     

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

     

建议:检查线程或调用为什么花费很长时间?它是否因不可用或不良资源而被阻止或争夺Lock?如果它在循环中重复工作,则可以忽略。 (比如适配器线程轮询无限循环中的事件)...

答案 1 :(得分:1)

问题在于WLDF将日志文件记录到日志文件中。一旦被禁用,它将极大地提高性能。我不是ThreadLogic的粉丝,而是作为线程转储分析的工具。无论问题的变化如何,它都会在您遇到线程时显示循环死锁。

答案 2 :(得分:0)

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

enter image description here           图1:调用栈树

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

enter image description here       无花果2:深入的调用堆栈树

Sample call stack tree generated by FastThread.io