6

私の状況は次のとおりです。

war ファイルを web-app フォルダーにアップロードする前に、Tomcat を呼び出して停止しますsh shutdown.sh。完全なシャットダウンには、以前は約 30 秒かかりました。でも今はうまくいかなくなりました。

実際、Webページからアプリケーションにアクセスすると503エラー(メンテナンス中)がスローされるため、いくつかの作業が行われました。しかし、ps aux | grep tomcatチェックするために使用すると、Tomcat プロセスはまだそこにあります。そして、それは約5〜10分間そこにあります。

すべてのタスクを完了するには余分な時間が必要になる場合があることは理解していますが、完全に停止するまでに時間がかかりすぎます (5 ~ 10 分)。なぜこうなったのかはわかりませんが、何か理由があるはずです。コード、または最近使用したデプロイの新しいスクリプトに何か関係があるのか​​もしれません。どこをチェックすればいいのかほとんどわかりません。

これは私たちのチームにとって重要です。これは、スクリプトを使用して war ファイルを自動パッケージ化し、特定の時間にアップロードして展開する「自動展開」を使用しているためです。古いTomcatインスタンスが正常にシャットダウンする前に新しいTomcatインスタンスを開始すると、永遠にそこでハングアップし、「kill -9」によるタスクのクリーンアップは困難です.

この問題を実験した人はいますか? 手がかりをいただければ幸いです。

4

2 に答える 2

3

HoàngLong-

アップデートありがとうございます。

1)Quartzジョブが実行されていることを確認するという事実と、エラーメッセージはどちらも重要です。

重大:Webアプリケーション[/ project]は、[BasicResourcePool.close()のResource Destroyer]という名前のスレッドを開始したようですが、停止できませんでした。これにより、メモリリークが発生する可能性が非常に高くなります。

2)1つの提案は構成です:

http://forum.springsource.org/showthread.php?17833-Spring-Quartz-Tomcat-no-shutdown

私も同じ問題を抱えていました。destroy-method="destroy"SchedulerFactoryBean定義に追加して修正しました 。このようにして、アプリケーションが停止したときにSpringがスケジューラーを閉じます。

3)別の提案は、シャットダウンリスナーを追加することです。

http://forums.terracotta.org/forums/posts/list/15/4341.page

コンテキストリスナーを使用し、シャットダウン時にタイムアウトを導入すると、問題が解決します。シャットダウンしてから1秒待ちます。

  public void contextDestroyed(ServletContextEvent sce) {
    try {
      factory.getScheduler().shutdown();
      Thread.sleep(1000);
于 2012-07-05T05:54:07.417 に答える
2

これがここ数日のうちに不思議なことに起こり始めたものである場合、おそらく Linux のうるう秒のバグに遭遇していますか? 詳細については、次を参照してください。

https://serverfault.com/questions/403732/anyone-else-experiencing-high-rates-of-linux-server-crashes-during-a-leap-second

https://access.redhat.com/knowledge/articles/15145

http://pedroalves-bi.blogspot.fi/2012/07/java-leap-second-bug-how-to-fix-your.html

于 2012-07-05T06:08:14.260 に答える