4

おなじみの古い問題ですが、一度だけ解決したいと思います。次の JVM フラグを設定しました。

-XX:+CMSClassUnloadingEnabled 
-XX:+CMSPermGenSweepingEnabled -Dorg.apache.catalina.loader.WebappClassLoader.ENABLE_CLEAR_REFERENCES=true

しかし、permgen の使用量は、デプロイメント サイクルごとに 50MB 程度増加しています。Tomcat マネージャー アプリケーションを使用してリモートでデプロイしており、Grails は運用モードになっています。

いっぱいになるkill -9と、必要です!

JRockit を使ってみようと思うかもしれませんが、今は選択肢ではありません。コンテナ全体を時々バウンスしなければならないことは、実稼働環境では受け入れられません。

4

2 に答える 2

2

私の経験では、グレイルを使用しているときに使用しているappserverに関係なく、Permgenのリークが問題になります(非常に個人的で、おそらく簡単に主張できる逸話ですが、それを明確にするためです;))。

これがデプロイした唯一のアプリである場合は、shutdown.shだけでなく、webappフォルダーを削除し、warに入れてから、startup.shを実行してください。

これが私たちのやり方であり、再配置には約7秒しかかかりません(そのうちの5つは、sleep 5カタリナが元に戻る前に完全にシャットダウンされるようにするためのものです)。

編集:

私の意見では、アプリごとに1つのTomcatインスタンスを持つことはとにかくクールです!

于 2011-11-25T19:59:38.047 に答える
1

これに気付いていないかもしれませんが、Tomcatインスタンスに繰り返しホットデプロイする限り、permgemは最終的に発生します。これは、適切にアンロードできないクラスがいくつかあるためです(クラスのプログラム方法または制限のため)。 Tomcatの側で)どのパラメーターを使用しても、再起動は必要ありません。

于 2011-11-25T20:03:56.033 に答える