我正在尝试这样的事情。我有一个应用程序服务器我想知道有没有办法在正常关闭之前收集线程死锁等jvm详细信息。我可以使用
ShutDownHook
但是在关闭时如何收集像死锁等的jvm细节。
由于
答案 0 :(得分:1)
是否需要从java内部执行?在外部你可以使用jstack。
答案 1 :(得分:1)
jstack依赖于平台,并非在所有平台上都可用。因此,jstack在所有情况下可能都没用。
无法从JVM中创建完整的JVM线程转储。您可以在JVM DLL上调用JVM_dumpAllStacks函数来创建线程转储。这取决于该路由是否可以接受,因为它涉及JNI和一些本机编码。查看Open JDK Bug list以获取更多信息,并了解从java管理API获取此功能的努力。其他JVM也可能在未来遵循此路线。在这种情况下,您将能够通过管理API调用JVM线程转储。
此时只有你可能拥有的选项(当你不想采用JNI路由时)是使用这样的旧方法创建线程转储:Creating a Thread Dump