我想要获取应用服务器Permgen的转储。
我不想使用-XX:+TraceClassLoading -XX:+TraceClassUnloading
,因为我不想重启服务器,也不想使用jconsole
。
是否有类似于jmap
的工具(用于堆转储),以获取Permgen,这样我就可以只提供pid
。
我想要获取应用服务器Permgen的转储。
我不想使用-XX:+TraceClassLoading -XX:+TraceClassUnloading
,因为我不想重启服务器,也不想使用jconsole
。
是否有类似于jmap
的工具(用于堆转储),以获取Permgen,这样我就可以只提供pid
。
jmap -permstat <pid>
它将会产生如下输出:
30337 intern Strings occupying 2746200 bytes.
class_loader classes bytes parent_loader alive? type
<bootstrap> 2031 7253392 null live <internal>
0x517474f0 1 1760 null dead sun/reflect/DelegatingClassLoader@0x43f95d38
0x4f83f670 1 1744 0x4ebfb8e8 dead sun/reflect/DelegatingClassLoader@0x43f95d38
[...]
total = 287 10020 35889952 N/A alive=3, dead=284 N/A
这不是完整的转储,但这样做将允许您进行一些调查。
我仍在寻找如何找到更多信息。
无法像堆一样“dump permgen”。
除了其他人提到的 jmap -permstat
,您还可以分析标准堆转储文件以揭示您的永久代问题,如此博客文章:“未知的代:Perm”所述。
由于堆转储文件对 Perm 区域的信息不太充分,因此 Perm 问题难以解决。最近,我发现了作者 Sporar、Sundararajan 和 Kieviet 的这篇优秀文章。作者们帮助我们了解了永久代。当然,我必须立刻检查一下是否可以使用 Eclipse Memory Analyzer 来分析这个“未知”的代。这就是本文讨论的内容。
jmap -permstat <pid>