0

Tomcat にはよ​​く知られたメモリ リークの問題があり、再デプロイが多すぎると PermGen スペース エラーが発生します。

私が知りたいのは、そのスペースを完全にリセットし、既存のメモリ リークを消去する方法でサーバーをリロードするためのベスト プラクティスです。shutdown.sh と startup.sh を使用するだけでは効果がありません。リークされたメモリがリークされたままになっているようです。もちろん、マシンの再起動は機能しますが、より迅速でクリーンで安全なソリューションが存在するかどうかを知りたいです。

ありがとう!

(もちろん、より多くの PermGen スペースを割り当てることはできますが、それは問題を遅らせているだけです。後でジョブを変更し、アプリを変更するため、アプリを運用準備完了として宣言する前に、リークしたメモリをフラッシュしたいと考えています。しばらく再デプロイされません)

編集: 以下のコメントで述べたように、スクリプトは新しい JVM を作成するため、既にすべてのメモリをフラッシュすることになっているようです。そのため、多くの再デプロイの後、新しい JVM でも PermGen エラーが発生し続ける原因となる他の要因があるはずです。

4

3 に答える 3

4

Tomcat にはPermGen リーク、webapp の再デプロイの有無はありません問題は、Web アプリケーション自体、使用するライブラリ、または場合によっては Java 標準ライブラリの実装のいずれかにあります。これらはすべて、腕を上げて Tomcat を責めることなく解決できます。

これらのリークを適切に診断する方法については、http://people.apache.org/~markt/presentations/2010-11-04-Memory-Leaks-60mins.pdfを参照してください。プロファイラーを入手してください (これは、JVisualVM などの JDK に含まれている無料で入手できるユーティリティでも実行できます)。

Tomcat 7 には、問題のある Java API 実装 (AWT など) を回避できるメモリ リーク防止ユーティリティが含まれています。それ以外はすべてあなたの問題か、ライブラリの問題です。このような PermGen リークが見つかったオープンソース ライブラリのほとんどは、それらを回避するためにライブラリにパッチを適用するために迅速に取り組みました (または、PermGen リークを回避するための適切な方法をクライアント コードに提供します)。

于 2012-07-04T20:23:38.833 に答える
3

この問題をまだ解決していない場合は、Plumbrを試すことができます。リリースされたばかりのバージョンには、PermGen 監視機能もあります。

于 2012-07-12T12:44:07.790 に答える