18

本番サーバー (Linux CentOS 4.8) で夜間に停止する Tomcat 5.5 に問題があり、停止する理由がわかりません... catalina.out またはアプリケーションのログに Tomcat のログがありません。

サーバーが停止する理由を見つけるために、さまざまなことを試しました。

  • コア ダンプを生成できるように Tomcat を構成する
  • javassist を使用してメソッドをインストゥルメントSystem.exit()し、メソッドが呼び出されたかどうかを確認します
  • JVM にシャットダウン フックを追加します (を使用Runtime.getRuntime().addShutdownHook())

それらのどれも機能しませんでした。コア ダンプはありません。Exit メソッドとシャットダウン フックは呼び出されません。私の結論は次のとおりです。

  • VM は適切に終了されませんが、ログなしでクラッシュします。

Tomcatが停止する理由を見つけるために読むアイデアやログはありますか?

4

4 に答える 4

24

1) stderr がどこにリダイレクトされるかを確認し、そこに何かが出力されたかどうかを確認します。

2) Tomcat のメモリ制限と、システムの空きメモリ量を確認します。/var/log の下にある Linux システム ログを確認して、その間に疑わしいことが発生していないかどうかを確認します。たとえば、システムのメモリが不足している場合、カーネルはプロセスを (ほとんど) トレースなしでランダムに強制終了できます。

私たちは何年も本番環境で 5.5 を実行してきましたが、原因不明のシャットダウンは一度もありませんでした、FWIW。

于 2012-04-24T15:34:33.213 に答える
0

Tomcat 7 には、Catalina 内に System.exit クラス呼び出しなどを防止するオプションがあります: http://ci.apache.org/projects/tomcat/tomcat7/docs/security-manager-howto.html

5.5バージョンにも同様のオプションがあるかもしれません。ドキュメントを試してください。

Tomcat の起動に使用するのと同じコンソールに出力をリダイレクトするオプションがあります。この情報は、Unix ベースのシステムで実行するとログにリダイレクトされます。Windows では、リダイレクトされない場合はコンソールに残ります。

于 2012-04-24T15:29:58.250 に答える
0

ほとんどの場合、スタック オーバーフロー例外が発生しています。これは、発生したときの Tomcat の典型的な動作です。たとえば、循環依存関係を持つ JSON または XML Bean にシリアル化しようとしている (ただし、循環を処理しない)。

この問題が発生するたびに(数回)、常にこれでした。通常、他のすべての停止は適切にログに記録されます (OutOfMemory など)。

このタイプのストップはどこにも痕跡を残しません。

于 2012-04-24T15:20:07.247 に答える