问题标签 [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 回答
3952 浏览

java - 当JVM在GC中花费时间时,线程转储是什么样的

在分析 Java 应用程序时,我注意到一个有趣的事实。当 JVM 处于 GC 时,死亡线程转储的螺旋如下所示:

因此,状态中有很多线程TIMED_WAITING。从理论上讲,这种情况很容易在正常运行的应用程序中找到(应用程序目前根本没有任何传入请求),但我什至找不到单个请求调度线程做有用的事情(标称命中率约为 100 hps)。

这种行为与 GC 有什么关系,还是只是巧合?

0 投票
3 回答
9689 浏览

java - 如何从命令行查看内存使用情况、java 程序的线程转储?

是否有任何已知的命令行工具要求 JVM 查看 Java 程序的内存使用情况和线程转储。像无头 jvisualvm 之类的东西?

0 投票
2 回答
5297 浏览

java - Glassfish v3 - 如何获取/分析线程转储?

我正在尝试为我的应用程序获取/分析线程转储,该应用程序在 Linux 机器上的 Glassfish 3.1.1 中运行。我遇到了两种方法来做到这一点。

  1. kill -QUIT <pid>在命令行上运行
  2. 在 Glassfish 管理控制台中,转到常见任务 -> 服务器(管理服务器) -> 常规选项卡。点击“JVM Report”,从“View”下拉框中选择“Thread Dump”。

这两个线程转储的结果是不同的。kill 方法生成一个 XML (hotspot_log) 文件 (/domains/domain1/logs/jvm.log),并具有以下结构:

注意结束标签

文件中缺少。 有谁知道为什么?

通过管理控制台完成的转储生成具有以下格式的报告:

为了分析转储,我尝试了 TDA - Thread Dump Analyzer (http://java.net/projects/tda/) 并发现它会打开 XML 版本,但在我打开之前它不会显示在 UI 中非 XML 版本(然后都显示)。

为什么格式如此不同?一个比另一个更适合分析吗?有关系吗?

0 投票
3 回答
4822 浏览

java - kill -3 没有生成线程转储

是否有可能 kill -3 / quit PID 不打印任何内容,即空线程转储?我们从一位支持工程师那里听到了一个故事,想知道是否有专家可以验证。

这是 RHEL 5 上的 Java 6_26

0 投票
2 回答
909 浏览

java - 如何以编程方式查找所有线程持有的锁

通过调用 Thread.getAllStackTraces() 可以很容易地从 Java 程序中输出线程转储。我有时在 JSP 中使用它来轻松诊断问题。但通常您需要了解的另一个重要信息是线程持有哪些锁以及阻塞的线程试图获取哪些锁。有没有办法通过 Java API 获取这些信息?我发现的唯一东西是 Thread.holdsLock,但这只有在您知道所有可能被锁定的对象时才有帮助,并且不会告诉您阻塞的线程试图获取哪些锁。

(当然,您可以通过使用工具创建线程转储来获取此信息,但如果系统不在您自己的机器上,则此选项通常不易获得。)

0 投票
0 回答
221 浏览

java - 奇怪的java线程转储输出

我有一个 java 进程的线程转储(kill -3 输出),我看到一个奇怪的问题 - 我看到有很多线程被阻塞,因为它们正在等待锁定一个对象,但我没有看到任何线程持有这个锁:

grep 0x00002aab9e9454a0 输出文件 | 排序 | 唯一的-c

(它是 86 次,因为那里有多个转储,但这与这个问题无关)。

任何人都知道这样的事情怎么会发生?

谢谢!

0 投票
1 回答
5417 浏览

linux - 用于收集进程的线程转储日志的 unix 脚本

我正在尝试生成有关 HashMap.put 函数的问题。我编写了一个测试代码,它将运行 100 多个线程。通过使用 jstack 或 kill 我能够获取我的进程的特定线程的线程转储。 .问题是我无法立即捕获线程转储,我希望将所有线程转储记录在一个文件中,直到进程结束。是否有任何 linux 命令或 shell 脚本可以编写来执行此操作?

0 投票
2 回答
734 浏览

java - 线程转储分析(AWT-EventQueue 可运行但条件等待)

我有一个 Swing 应用程序在一段时间(随机)后冻结。我在它冻结后每 10 秒拍摄 5 个线程快照,它们都包含这些完全相同的行:

请注意,线程转储中没有其他线程在 XXX.java 中。相应的代码行 (XXX.java:171) 看起来有些无害:

在哪里:

  • a,bc是局部BigDecimal变量。
  • MATH_CONTEXT是一个public final static变量,只能在 XXX.java 中访问

我的问题(回答其中任何一个都会有很大帮助)

  • 这是死锁或活跃度问题的证据(线程似乎没有取得进展,但它处于RUNNABLE状态)?
  • 这是冻结的可能原因还是我应该看看其他地方?
  • 解决问题的下一步是什么?
0 投票
2 回答
25106 浏览

java - tomcat中有100个线程TIMED_WAITING,导致它在线程总数超过200时停止

最近我们的一个生产 tomcat 服务器变得无响应,因为 tomcat 的繁忙线程飙升至 200。当我们在重新启动之前进行线程转储时,我们有 100 个处于 TIMED_WAITING 状态的线程,例如这 3 个线程:

我们有 4 个应用程序的线程池(例如 pool-4-thread-20 等)也有 20 个线程,所以我不确定这 100 个线程在哪个阻塞队列上等待?我们正在使用带有休眠功能的 c3P0 连接池,这似乎不是造成这种情况的原因。

知道 java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject 是什么吗?

0 投票
4 回答
3771 浏览

java - Java 7 对 Google App Engine Java 的支持

Google App Engine Java概览页面表明支持 Java 版本 5 和 6。使用 Java 7u4 启动本地开发服务器时,会出现以下错误:

有关更多信息,请参阅输出线程转储

这个特定的 Java 7 版本是否存在任何已知问题?路线图上是否会对 GAE Java 提供完整的 Java 7 支持?