Java—如何通过编程在远程进程上获取堆栈跟踪

Java—如何通过编程在远程进程上获取堆栈跟踪,java,stack-trace,remote-debugging,Java,Stack Trace,Remote Debugging,如何从Java程序中获取远程VM中运行的已知线程上的堆栈跟踪 远程JVM是否需要使用任何特殊的开关运行?鉴于您的问题如此明确地指出,您真的需要从Java内部以编程方式执行此操作吗 无论如何,以防万一,那么在Linux上,您可以在命令行上执行此操作: kill -3 <pid> 编辑:对于编程访问,在启用JMX的情况下启动应用程序,通过JMX连接到应用程序,并使用获取每个运行线程的堆栈跟踪 如果在同一台机器上有多个JVM,每个JVM都需要自己独特的JMX端口,您可以通过反复尝试从池中

如何从Java程序中获取远程VM中运行的已知线程上的堆栈跟踪


远程JVM是否需要使用任何特殊的开关运行?

鉴于您的问题如此明确地指出,您真的需要从Java内部以编程方式执行此操作吗

无论如何,以防万一,那么在Linux上,您可以在命令行上执行此操作:

kill -3 <pid>
编辑:对于编程访问,在启用JMX的情况下启动应用程序,通过JMX连接到应用程序,并使用获取每个运行线程的堆栈跟踪

如果在同一台机器上有多个JVM,每个JVM都需要自己独特的JMX端口,您可以通过反复尝试从池中随机选择一个JVM并注销结果来处理此问题


有关创建自定义JMX客户端的详细信息,请参阅

考虑到您的问题如此明确,我想您真的需要从Java内部以编程方式执行此操作吗

无论如何,以防万一,那么在Linux上,您可以在命令行上执行此操作:

kill -3 <pid>
编辑:对于编程访问,在启用JMX的情况下启动应用程序,通过JMX连接到应用程序,并使用获取每个运行线程的堆栈跟踪

如果在同一台机器上有多个JVM,每个JVM都需要自己独特的JMX端口,您可以通过反复尝试从池中随机选择一个JVM并注销结果来处理此问题


有关创建自定义JMX客户端的详细信息,请参阅

是-特别是通过JavaJConsole可以生成堆栈跟踪,因此假设您可以在启用JMX的情况下运行应用程序…请查看JConsole触发的MBean,以在控制台中生成堆栈跟踪。所有名称都通过控制台公开。如果您通过jmx连接到应用程序,您可以自己调用这些,现在就可以了-您可以通过jmx连接并调用ThreadMXBean.getThreadInfolong[],int:,int。您在哪里指定远程JVM的pid?使用jmx,您需要在同一台机器上的每个进程使用一个不同的端口来运行jmx。如果您有多个进程,您可以让每个进程在启动时尝试某个范围内的随机端口,然后重试,直到找到空闲端口为止。这对你想要的东西来说可能太过分了,但是在启用JMX的情况下运行确实有它自己的优势。是的-特别是通过JavaJConsole可以生成堆栈跟踪,因此假设您可以在启用JMX的情况下运行应用程序…看看JConsole触发的MBean,以在控制台中生成堆栈跟踪。所有名称都通过控制台公开。如果您通过jmx连接到应用程序,您可以自己调用这些,现在就可以了-您可以通过jmx连接并调用ThreadMXBean.getThreadInfolong[],int:,int。您在哪里指定远程JVM的pid?使用jmx,您需要在同一台机器上的每个进程使用一个不同的端口来运行jmx。如果您有多个进程,您可以让每个进程在启动时尝试某个范围内的随机端口,然后重试,直到找到空闲端口为止。这对于您想要的东西来说可能有些过分,但是启用JMX运行确实有它自己的优势。它位于同一个框中,所以不是远程的,而是不同的jvm。它位于同一个框中,所以不是远程的,而是不同的jvm。