1

我正在使用 samurai 工具来分析线程转储。看起来它有许多阻塞的线程。我不知道从线程转储中派生出任何东西。

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

可以找到线程转储@:http ://www.megafileupload.com/en/file/379103/biserver2-txt.html

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

4

3 回答 3

4

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

转储

深入研究以揭示真正令人不安的警告和警报列表。

警报

我没有时间检查所有这些,但这里有一个标记为 FATAL 的列表(请记住,误报也是意料之中的):

等待 SLSB Bean

描述:等待来自 SLSB 空闲池的无状态会话 Bean (SLSB) 实例

Advice : Beans all in use, free pool size 不足

僵局

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

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

终结器线程被阻塞

描述:终结器线程被阻塞

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

WLS 单播集群运行状况不佳

说明:集群成员之间的单播消息不正常

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

WLS Muxer 正在处理服务器请求

说明:WLS Muxer 正在处理子系统请求

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

卡住的线程

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

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

于 2012-12-16T12:38:06.593 回答
1

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

于 2013-01-09T14:16:55.690 回答
0

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

在此处输入图像描述 图 1:调用堆栈树

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

在此处输入图像描述 图 2:深入调用堆栈树

FastThread.io 生成的示例调用堆栈树

于 2019-07-03T12:31:31.453 回答