2

私のJava(Web)アプリケーションでは、High Perm Genをよく見かけます。

jmap コマンドは、多くの場合、90% 使用されていることを示しています。しかし、それは私のアプリケーションに何の問題も引き起こさないようです。私の全体的なヒープ使用量はかなり低いです (最大メモリが 2048 MB に設定されている場合、約 400 MB)。

本番環境でアプリケーションを管理するチームは、PermGen が高いことを懸念しています。そして、多くの場合、あらゆる種類の問題がそれに起因しています。

質問:
(1) PermGen が高いだけで心配する必要がありますか?ガベージ コレクションが発生したときに PermGen が低下しないのでしょうか?
(2) PermGen の最大サイズ (現在は 200 MB) を 2 倍にする必要がありますが、副作用はありますか?

4

2 に答える 2

1

ヒープ、perm gen、総常駐メモリの 3 つを考慮する必要があります。

パーマがなくなるまで、パーマの発生を気にする必要はありません。値を増やしてみてください。

副作用として、より多くの RAM が消費されます。あなたの統計は、より多くの perm gen とより小さな最大ヒープを使用できることを示唆しています。

あなたの本当の関心事は、ある時点の値であってはなりません。これは Web アプリであるため、ヒープ、perm 生成、総常駐メモリを監視し、それらが時間の経過とともにどのように変化するかを確認する必要があります。

GC がすべてを制御し、サーバーが通常の負荷とピーク時の負荷を処理できる場合は、優れたアプリを取得したことになります。時間の経過とともに大きくなる場合は、メモリ リークを心配する必要があるかもしれません。

どのアプリケーション サーバーにデプロイされていますか? それは非常に重要です。Tomcat アプリは、本格的な Java EE アプリ サーバーよりも総常駐メモリがはるかに少なくなります。

于 2013-03-20T12:07:53.617 に答える
1

(1) PermGen が高いだけで心配する必要がありますか?ガベージ コレクションが発生したときに PermGen が低下しないのでしょうか?

いいえ。PermGen は、クラス情報をロードするために予約されたスペースです。Web コンテナーが WAR ファイルをアンデプロイし、クラスが不要になった場合を除き、ガベージ コレクションを実行することはできません。

(2) PermGen の最大サイズ (現在は 200 MB) を 2 倍にする必要がありますが、副作用はありますか?

最初の明白な副作用は、JVM がより多くの RAM を使用することです。マシンに割り当てられた物理 RAM が十分であることを確認してください。 BIRT は、リークがないにもかかわらず、permgen スペースが原因ですぐに失敗するアプリの例です。次に、permgen に漏れがないかどうかも調査します。予防措置として permgen を増やすことは問題ありませんが、メモリ リークが発生した場合、長期的にはアプリケーションの役に立たない可能性があります。

たとえば、リークしているドライバーは、より多くの permgen の使用につながる可能性があります。アプリケーションを繰り返しホットデプロイし、permgen への変更を確認することをお勧めします。メモリがなくなるまで増加し続けますか?次に、漏れがあります。

于 2013-03-20T12:08:29.733 に答える