如何转储Permgen?

时间:2010-11-02 16:47:26

标签: jvm profiling permgen

我想要转储应用服务器的Permgen。

我不想使用-XX:+TraceClassLoading -XX:+TraceClassUnloading,因为我不想重新启动服务器,我也不想使用jconsole

我有任何工具,如jmap(用于堆转储没有找到permgen的任何选项)来获取permgen,以便我只能提供pid

3 个答案:

答案 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>