我确实有一个jenkins实例,它被卡在某种无限循环中而没有任何可见的活动。
我可以获取正在运行的进程的pid
,那么如何生成可用于错误报告的跟踪?
我在linux上运行。
答案 0 :(得分:29)
尝试使用jstack。它将为您提供线程正在执行的操作的完整列表。它所需要的只是过程pid。
答案 1 :(得分:10)
进行线程转储。通过Visual VM连接并请求转储。或者如果在unix上然后 kill -3 pid 或在Windows上 Ctrl + Break 在进程控制台上就可以为你完成。转储直接进入控制台。您也可以使用jstack来抛出转储。
答案 2 :(得分:4)
在* nix中,按top
按H
可以看到线程。
然后使用jps
,您可以看到pid
请注意,如果进程是使用权限启动的,那么您必须使用sudo
执行它。
如果您获取线程ID并将其转换为十六进制,那么您可以使用jstack pid
输出交叉该数据。
这两个工具都在$JAVA_HOME/bin
。
答案 3 :(得分:4)
Ctrl+\
(发送SIGQUIT
)
Ctrl+Break
(在MSVCRT下发送SIGBREAK
)
答案 4 :(得分:2)
看看VisualVM。有很多很好的分析工具,你可以执行一个线程转储。