我想要转储应用服务器的Permgen。
我不想使用-XX:+TraceClassLoading -XX:+TraceClassUnloading
,因为我不想重新启动服务器,我也不想使用jconsole
。
我有任何工具,如jmap
(用于堆转储没有找到permgen的任何选项)来获取permgen,以便我只能提供pid
。
答案 0 :(得分:17)
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
这不是一个完整的转储,但这样做可以让你做一些调查。
我仍然在寻找如何找到更多信息。
答案 1 :(得分:12)
不可能像堆一样'转储permgen'。
除了其他人提到的jmap -permstat
之外,您还可以分析标准堆转储,以便了解this blog entry: 'The Unknown Generation: Perm'中描述的永久生成。
由于堆转储实际上并不包含有关perm空间的大量信息,因此很难解决perm问题。最近,我发现了Sporar,Sundararajan和Kieviet的这篇精彩文章。作者对永久性一代有所了解。当然,我必须立即检查是否以及如何使用Eclipse Memory Analyzer来分析这个“未知”代。这就是这篇博客的内容。
答案 2 :(得分:1)
jmap -permstat <pid>