プロジェクトで互いに連携する 2 つの別個の Web アプリでいくつかの問題を実験しています。X 回のデプロイの後、悪名高い「java.lang.OutOfMemoryError: PermGen space」エラーが発生します。
そのため、私はしばらくの間、VisualVM を使用して PermGen スペースを監視し、アプリを継続的に再デプロイして、何が起こっているかを確認してきました。
そして、ここで奇妙な動作:
最初に、最初のアプリを 15 回以上再デプロイしました。動作は予想どおりでした。メモリ ダイアグラムは、最大サイズ (67MB) に近づくまで、絶えず増加するはしごのようでした。この時点でメモリは解放され、初期レベルに戻ります。
2番目のアプリケーションを再デプロイしたときも同じです。
次に、両方を同時に再展開しようとしました (Tomcat はこれを順番に実行します)。はしごの「ステップ」のサイズは大きくなりましたが、動作は単一の展開と同じでした。
それから私は最後のテストをしました。メモリが限界に近づくまで両方のアプリを同時に再展開し、その後、アプリの 1 つだけを再展開しました。そして..出来上がり: PermGen ERROR.
それで..ここで一体何が起こっているのですか?
VisualVMの図。前半 (左) は、単一の展開 (アプリケーション 1 および 2) に対応します。後半(右)は、限界を超えてエラーになった時点を表しています。
ありがとうございました!