如何转储Permgen?

Vik*_*ana 22 profiling jvm permgen

我想把应用服务器的Permgen转储.

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

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

Gui*_*oté 17

jmap -permstat <pid>
Run Code Online (Sandbox Code Playgroud)

将产生这样的输出:

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  
Run Code Online (Sandbox Code Playgroud)

这不是一个完整的转储,但这样做可以让你做一些调查.

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


fgl*_*lez 12

它不可能像堆一样'转储permgen'.

除了jmap -permstat正如其他人所介绍的那样,您可以分析标准堆转储,以便为您的永久生成提供一些信息,如本博客文章中所述:"未知世代:烫发".

由于堆转储实际上并不包含有关perm空间的大量信息,因此很难解决perm问题.最近,我发现了Sporar,Sundararajan和Kieviet的这篇精彩文章.作者对永久性一代有所了解.当然,我必须立即检查是否以及如何使用Eclipse Memory Analyzer来分析这个"未知"代.这就是这个博客的内容.