问题标签 [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 投票
4 回答
7098 浏览

java - 如何分析 Java 中的线程转储以最小化高 CPU 使用率

我正在尝试读取文本文件并使用Disruptor.

但是我发现CPU使用率太高了(200%,根据top命令)。

我是性能调优和线程转储分析的新手。我不知道出了什么问题。

所以我执行top -H并找到两个最高的线程(都是 99%),并找到线程转储:

基本上这两个线程会将数据发布到 Disruptor。我Disruptor以这种方式创建:

请帮助我并分析线程转储以找到高 CPU 使用率的根本原因。

0 投票
0 回答
246 浏览

java - Java进程打印线程转储

我启动了一个 java 进程,它似乎运行良好。它也在按预期工作。但是它时不时地打印这个线程转储。我不确定它是否有一些问题(内存?)。谁能告诉我java进程自己打印线程转储的可能原因是什么?

这是线程转储。https://gist.github.com/tispratik/270869e17aaaf0d1b092

0 投票
2 回答
27938 浏览

multithreading - Java 线程转储:WAITING(在对象监视器上)- 它在等待什么?

有一个类似的问题问java-thread-dump-waiting-on-object-monitor-line-not-followed-by-waiting-on,但没有具体的答案,所以我会问我的问题希望得到更多信息...

在下面的线程转储中,我看到线程处于“WAITING(在对象监视器上)”状态 - 但没有“等待”表示它正在等待什么。我如何解释这个线程堆栈并找出这个线程等待的原因(以及什么资源)?

此线程是配置为接受来自 Tibco 总线的消息的侦听器线程之一。

谢谢!

码头

0 投票
1 回答
1232 浏览

java - 自动化 Tomcat 线程/堆转储以进行进一步分析

我在 tomcat 上运行一个 Web 应用程序。当有很多请求被触发时,Tomcat 进程会挂起。由于这是一个生产网络应用程序,我无法一直监控以手动获取 tomcat java 进程/线程转储。

我已经在tomcat上启用了jmx远程端口

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=2222 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=true

我的问题是:当 tomcat 进程达到高 CPU[线程数]/内存使用率/挂起时,我们可以自动将 tomcat 线程转储收集到所需的磁盘位置[命令行或编程]?

0 投票
0 回答
174 浏览

java - 如何为小型 Java 程序进行线程转储

如果我有一个从 jar 文件执行的小代码(代码无法更改),如何进行线程转储。是否有任何命令行选项可以通过 java 传递以获取线程转储(就像我们可以从堆转储中完成一样)。jstack PID 的问题在于获取 PID 并附加到 jstack 非常困难,因为该进程在 1 秒左右完成。

所以,我一直在寻找类似的东西

java <something here> jar file here.

谢谢, 瓦巴夫

0 投票
2 回答
2095 浏览

java - RUNNABLE 线程在本机方法中可能不会消耗 CPU?

当对大部分空闲的 Tomcat 服务器进行线程转储时,很多线程可能会显示为 RUNNABLE 状态,如下所示:

我对源代码的解释是,这个线程正在等待(超时)来自 HTTP keepalive 连接的更多数据。因此,即使线程是 RUNNABLE,它也不会消耗 CPU。

Thread.State RUNNABLE javadoc说:

处于可运行状态的线程正在 Java 虚拟机中执行,但它可能正在等待来自操作系统的其他资源,例如处理器。

所以在这种情况下,其他资源将是 I/O 而不是 CPU。

在其他问题Java socketRead0 Issue中,Geoff回答:

我相信,当您使用 Java 本机方法时,即使调用实际上被阻塞等待某个事件,堆栈跟踪也会显示 RUNNABLE。从本质上讲,我不相信 Java 有任何方法知道本地方法实际上在做什么,因此它将这些调用标记为 RUNNABLE。我已经在 socketRead0() 和 socketAccept() 中看到了这一点——它们通常都会阻塞。

我得出了类似的结论,我想在这个专门的问题中验证这种解释,即:

如果我想通过查看 RUNNABLE Threads 来分析 CPU 消耗,我可能不得不通过非常仔细地查看它们的源代码来排除 Native Methods 中的线程?

关键是它不像只查看线程的状态那么容易,而是必须深入研究源代码并开始猜测特定的本地方法可能在做什么(甚至查看它的 C 或 C++ 源代码)。

0 投票
4 回答
1230 浏览

java - 有没有办法使用 JVMTI 生成定期的 Java 线程转储?

在 java 中有多种生成线程转储的方法。

我想使用JVMTI(C API)来生成它,以评估它对正在运行的 JVM 的性能影响。(我知道 jstack 和 JMX ;这个问题通常不是关于获取线程转储,而是关于使用 JVMTI API)。

我的代码基于这篇博文。在那里,java 代理附加到 SIGQUIT 信号。我想避免这种情况,因为这与 JVM 用于将线程转储写入标准输出的信号相同。我想避免这种重复。

换句话说,我想附加到不同的信号,或者想办法让代理定期生成线程转储。

0 投票
2 回答
1120 浏览

performance - 哪种方法在 java 中生成线程转储最不显眼?

我知道以下用于在 java 中生成线程转储的方法:

  • 杀死 -3
  • 堆栈
  • 来自 JVM 内部的 JMX
  • JMX 远程
  • JPDA(远程)
  • JVMTI (C API)

在这些方法中,哪种方法对 JVM 的性能影响最小?

0 投票
0 回答
145 浏览

java - Citrix 虚拟化进程的线程转储?

我需要对通过 Citrix XenApp(在 Windows 2008 上)运行的 JAVA 应用程序进行线程转储。

我可以在任务管理器中看到该进程,但是当我尝试使用线程转储时,jstack -l <PID>我收到以下错误:"Not enough storage is available to process this command".

当我使用该JVisualVM工具时,我没有看到正在运行的进程。

当直接从服务器(Windows 2008)运行应用程序时,可以在上面的工具中看到该过程。

有没有收集线程转储的工作方法?

0 投票
3 回答
2775 浏览

java - Java 监控工具,可以“实时”查看堆栈跟踪

我从事用java编写的非常大的网络项目。当我单击某个按钮或执行其他操作时,我很难理解应用程序代码中调用了哪些方法(因为我是项目新手,而且应用程序真的很大)。所以我想知道是否有一个工具可以让你以给定的时间间隔(比如每 100 毫秒)获取一些线程的堆栈跟踪。我知道 VisualVm,​​但它不允许这样做,我只能在某个时间点让线程哑(没有办法连续获取堆栈跟踪)。

有人可以建议允许我在运行时监视方法调用的工具或任何技术吗?谢谢