问题标签 [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.
java - 如何分析 Java 中的线程转储以最小化高 CPU 使用率
我正在尝试读取文本文件并使用Disruptor
.
但是我发现CPU使用率太高了(200%,根据top
命令)。
我是性能调优和线程转储分析的新手。我不知道出了什么问题。
所以我执行top -H
并找到两个最高的线程(都是 99%),并找到线程转储:
基本上这两个线程会将数据发布到 Disruptor。我Disruptor
以这种方式创建:
请帮助我并分析线程转储以找到高 CPU 使用率的根本原因。
java - Java进程打印线程转储
我启动了一个 java 进程,它似乎运行良好。它也在按预期工作。但是它时不时地打印这个线程转储。我不确定它是否有一些问题(内存?)。谁能告诉我java进程自己打印线程转储的可能原因是什么?
这是线程转储。https://gist.github.com/tispratik/270869e17aaaf0d1b092
multithreading - Java 线程转储:WAITING(在对象监视器上)- 它在等待什么?
有一个类似的问题问java-thread-dump-waiting-on-object-monitor-line-not-followed-by-waiting-on,但没有具体的答案,所以我会问我的问题希望得到更多信息...
在下面的线程转储中,我看到线程处于“WAITING(在对象监视器上)”状态 - 但没有“等待”表示它正在等待什么。我如何解释这个线程堆栈并找出这个线程等待的原因(以及什么资源)?
此线程是配置为接受来自 Tibco 总线的消息的侦听器线程之一。
谢谢!
码头
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 线程转储收集到所需的磁盘位置[命令行或编程]?
java - 如何为小型 Java 程序进行线程转储
如果我有一个从 jar 文件执行的小代码(代码无法更改),如何进行线程转储。是否有任何命令行选项可以通过 java 传递以获取线程转储(就像我们可以从堆转储中完成一样)。jstack PID 的问题在于获取 PID 并附加到 jstack 非常困难,因为该进程在 1 秒左右完成。
所以,我一直在寻找类似的东西
java <something here> jar file here
.
谢谢, 瓦巴夫
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++ 源代码)。
performance - 哪种方法在 java 中生成线程转储最不显眼?
我知道以下用于在 java 中生成线程转储的方法:
- 杀死 -3
- 堆栈
- 来自 JVM 内部的 JMX
- JMX 远程
- JPDA(远程)
- JVMTI (C API)
在这些方法中,哪种方法对 JVM 的性能影响最小?
java - Citrix 虚拟化进程的线程转储?
我需要对通过 Citrix XenApp(在 Windows 2008 上)运行的 JAVA 应用程序进行线程转储。
我可以在任务管理器中看到该进程,但是当我尝试使用线程转储时,jstack -l <PID>
我收到以下错误:"Not enough storage is available to process this command"
.
当我使用该JVisualVM
工具时,我没有看到正在运行的进程。
当直接从服务器(Windows 2008)运行应用程序时,可以在上面的工具中看到该过程。
有没有收集线程转储的工作方法?
java - Java 监控工具,可以“实时”查看堆栈跟踪
我从事用java编写的非常大的网络项目。当我单击某个按钮或执行其他操作时,我很难理解应用程序代码中调用了哪些方法(因为我是项目新手,而且应用程序真的很大)。所以我想知道是否有一个工具可以让你以给定的时间间隔(比如每 100 毫秒)获取一些线程的堆栈跟踪。我知道 VisualVm,但它不允许这样做,我只能在某个时间点让线程哑(没有办法连续获取堆栈跟踪)。
有人可以建议允许我在运行时监视方法调用的工具或任何技术吗?谢谢