2010-11-02 72 views
20

我想要将应用程序服务器的Permgen转储。我不想用-XX:+TraceClassLoading -XX:+TraceClassUnloading,因为我不想重新启动服务器,我也不想使用jconsole如何转储Permgen?

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

+0

这有助于你解决你的问题Vikas? – 2010-11-02 18:48:34

+0

我以前试过这个,它是说无效的选项,并显示只说-histo和-dump(堆转储)的用法是允许的。我使用jdk/bin内的jmap是这个正确的 – 2010-11-03 03:09:20

+0

'permstat '选项在MS Windows上不可用。 – kschneid 2010-11-03 03:26:31

回答

1
jmap -permstat <pid> 
10

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

除了其他人已经介绍的jmap -permstat之外,您还可以分析标准堆转储,以便在this blog entry: 'The Unknown Generation: Perm'中描述的永久生成代码中提供一些信息。

因为堆转储并不包含大量关于烫发空间的信息,所以烫发问题很难解决。最近,我发现了Sporar,Sundararajan和Kieviet这篇伟大的文章。作者阐明了永久性一代。当然,我必须立即检查是否以及如何使用Eclipse Memory Analyzer来分析这个“未知”代。这是这个博客的内容。

15
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/[email protected] 
0x4f83f670 1 1744 0x4ebfb8e8 dead sun/reflect/[email protected] 
[...] 

total = 287 10020 35889952  N/A  alive=3, dead=284  N/A 

这不是一个完全转储,但这样做会允许你做一些调查。

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