| プロセス突然終了への対応 |
C++APで例外ハンドリングを行わない設定で例外が起きた場合、C++APで例外ハンドリングを行う設定だが想定外の例外(ハンドル対象外の例外)が起きた場合、JavaAPでJavaVM自身を含むネイティブ部分で例外した場合に本エラーとなります。簡単に言えば、アプリケーションプロセス中で障害を検出することもなくいきなり終了してしまった場合ということです。killコマンドやタスクマネージャで強制的に終了させた場合もこの扱いになります。
アプリケーションプロセスに代わってTPモニタプロセスがエラー情報の出力やクライアントへのエラー送信などを行います。
イベントログ・シスログの確認
オペレーションの実行中に突然終了が起きた場合、以下のメッセージが出力されます。
OTXM:<システム名>::<プロセスID>: W:13:TPS15-01107 Process abnormal end. PID=[<プロセスID>], class[<プロセスグループ名>], ped[<アプリケーショングループ名>.ped]
|
TPS15-01217 Get SIGCHLD. pid=<プロセスID>,exit=<プロセス終了コード>, termsig=<シグナル番号>, …
|
この章では、WebOTXの運用を行なうためのコマンドやWebOTX運用ツールを用いたシステムの運用管理方法について、また障害解析について詳細な説明します。
イベントログ(アプリケーション、システム)・シスログ
APログ:
${INSTANCE_ROOT}/logs/tpsystem/<アプリケーショングループ名>/<プロセスグループ名>/save/<プロセスグループ名>.<数字>.<PID>.log
システムトレース:
${INSTANCE_ROOT}/logs/tpsystem/<アプリケーショングループ名>/<プロセスグループ名>/save/<プロセスグループ名>_sys.<数字>.<PID>.log
${INSTANCE_ROOT}/config/tpsystem/history.act (sav)
${INSTANCE_ROOT}/config/tpsystem/sysmsg.trc (sav)
${INSTANCE_ROOT}/logs/server.log
${INSTANCE_ROOT}/logs/webotx_agent.log
${INSTANCE_ROOT}/logs/tpsystem/webotx_tpmmgr.log
イベントジャーナル(採取方法は「TPモニタの運用操作 2.39 障害解析」を参照してください)
ワトソンログ (Windows)
core (UNIX)
${AS_INSTALL}/Trnsv/hs_err_pid<プロセスID>.log (Java)
実際にこの現象が発生してしまった場合の復旧方法について説明します。
プロセスグループの再起動
通常はプロセス再起動されるので特に対処する必要がないのですが、再起動回数を越えてしまうと、プロセスグループが停止状態になってしまいます。その場合はプロセスグループの起動が必要です。
この問題を予防するための対策については以下の方法があります。
Windowsの場合
ワトソンログに障害情報が残っていないか確認してください。
/opt/WebOTX/Trnsvディレクトリにcoreが出力されていないか確認してください。Coreが出力されている場合は、デバッガを使用して解析します。以下に、gdbを使用して確認する方法を示します。
/opt/WebOTX/Trnsvディレクトリにhs_err_pid<プロセスID>.logが出力されていないか確認してください。hs_err_pid<プロセスID>.logにはスタックが出力されています。スタックの一番上のメソッドが明らかにJavaのメソッドである場合はJavaVMの担当部署に問い合わせてください。
COBOLの実装仕様により十進例外が発生するとプロセス終了となるようです。該当例外が起きていないか調査してください。
history.actに出力されるTPS15-01217のプロセス終了メッセージには、プロセス終了コードやシグナル番号が出ており、終了理由が推測できる場合があります。exit()された場合には、exit=に続く部分にexitコードが入ります。exit() されていない場合には、Windowsでは例外コードがexit=に続く部分に入ります。UNIXでは、シグナルが発生した場合にはtermsig=に続く部分に該当シグナル番号が入ります。
Windowsでは例外発生時のOS側挙動を設定できるようになっています。
よく、例外発生のダイアログが画面に出力されることがありますが、このダイアログは例外を起こしたプロセスの処理の延長で出しているので、OKを押してダイアログを閉じるまでは例外プロセスはまだ終了していないことになります。終了すればWebOTX側の機能で再起動しますが、無人運転状態ではOKを押す人がいないためにプロセスがいつまでも終了直前のまま残ってしまい、サービスが継続できない状況となってしまいます。そこで、例外発生時のOS側挙動としてはダイアログを出さずに自動でワトソンログに出力することを推奨します。
但し、この設定はマシン一意なので他プロダクトの都合や運用手順と調整する必要があるかもしれません。