2

重複とマークする前に、完全に読んでください。

perm gen OOMの問題を解決する具体的な方法を見つけるために、こことGoogleで多くのブログ/投稿を調べました。しかし、これまでのところ、それらのどれも問題を解決していません。これが私のユースケースです:

  1. 多くの個々のプロジェクト *.war ファイルがデプロイされている tomcat サーバーがあります。
  2. perm gen の問題は最初は問題ではなかったので、モジュールを追加し続けました。
  3. 最近 Perm Gen - OOM の問題に直面しましたが、JVM パラメータの perm gen メモリを増やすことで問題を解決しました。
  4. モジュールを追加し続けた後、ある晴れた日に再びこの問題が発生しました。
  5. 一時的な解決策として、サーバーを再起動し続けますが、問題は 1 週間程度発生しません。

恒久的な解決に向けたアプローチ:

  • JVM パラメータで perm gen を増やすという有名なアプローチは、もはやオプションではありません。
  • perm gen のメモリ リークを引き起こしているコードの問題である可能性があることを理解しています。しかし、膨大なコードベースをレビューすることはほとんど不可能です。

あなたの助けが必要です:

ここで悪いコードを理解するための無料のツールまたは簡単な方法 (またはヒント) はありますか?

私たちのコード モジュールの 1 つの観察:

  • 各モジュール *war で、80% の一般的な jar が使用されていることを観察しましたが、それらはすべて、各 war に個別にバンドルされています。

ここで私の分析(間違っているかもしれません)

  • Tomcat サーバーは、モジュール war ごとに個別の app-classloader を使用する必要があります。
  • したがって、jar からの 2 つの同じクラス (たとえば、別の war にある同じ abcd.jar) が perm gen 領域にロードされます。それらは互いに見えません (Java セキュリティ モデルのため)。
  • つまり、アプリごとに、クラスの多くのコピーが読み込まれる可能性があります (それ以外の場合は一般的になる可能性があります)。

あなたの助けが必要です:

上記の分析は正しいですか?

共通の jar をいくつかの共通の lib パスに移動し、そのパスを tomcat 共有 lib 構成に含めると、役に立ちますか? 私のターゲットは、perm gen 領域にロードされたクラスの 1 つのコピーだけです。

最後に - 他にどのような方法を考えればよいでしょうか?

4

0 に答える 0