0

私の問題は、2GB 2Core VPSのTomcat7でWebアプリを実行していて、アプリがヒープオーバーフローの例外でクラッシュしたときに、Tomcatが起動または停止しないことです。ブラウザからアクセスしようとすると、ハングします。

停止しようとすると停止しているように見えますが、繰り返し実行すると、すでに停止しているため例外がスローされるはずですが、そうではありません。15分後になって初めて起動できます。

ヒープオーバーフローの問題を解決する必要があることはわかっていますが、使用しているフレームワークがスレッドセーフであることが判明したため、リクエストごとにメモリの多いオブジェクトの新しいインスタンスを作成する必要があるため、単純にできません:(特定の量のオブジェクトのみを作成し、残りのリクエストを申し訳ありませんページにリダイレクトする基本的なコントローラーを追加して、問題を解決しようとしました。これはUNIプロジェクト用であり、主な目標は何百人ものユーザーにサービスを提供できるため、フレームワークのスレッドを安全にすることは重要ではありません。

それでも、Tomcatがクラッシュした後になぜそれを行うのかを知る必要があります。また、同時にメモリ内にあるこれらのオブジェクトの数を制限する方法について、より良いアイデアがあれば役立ちます。

++++++++++

現時点で私が見ることができる唯一の解決策は、たとえば2GBのRAMを追加することです。これにより、一度に15〜20人のユーザーにサービスを提供できるようになります。

4

1 に答える 1

0

通常、Tomcat がメモリ不足エラーでクラッシュした後は、使用できない状態になり、プロセスを手動または使用して強制終了する必要があります。

catalina.sh stop -force

これらのメモリ不足エラーを防ぐ方法については 、「java.lang.OutOfMemoryError: PermGen space」エラーの処理を参照してください。

最終的には、問題により多くのハードウェアを投入する必要があるかもしれません。

これも便利かもしれません: Can I auto restart tomcat jvm on out of memory exception

于 2013-07-29T16:00:29.670 に答える