4

管理者の要求により、Tomcat アプリケーションで起動できる、CPU とデータベースを集中的に使用するスレッド (低い優先度で実行される) が長時間実行されています。

このスレッドにはシャットダウン フックを使用して、アプリケーションが強制的に停止された場合に終了する前にデータベースの状態をクリーンアップできるようにします。Control-C と Eclipse コンソールでのキャンセルを使用して、スタンドアロン モードで完全に動作します。

しかし、Tomcat の下で実行している場合、および次のことを行う場合:

$CATALINA_HOME/bin/shutdown.sh

サーブレット contextDestroyed メッセージが tomcat によって送信されることをデバッグ ログで確認しましたが、このスレッドでは、メッセージでメッセージを停止する方法はありません。重要な点は、シャットダウン フックが起動しないことです。

他の人がcontextDestroyedメッセージを使用していると言っていることに気づきましたが、それは私にはうまくいきません。また、いくつかの質問と回答は、Tomcatでシャットダウンフックが機能することを示唆しています。

Tomcat 6.0.35 を使用しています。

4

2 に答える 2

5

他の人が contextDestroyed メッセージを使用していると言っているのに気付きましたが、それは私にはうまくいきません

どうすればそれを機能させることができるかを考える必要があると思います。

シャットダウン フックを設定する Web アプリケーションは、正しい解決策ではありません。

  • Web アプリケーションが Web コンテナーによってシャットダウンされている場合、シャットダウン フックは実行されません。これは、webapp を再起動または再デプロイする場合に対処する孤立した DB スレッドに問題があることを意味します。

  • 最終的にシャットダウン フックが実行された場合、Web アプリケーションの残りの部分が Web コンテナーによって既にシャットダウンされているため、失敗する可能性があります。たとえば、webapp の JDBC 接続プールは通常、nuked されています。再デプロイ時の PermGen ストレージ リークを回避するための Tomcat の戦略の一環として、多くの「nuking」が舞台裏で行われることに注意してください ...

于 2012-07-11T23:50:30.427 に答える
1

管理者の要求により、Tomcat アプリケーションで起動できる、CPU とデータベースを集中的に使用するスレッド (低い優先度で実行される) が長時間実行されています。

このアウトプロセスを実行して、webapp、コンテキスト イベント、シャットダウン フック、またはその腐敗を気にしないのはなぜですか?

シャットダウンフックは面倒です。@StephenC が言うように、必要なときに起動しません。

于 2012-07-12T00:32:57.273 に答える