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

时间:2012-05-25 14:21:29

标签: java debugging stack-trace

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

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

我在linux上运行。

5 个答案:

答案 0 :(得分:29)

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

答案 1 :(得分:10)

进行线程转储。通过Visual VM连接并请求转储。或者如果在unix上然后 kill -3 pid 或在Windows上 Ctrl + Break 在进程控制台上就可以为你完成。转储直接进入控制台。您也可以使用jstack来抛出转储。

答案 2 :(得分:4)

在* nix中,按topH可以看到线程。

然后使用jps,您可以看到pid请注意,如果进程是使用权限启动的,那么您必须使用sudo执行它。

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

这两个工具都在$JAVA_HOME/bin

答案 3 :(得分:4)

Linux上的

Ctrl+\(发送SIGQUIT

Windows上的

Ctrl+Break(在MSVCRT下发送SIGBREAK

答案 4 :(得分:2)

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