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

我确实有一个jenkins实例,它被卡在某种无限循环中,没有任何可见的活动。

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

我在linux上运行。

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

采取线程转储。 通过Visual VM连接并请求转储。 或者如果在unix上然后杀死-3 pid或在窗口上Ctrl + Break在进程控制台上会为你做。 转储直接进入控制台。 您也可以使用jstack来抛出转储。

在* nix中,通过按H可以看到top

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

如果您获取线程ID并将其转换为hex,那么您可以使用jstack pid输出交叉该数据。

这两个工具都在$JAVA_HOME/bin

Linux上的Ctrl+\ (发送SIGQUIT

Windows上的Ctrl+Break (在MSVCRT下发送SIGBREAK

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