2010-11-02 28 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 

這不是一個完全轉儲,但這樣做會允許你做一些調查。

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