如何获得正在运行的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 。 它有很多很好的分析工具,你可以执行一个线程转储。