22

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

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

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

4

3 回答 3

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  

这不是一个完整的转储,但这样做可以让您进行一些调查。

我仍在寻找如何找到更多信息。

于 2011-05-25T19:59:12.993 回答
13

不可能像对堆那样“转储 permgen”。

除了jmap -permstat其他人所介绍的那样,您还可以分析标准堆转储以了解您的永久代,如本博客条目中所述:“未知代:永久”

因为堆转储实际上并没有包含很多关于永久空间的信息,所以永久问题很难解决。最近,我发现了 Sporar、Sundararajan 和 Kieviet 的这篇很棒的文章。作者对永久一代有所了解。当然,我必须立即检查是否以及如何使用 Eclipse 内存分析器来分析这个“未知”生成。这就是这个博客的内容。

于 2010-12-17T15:37:41.050 回答
1
jmap -permstat <pid>
于 2010-11-02T17:48:53.543 回答