您如何从Java程序中获取在远程VM中运行的已知线程的堆栈跟踪?
远程JVM是否需要与任何特殊开关一起运行?
答案 0 :(得分:4)
你真的需要在Java中以编程方式执行此操作(我想是的,因为你的问题明确说明了吗?)
无论如何,只是不要,然后在Linux上你可以在命令行上执行此操作:
kill -3 <pid>
编辑:对于编程访问启动启用了JMX的应用程序,通过JMX连接到它并使用ThreadMXBean.getThreadInfo为每个正在运行的线程获取堆栈跟踪。
如果你在同一台机器上有多个JVM,每个JVM都需要它自己独特的JMX端口,你可以通过反复尝试从池中随机选择一个并注销结果来解决这个问题。
有关创建自定义JMX客户端的详细信息,请参阅here。