14

perm gen のメモリ リークがあります。jvisualvm を使用したプロファイリングは、ホット デプロイメント (Tomcat、WebSphere、WebLogic などで、JVM を強制終了せずにアプリケーションを停止および開始するなど) を実行すると、PermGen スペースが常に増加することを示しています。

読んだ後、jhat やその他の高度なツールを使用して、おそらくWebAppClassLoader親クラス ローダーのどこかにあるクラスから への参照があることに気付きました。

jhatで大規模なJavaScriptベースのクエリを実行したにもかかわらず、特定できませんでした

クラスローダーがガベージコレクションされないようにする責任がある人を見つける簡単なユーティリティはありませんか(したがって、クラスローダーによってロードされたクラスのガベージコレクションが許可されます)。

JProfiler、jvisualvm、jhat、および多くの Google を試しました

すべての LMGTFY の友人へ - 私は約 1 日半かけてフォーラムを段階的な手順で読みましたが、うまくいきませんでした。出力するユーティリティまたはコードを探しています:

クラス Y のオブジェクト X は、クラスが削除されないようにする唯一の GC ルートです。

4

4 に答える 4

10

満足のいくものではありませんが、簡単な解決策があります。本番環境でホットデプロイしないでください。2 つのサーブレット コンテナーのクラスターをセットアップし、再起動で一度に 1 つずつ更新することができます。

于 2010-01-03T20:21:06.240 に答える
5

頻繁な再展開の現実... あなたができる最善の方法は、-XX:MaxPermSize=256m を使用して perm gen のサイズを大きくすることです。これにより、jvm の再起動ごとに再デプロイが増える可能性があります。またはhttp://my.opera.com/karmazilla/blog/2007/03/15/permgen-strikes-backで読んでください。

クラスローダをまったく gc できない場合は、jvm をいじってもまったく役に立たないことに注意してください。開発者にとっては便利ですが、特に本番環境では、頻繁に展開することは忘れたほうがよいでしょう。

于 2010-01-03T20:09:11.960 に答える
2

このサイトの方法を使用しましたが、役に立ちました。 http://www.mkyong.com/tomcat/tomcat-javalangoutofmemoryerror-permgen-space/

于 2010-10-18T15:21:52.437 に答える
1

ここにもいくつかのポインタがあります http://minmaxmim.blogspot.com/2010/01/javalangoutofmemoryerror-java-heap.html

javalangoutofmemoryerror-permgen-space の記事も確認してください。

于 2010-01-07T05:23:02.067 に答える