29

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

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

我在linux上运行。

4

5 回答 5

36

尝试使用jstack。它会为您提供线程正在做什么的完整列表。它所需要的只是进程 pid。

于 2012-05-25T14:22:58.510 回答
12

进行线程转储。通过 Visual VM 连接并请求转储。或者,如果在 unix 上,那么kill -3 pid或在进程控制台上的 windows Ctrl+Break将为您完成。转储直接进入控制台。您还可以使用 jstack 来进行转储。

于 2012-05-25T14:25:27.823 回答
4

在 *nix 中,top通过按下H 可以看到线程。

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

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

这两个工具都在$JAVA_HOME/bin.

于 2012-05-25T14:27:17.970 回答
4

Ctrl+\在 linux 上(发送SIGQUIT

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

于 2015-03-23T15:52:04.047 回答
2

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

于 2012-05-25T14:24:27.603 回答