私はWindowsサーバーでApacheとTomcatを使用しています。今朝から、Tomcatはログなしで動作を停止します。ハングアップせず、シャットダウンするだけです。
Tomcatにはログがなく、CPU /メモリに問題はありません。System.Exit
私のコードで。
誰かがこの問題を抱えたことはありますか?
5〜10分後にランダムに発生します。アプリケーションは正常に応答し、いつか、ブームが機能しなくなります。
更新:まだ手がかりはありません。管理チームは別のボックスにwebappをインストールします...
私はこの問題を抱えていて、原因をこの link で見つけました。 Tomcatを起動する私のスクリプトには、最後の行tail -f catalina.out
。このスクリプトを強制終了しなかったとき、シェルはタイムアウトして、Tomcatを含むすべての子プロセスでスクリプトを強制終了しました。
これは、JVMがクラッシュしているようです。 JVMクラッシュログを探しましたか?通常、hs_err_pid * .logのような名前で、JVMの作業ディレクトリに作成されます。
このようなファイルを見つけてアップロードした場合、私たちはおそらくさらにお手伝いできます。
いくつかの質問:
最近私はこの問題を抱えていましたが、将来同じ問題に直面した場合、これが役立つことを願っています。
シナリオ: Tomcatはログやエラーなしでシャットダウンします
私の問題の根本原因:TimerTask
を使用してタスクからアクセスされる同期されたメソッド
タイマーまたはユーザーアクションに基づいてさまざまなスレッドからアクセスされる同期メソッドを持つシングルトンクラスがあり、このメソッドが完了するまでに数分かかることがあります。 TimerTask
がこのメソッドをしばらく待機しているとき(タイマーがタイムアウトしたか、スレッドが強制終了されたか、バックグラウンドで何かが発生していると思います)、メソッドのロックが解除された瞬間に、Tomcatが強制終了されます。
そのため、synchronizedキーワードとシングルトンを削除し、スレッドセーフのためにコードをいくつか変更しました。その後、問題はなくなりました。
確認方法:同期メソッドの最初の行にログステートメントがあり、Tomcatがシャットダウンするたびに、最後の数行でこのメッセージが見つかりました。
よろしく、パニンドラKasturi
最近この問題に直面しました。
シナリオ:Tomcatは正常に起動しましたが、1時間後に自動的にシャットダウンし、1日後にこれが発生した場合、Tomcatログに何も表示されません。
問題:実際の問題は、メモリ使用量が多く、空きSWAPメモリがないことでした。
解決策の見つけ方
Tomcatがログを表示しない場合は、システムログに何かがあるはずなので、/var/log/messages
が、許可されていないため、私は/var/log/dmesg
そしてこれを得た
「メモリ不足:プロセス14606(Java)スコア106を殺すか、子供を犠牲にします」。
出力でSwap Memory free 0 Kに気づきました。 top
コマンドを実行して、同じことを確認します。したがって、どういうわけか、OSが私のTomcatプロセスを強制終了させる原因となった高いメモリ使用量がありました。
時間を費やした後、ようやく理由がわかりました。
ps -ef | grep Tomcat
は、同じアプリケーションに対していくつかのTomcatプロセスが実行されていることを示しました。以前のTomcatのシャットダウンが正常に行われなかった可能性があり、何らかの理由でシャットダウン後もプロセスが強制終了されず、メモリ使用量が多かったようです。
そのため、kill
を使用して、実行中のすべてのTomcatプロセスを強制終了しました。 SWAPメモリが解放されました。
Tomcatを再起動し、正常に動作しました。 :)
このような問題をデバッグする際に注意する点:
パスにCATALINA_OPTSがあり、JVMのサイズが小さくなるように設定されていることに気付きました。そのため、Tomcatのクラッシュとログトレースは見つかりませんでした。サーバーは2時間未満で自動的にシャットダウンします。
チェック、CATALINA_OPTSまたはJava_OPTS-これらはjvm設定を持っている可能性があります。それらを増やすか、コメント化してスワップメモリを増やします。
別の可能性は、サーバーが必要とするポートにバインドしているボックスで、今朝いくつかのプロセスが開始されたことです。
「ローカルコンピューター上のサービスが開始されてから停止されました。他のサービスまたはプログラムで使用されていない場合、一部のサービスは自動的に停止します。」
私は問題を経験しました。問題から抜け出すために多くの方法を試しましたが、最終的に次のような解決策を得ました。
1)クリック実行スタートボタンからのコマンド。
2)入力Services.msc次に[OK]をクリックすると、コンピュータ内のすべてのサービスが取得されます。
)サービスを選択し、サービスを右クリックして[プロパティ]を選択
4)ログオンのプロパティに移動してローカルシステムアカウントを選択し、[OK]をクリックします。
これは動作します。
同じポートで他のプログラムが実行されていると、ときどき発生します。たとえば、Skype。 Tomcatを起動する前に、そのプログラムをシャットダウンしてください。
サーブレットまたはその依存関係の1つがSystem.exit()の呼び出しを許可されていますか? (その意味でTomcat VMがどのようにロックダウンされているかはわかりません)
開発者には、exit(666)を使用しても問題ないと考えていました。不可逆行列の検出時(これは良いことではありませんが、致命的ではないことを確認してください)。ああ。おそらく、あなたのシステムにいくつかの同様の犯人がいますか?