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