问题标签 [thread-dump]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
3938 浏览

jakarta-ee - 一旦服务器进入低线程计数状态,有什么方法可以触发 WebLogic 服务器的线程转储?

我们的 WebLogic 设置给我们带来了一些问题。

我们有一个名为 HP BAC 的监控工具,它可以帮助我们可视化服务器的状态,我们将此工具与 Java Thread Dump 实用程序结合使用,这样当线程数较少时,将捕获线程转储。

在某些情况下,服务器会进入低线程数状态,我们不确定原因是什么,因为我们所有的努力找出答案——尤其是通过线程转储似乎是徒劳的。

鉴于“最先进的技术”,我们的线程转储捕获总是在后期/之后触发,并且始终从不捕获对我们的调查有用的线程转储。

我想看看你们其他人是如何进行这样的监控工作的?

在此处输入图像描述

0 投票
2 回答
3972 浏览

java - Java:如何读取锁定的线程转储

谁能帮我理解我应该如何阅读这个堆栈跟踪?

显然存在一些锁定问题,但我只是不知道如何阅读它。例如,具有“-locked”的第一行说“a java.util.ArrayList”...这是否意味着在 ResponseStream.getPacket() (第 466 行)中,它正在synchronized使用 ArrayList 进行块具有主题?

我的整个应用程序现在都被锁定了,还有许多其他类似的堆栈跟踪,我试图弄清楚如何阅读这个,以便我可以看到问题发生在哪里。

更新

这是一个使用 C3P0 进行数据库连接池的 Web 应用程序。正如您从以下线程中看到的那样,我正在进行一些数据库锁定。我知道其他调试方法,但我真正的问题是我应该如何阅读这些线程转储。

谢谢!-肖恩

0 投票
4 回答
63201 浏览

java - Java线程转储:没有“等待锁定......”的阻塞线程

我很难理解从 jstack 获得的线程转储,用于在 Tomcat 6(java 1.6.0_22,Linux)上运行的 Spring MVC Web 应用程序。

我看到自己被阻塞的阻塞线程(导致其他线程等待),但是线程转储并没有告诉我他们等待的原因或等待哪个监视器。

例子:

即我错过了堆栈跟踪中的“等待锁定...”行。显然线程锁定了一个 Class 对象,但我不明白为什么线程本身被阻塞。

线程转储不包含任何死锁提示。

如何识别锁定监视器?

谢谢,奥利弗

0 投票
10 回答
92863 浏览

java - jstack:目标进程没有响应

我正在运行 Ubuntu 服务器版,我想进行 Tomcat 的线程转储。

所以,我首先尝试找出tomcat使用的是哪个PID:

但它不在那里?

所以,我top改用并找到了 PID 5730。

然后我调用 jstack 来获取线程转储:

这是怎么回事?:-(

我已经尝试按照Jstack 中的描述导出 CATALINA_TMPDIR 并且 Jstat 停止升级到 JDK6u23但这并没有改变任何东西:

更新:

我也尝试过sudo -u tomcat6 jstack -l -F 5730 > threaddumpexceptions2.txt,但它只会给我控制台上的大量异常。

0 投票
1 回答
7792 浏览

java - 那些以“pool”开头的java线程是什么?

我遇到了无法正常关闭的 Tomcat 服务器的问题。发出关闭命令后,我进行了线程转储,它看起来像这样:

http://pastebin.com/7SW4wZN9

我认为不允许虚拟机关闭的“嫌疑人”线程是名为“pool-4-thread-1”的线程。其余的要么是守护线程,要么是内部 VM 线程。在试图找出这个线程的用途时,我注意到还有其他 java 程序可以创建具有相似名称的线程(例如,JVisualVM 创建这样的线程)。

所以我想知道是否有人知道这个线程是什么以及如何创建它。

0 投票
2 回答
77701 浏览

java - 如何分析java线程转储?

我试图更多地了解java,尤其是内存管理和线程。出于这个原因,我最近对查看线程转储感兴趣。

以下是从使用 VisualVM(Java 的内置工具)的 Web 应用程序中提取的几行代码:

首先,我对一些变量名有疑问:

  • tid 和 nid 是什么意思?
  • Object.wait 之后方括号中的数字是什么?

然后对于堆栈跟踪本身:

  • 等待 <.....> (java.lang....)是什么意思, <..>中的数字是多少
  • 这是什么意思锁定<.....>(一个java.lang....)同样的问题,什么是在<..>

我认为锁定这个词在某种程度上与等待条件有关,但是,我错了。事实上,我想知道为什么 locked 重复了 3 次,但线程处于可运行状态,如在同一个转储中看到的:

最后,这是其中最糟糕的:

该线程处于可运行状态,但它正在等待条件。什么条件,什么是 0x00000?

为什么堆栈跟踪如此短而没有任何线程类的证据?

如果您能回答我所有的问题,我将不胜感激。

谢谢

0 投票
4 回答
8255 浏览

java - 如何解释 Java 线程转储?

我在这里使用 Ubuntu(服务器版)在 Tomcat6 上运行了一个 Java Web 应用程序。1-3天后,应用程序变得很慢,所以我在重新启动tomcat后创建了一个threaddump,当应用程序开始变慢时创建了另一个:

重新启动后的线程转储:

3天后的Threaddump(应用程序现在很慢):

从我发布的转储中,我可以看到有很多线程似乎由于某种原因没有终止。不幸的是,我不知道哪些(类名?)以及为什么。在控制台上使用top显示“VIRT”的值从〜800(重新启动后)上升到超过4000(3天后)。

我怎样才能更好地解释这些转储?我已经尝试将它们加载到 TDA 中,但没有成功(TDA 似乎没有将它们识别为转储)。

也许有人已经在垃圾场中看到了发生了什么?

0 投票
3 回答
12605 浏览

java - 了解引用处理程序线程

我将继续深入了解 Java Thread。不幸的是,我的 Java 认证没有涵盖这部分,所以学习的唯一方法是发布一系列愚蠢的问题。经过这么多年的 Java 开发,我有时想知道我还需要学习多少 :-)

特别是我现在关注的是引用处理程序线程。

现在有一些问题,其中一些我知道答案,但我没有发布它,因为我想听听其他人的意见:

  1. Reference Handler 线程应该做什么?
  2. 线程转储应该被认为是自下而上的,为什么堆栈跟踪以锁定开始,至少在线程运行后不​​应该出现锁定语句?
  3. “本机方法”是什么意思?
  4. 为什么是“未知来源”,在这种情况下线程转储无法调用源代码?
  5. 最后waiting on和locked是一样的,为什么?

像往常一样,我恳请回答所有问题,以便我可以标记已回答。

0 投票
1 回答
766 浏览

java - Control-Break 在使用 cygwin 的 java 中不起作用

我希望这是问这个问题的正确地方,我正在运行 JAVA 7 for Windows 64 bit 。我使用 cygwin 作为终端。每次我尝试停止一个正在进行的程序时,我都会按下 control-break,通常这会将作业发送到后台,但我会得到以下线程转储。

是否需要更改某些内容以使控制中断以将作业发送到后台。

非常感谢

0 投票
1 回答
4109 浏览

java - Java 线程转储中的孤立线程

我看到线程转储Java应用程序中经常出现“孤立”线程。我的应用程序本身似乎因 cpu 活动非常低而被冻结,并且我的线程转储显示许多线程正在等待锁定对象,但没有线程锁定该对象。

有没有人似乎有类似的情况,并对如何进一步诊断有任何建议?

这是线程转储:

全线程转储 Java HotSpot(TM) 64 位服务器 VM(1.5.0_12-b04 混合模式):