プロセス突然終了への対応

事象説明

    C++APで例外ハンドリングを行わない設定で例外が起きた場合、C++APで例外ハンドリングを行う設定だが想定外の例外(ハンドル対象外の例外)が起きた場合、JavaAPでJavaVM自身を含むネイティブ部分で例外した場合に本エラーとなります。簡単に言えば、アプリケーションプロセス中で障害を検出することもなくいきなり終了してしまった場合ということです。killコマンドやタスクマネージャで強制的に終了させた場合もこの扱いになります。
    アプリケーションプロセスに代わってTPモニタプロセスがエラー情報の出力やクライアントへのエラー送信などを行います。

状況の確認方法

    イベントログ・シスログの確認

      オペレーションの実行中に突然終了が起きた場合、以下のメッセージが出力されます。

      OTXM:<システム名>::<プロセスID>: W:13:TPS15-01107 Process abnormal end. PID=[<プロセスID>], class[<プロセスグループ名>], ped[<アプリケーショングループ名>.ped]

    history.actの確認

      TPS15-01217 Get SIGCHLD. pid=<プロセスID>,exit=<プロセス終了コード>, termsig=<シグナル番号>, …

      TPS15-01107 Process abnormal end. PID=[<プロセスID>], class[<プロセスグループ名>], ped[<アプリケーショングループ名>.ped]

採取資料

    この章では、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の場合

        ワトソンログに障害情報が残っていないか確認してください。

      unixの場合

        /opt/WebOTX/Trnsvディレクトリにcoreが出力されていないか確認してください。Coreが出力されている場合は、デバッガを使用して解析します。以下に、gdbを使用して確認する方法を示します。

        1. /opt/WebOTX/Trnsvディレクトリに移動します。
          > cd /opt/WebOTX/Trnsv

        2. coreを出力したファイルを確認します。
          > file core

        3. gdbを起動します(THTPPJAVA2がcoreを出力したものとします)。
          > gdb /opt/WebOTX/Trnsv/bin/THTPPJAVA2 core

        4. whereコマンドで、例外が発生したスレッドのスタックを出力します。
          (gdb) where

        5. 出力されたスタックから、例外の発生箇所を特定します。

        6. 発生箇所を中心にコードを確認して原因を排除します。

        開発部隊へ問い合わせを行う場合は次の手順でスタックトレースを採取して送付してください。

        1. /opt/WebOTX/Trnsvディレクトリに移動します。
          > cd /opt/WebOTX/Trnsv

        2. coreを出力したファイルを確認します。
          > file core

        3. scriptコマンドを起動します。
            script で gdb の調査結果を stack_trace.txt に記録します。
          > /usr/bin/script stack_trace.txt

        4. gdbを起動します(THTPPJAVA2がcoreを出力したものとします)。
          > gdb /opt/WebOTX/Trnsv/bin/THTPPJAVA2 core

        5. 全スタックトレースを採取します。
          (gdb) thr apply all bt

        6. gdbを終了します。
          (gdb) quit

        7. scriptを終了します。
          exit を入力しシェルを終了するとカレントディレクトリのstack_trace.txt に gdb の出力結果が記録されます。
          > exit

        Java APの場合

          /opt/WebOTX/Trnsvディレクトリにhs_err_pid<プロセスID>.logが出力されていないか確認してください。hs_err_pid<プロセスID>.logにはスタックが出力されています。スタックの一番上のメソッドが明らかにJavaのメソッドである場合はJavaVMの担当部署に問い合わせてください。

        COBOL APの場合

          COBOLの実装仕様により十進例外が発生するとプロセス終了となるようです。該当例外が起きていないか調査してください。

        その他

          history.actに出力されるTPS15-01217のプロセス終了メッセージには、プロセス終了コードやシグナル番号が出ており、終了理由が推測できる場合があります。exit()された場合には、exit=に続く部分にexitコードが入ります。exit() されていない場合には、Windowsでは例外コードがexit=に続く部分に入ります。UNIXでは、シグナルが発生した場合にはtermsig=に続く部分に該当シグナル番号が入ります。

その他

    Windowsでは例外発生時のOS側挙動を設定できるようになっています。

    よく、例外発生のダイアログが画面に出力されることがありますが、このダイアログは例外を起こしたプロセスの処理の延長で出しているので、OKを押してダイアログを閉じるまでは例外プロセスはまだ終了していないことになります。終了すればWebOTX側の機能で再起動しますが、無人運転状態ではOKを押す人がいないためにプロセスがいつまでも終了直前のまま残ってしまい、サービスが継続できない状況となってしまいます。そこで、例外発生時のOS側挙動としてはダイアログを出さずに自動でワトソンログに出力することを推奨します。

    但し、この設定はマシン一意なので他プロダクトの都合や運用手順と調整する必要があるかもしれません。


関連情報

    ネイティブ例外への対応
    APアボートへの対応

    オペレーション呼び出しでの障害
    サーバアプリケーションの障害
    TPモニタ機能の障害解析

    トラブルシューティング(障害解析)