web-dev-qa-db-ja.com

Permgenをダンプする方法は?

アプリケーションサーバーのPermgenのダンプを取りたかったのです。

サーバーを再起動したくないので、-XX:+TraceClassLoading -XX:+TraceClassUnloadingを使用したくありません。また、jconsoleも使用しません。

jmap(ヒープダンプに使用され、permgenのオプションが見つかりませんでした)のようなツールがあり、permgenを取得して、pidのみを提供できるようにします。

22
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  

これは完全なダンプではありませんが、これを行うと、調査を行うことができます。

私はまだより多くの情報を見つける方法を探しています。

17
Guillaume Coté

ヒープに対して行われるため、「permgenをダンプする」ことはできません。

に加えて jmap -permstat他の人が提示しているように、標準のヒープダンプを分析して、 このブログエントリ:「不明な世代:パーマ」 で説明されているように、永続的な世代に光を当てることができます。

ヒープダンプにはパーマスペースに関する多くの情報が実際には含まれていないため、パーマの問題に取り組むことは困難です。最近、Sporar、Sundararajan、Kievietによるこの素晴らしい記事を見つけました。著者らは、恒久的な世代に光を当てています。もちろん、Eclipse Memory Analyzerを使用してこの「不明な」世代を分析できるかどうか、またどのように使用できるかをすぐに確認する必要がありました。これがこのブログの内容です。

12
fglez
jmap -permstat <pid>
1
Amir Afghani