定時にtomcatを再起動する要件があるシステムの保守をやっていますが、
shellスクリプトによりtomcatを再起動した後、
たまにWEBアプリケーションの動きがおかしくなって
一部の機能が働かない場合があります。
その障害が1年以上も続いてきて、
この間、根本的な原因がわかったようで、
メモしておきます。
【経緯】
WEBアプリケーションの実装にもよりますが、
今回のシステムにはWEBアプリAとBがあり
Aが別会社が作ったもので、
なんと、最初のアクセスで初期化処理を行うようです。
たまたま最初にアクセスが来たタイミングに、
そのアプリが完全にロードが終わっていない場合もあり、
その後、初期化処理がうまう実施できなくて、
起動後もずっと正常に動かなくなってしまいます。
自動再起動shellの処理は、以下の流れで処理しています。
①apache停止→一定の時間をsleep→チェック(リトライあり)
②tomcat停止→一定の時間をsleep→チェック(リトライあり)
③(何かしらの処理)
④tomcat起動→一定の時間をsleep→チェック(リトライあり)
⑤apache起動→一定の時間をsleep→チェック(リトライあり)
【問題】
④のチェックがtomcatのプロセスが存在するかどうかしか行っていないため
通常、起動コマンドを実行した直後が、tomcatのプロセスができたので、
そのチェックが実質的には意味ないのです。
tomcatの起動時間が「一定の時間をsleep」の時間より長い場合に、
結局tomcatが完全に起動できないまま、apacheが起動され、
そのうちWEBからのアクセスが飛んできたら
障害が発生するリスクが生み出したわけです。
【解決】
解決方法自体がそんなに難しくなくて、
WEBアプリに生存チェック用jspを用意して
tomcatのプロセスチェックがOKでたら、
さらにWEBアプリの生存チェックまでちゃんと行えば
今回の問題が解決できます。
0 件のコメント:
コメントを投稿