アプリケーション サーバーの Permgen のダンプを取得したいと考えていました。
サーバーを再起動したくないので使用-XX:+TraceClassLoading -XX:+TraceClassUnloading
したくありません。どちらも使用したくありませんjconsole
。
私は(ヒープダンプに使用されたpermgenのオプションが見つかりませんでした)のようなツールをjmap
使用してpermgenを取得し、pid
.
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
これは完全なダンプではありませんが、そうすることで調査を行うことができます。
私はまだ詳細を見つける方法を探しています。
ヒープに対して行われるため、「permgenをダンプする」ことはできません。
他jmap -permstat
の人が提示したように、このブログエントリ「TheUnknown Generation:Perm」で説明されているように、標準のヒープダンプを分析して、永続的な世代に光を当てることができます。
ヒープダンプにはパーマスペースに関する多くの情報が実際には含まれていないため、パーマの問題に取り組むことは困難です。最近、Sporar、Sundararajan、Kievietによるこの素晴らしい記事を見つけました。著者は、恒久的な世代にいくつかの光を当てました。もちろん、Eclipse Memory Analyzerを使用してこの「未知の」世代を分析できるかどうか、またどのように使用できるかをすぐに確認する必要がありました。これがこのブログの内容です。
jmap -permstat <pid>