我在这里浏览了几篇文章,例如:
以编程方式转储/JDI(Java 调试器接口) 但没有得到确切的答案。
问题:在 Windows 上有一个 Java5 应用程序作为服务运行(所以我们没有可以使用Ctrl+Break进行转储的控制台)。有时应用程序挂起,我们需要一个线程转储。
我们已经尝试过“jstack”,但它在我们的环境中不起作用(我们发现它只兼容 Java6)。
所以我们制作了一个 C++ 应用程序,它通过附加到 Java 应用程序进程的 .dll 调用方法调用线程转储,因此它需要本地管理员权限,这不太好。
因此,我们希望其他选项可以在没有管理员权限的情况下使用,并且可以与 Java 5 一起使用,而无需对现有代码进行大量返工。
在 LOOP 线程转储中打印的方法(Thread.getAllStackTraces())
不是一个选项,因为我们需要重构许多应用程序才能使其工作。
因此,仅在应用程序“外部”工作的实用程序将是最佳选择。
提前致谢!