我正在使用 samurai 工具来分析线程转储。看起来它有许多阻塞的线程。我不知道从线程转储中派生出任何东西。
我的 Java 应用程序中有一个 SQL 查询,它在 weblogic 上运行,需要大量时间才能完成。通过多次单击我的 Java 应用程序按钮运行此查询后,我的 JVM 挂起。
可以找到线程转储@:http ://www.megafileupload.com/en/file/379103/biserver2-txt.html
你能帮我理解线程转储说什么吗?
我正在使用 samurai 工具来分析线程转储。看起来它有许多阻塞的线程。我不知道从线程转储中派生出任何东西。
我的 Java 应用程序中有一个 SQL 查询,它在 weblogic 上运行,需要大量时间才能完成。通过多次单击我的 Java 应用程序按钮运行此查询后,我的 JVM 挂起。
可以找到线程转储@:http ://www.megafileupload.com/en/file/379103/biserver2-txt.html
你能帮我理解线程转储说什么吗?
您提供的数据量有点庞大,所以让我们提示您如何继续。对于分析,我使用基于 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 线程直接处理请求。而不是分派到相关的子系统。这里可能有一个错误。
卡住的线程
描述:线程被卡住,请求需要很长时间才能完成
建议:检查为什么线程或调用需要很长时间???。是因为资源不可用或坏资源而被阻止或争夺锁吗?如果它在循环中重复工作,则可以忽略。(就像适配器线程在无限循环中轮询事件)......
问题在于 WLDF 将信息记录到日志文件中。一旦禁用,它有助于极大地提高性能。我不喜欢 ThreadLogic 作为线程转储分析工具。当您卡住线程时,无论问题有多大变化,它都会显示循环死锁。
线程转储是给定时刻在应用程序中运行的所有线程的快照。线程转储将有成百上千的应用程序线程。很难在每个线程中滚动浏览堆栈跟踪的每一行。调用堆栈树将所有线程堆栈跟踪合并到一棵树中,并为您提供一个单一视图。它使线程转储导航更加简单和容易。下面是由 fastThread.io 生成的示例调用堆栈树。
您可以继续向下钻取以查看代码执行路径。图 2 显示了调用堆栈树图中特定分支的向下钻取版本。