如何获得占用100%cpu的运行java程序的完整堆栈跟踪?

如何获得占用100%cpu的运行java程序的完整堆栈跟踪?,java,debugging,stack-trace,Java,Debugging,Stack Trace,我有一个jenkins实例,它陷入了某种无休止的循环中,没有任何可见的活动 我可以获得正在运行的进程的pid,那么如何生成跟踪,以便用于bug报告 我正在linux上运行。尝试使用。它将为您提供线程正在执行的操作的完整列表。它所需要的只是过程pid。看看。它有很多很好的分析工具,您可以执行线程转储。执行线程转储。通过Visual VM连接并请求转储。或者,如果在unix上,则进程控制台上的kill-3PID或windows Ctrl+Break可以为您完成此操作。卸载直接进入控制台。您还可以使用

我有一个jenkins实例,它陷入了某种无休止的循环中,没有任何可见的活动

我可以获得正在运行的进程的
pid
,那么如何生成跟踪,以便用于bug报告


我正在linux上运行。

尝试使用。它将为您提供线程正在执行的操作的完整列表。它所需要的只是过程pid。

看看。它有很多很好的分析工具,您可以执行线程转储。

执行线程转储。通过Visual VM连接并请求转储。或者,如果在unix上,则进程控制台上的kill-3PID或windows Ctrl+Break可以为您完成此操作。卸载直接进入控制台。您还可以使用jstack抛出转储。

在*nix中,使用
top
H
可以看到线程

然后使用
jps
可以看到
pid
记住,如果进程是以特权启动的,那么必须使用
sudo
执行它

如果获取线程id并将其转换为十六进制,则可以将该数据与
jstack pid
输出交叉


这两个工具都在linux上的
$JAVA\u HOME/bin
Ctrl+\
中(它发送
SIGQUIT


Ctrl+Break
在windows上(在MSVCRT下发送
SIGBREAK

我不确定这对我的情况是否有帮助,但它确实回答了这个问题,在某种程度上缩小了范围。如果您有100%的CPU使用率,那么您需要寻找不处于阻塞状态的线程。例如,线程30609是sun.nio.ch.EPollArrayWrapper.epollWait,它可能根据您的配置进行匹配。下面是相关的问题>注意-此实用程序不受支持,可能在未来版本的J2SE SDK中可用,也可能不可用。jstack目前在Windows平台或Linux安腾平台上不可用。kill-3 pid工作得很好,谢谢!对于那些在“屏幕”中运行JVM的人:ctrl-AH(大写)开始/停止记录到文件。
kill-3
对我有效,而
jstack
没有。谢谢