APアボートへの対応

事象説明

    WebOTX ではJava のオペレーション実行中に起きた例外についてはそれを捕捉してプロセス終了します。捕捉した場合は内部的にTPSAbort(-1)というプロセス終了のAPI を発行してプロセス終了します。その際別のスレッドで実行中のオペレーションは完了を待ち合わせます。本エラーが起きるとクライアントにCORBA::UNKNOWN(3926)が返ります。

    またサーバAP のトレースには例外捕捉時のスタックトレースを出力します。なお、サーバAP がオペレーション中で自らTPSAbort(-1)を呼び出した場合も本エラーとなりますが、その場合はスタックトレースを出力しません。

状況の確認方法

    イベントログ・syslogの確認

      アボートによりプロセス終了した場合、イベントログ・syslogに以下のメッセージが出力されます。

      OTXM:<システム名>:<プロセスグループ名>:<プロセスID>: E:1:TPS10-13201 ABORT IS PROCESS END. CODE:0
      OTXM:<システム名>::<プロセスID>: W:13:TPS15-01107 Process abnormal end. PID=[<プロセスID>], class[<プロセスグループ名>], ped[<アプリケーショングループ名>.ped]

    AP ログの確認

      アボートによりプロセス終了した場合、AP ログに以下のメッセージが出力されます。

      TPS10-13201 ABORT IS PROCESS END. CODE:0
      
      また、Java ランタイム例外が発生した場合はAP ログにJava のスタックトレースが出力されます。

    history.act の確認

      アボートなどによりプロセスが異常終了した場合、history.act に以下のメッセージが出力されます。

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

問題の検出方法

    イベントログ・syslogの監視

      アボートが発生した場合、イベントログ・syslogが出力されますのでそのメッセージを監視します。

採取資料
対象AP の特定

    イベントログ・syslogに出力される、TPS15-01107 のメッセージから該当のプロセスグループを特定します。

対象オペレーションの特定

    Java ランタイム例外の場合は、AP ログに出力されるスタックトレースから例外が発生したオペレーションを特定します。

対象コードの特定

    Java ランタイム例外が発生した場合はAP ログにスタックトレースが出力されていますので、そこから該当の箇所を特定してください。サーバAP がオペレーション中で自らTPSAbort(-1)を呼び出した場合にはスタックトレースが出力されませんので、コードにてTPSAbort(-1)を呼び出している箇所を探して、原因を特定してください。

復旧方法

    実際にこの現象が発生してしまった場合の復旧方法について説明します。

      プロセスグループの再起動

        通常はプロセス再起動されるので特に対処する必要がないのですが、再起動回数を越えてしまうと、プロセスグループが停止状態になってしまいます。その場合はプロセスグループの起動が必要です。

予防のための対策

    この問題を予防するための対策については以下の方法があります。

      問題のAP の修正

        完全に問題を解決するためにはAP を修正する必要があります。Java ランタイム例外によりアボートしている場合は、該当AP ログに出力されているスタックトレースからアボート箇所の特定を行なうことができます。発生箇所を中心に確認して原因を排除してください。ただし、該当AP で例外を意図的にcatch している場合等、スタックトレースが出力されないこともあります。
        TPSAbort(-1)によりアボートしている場合は呼び出し箇所を特定し、そこに至ってしまった要因を取り去るようにしてください。

      プロセス数の設定

        予防ではありませんが、AP アボートが発生した場合の影響を軽減するためにプロセス数を増やすことが効果的な場合があります。AP アボートが発生すると該当プロセスは再起動しますが、アボートしてから再起動が完了するまでの間の呼び出しはエラーになってしまいます。そこで複数のプロセスを設定することにより、1 つがアボートしても他のプロセスで処理が続行できるように設定できます。プロセスグループの「プロセス制御」タブにある「プロセス数」の設定を見直してください。
        なお、ステートフルの場合はこの対処はあまり効果がありません。
        運用アシスタントの多重度最適化支援機能を利用する場合は、「運用アシスタント」の「多重度最適化支援:予備プロセス数」を1以上に設定してください。
        運用アシスタント機能で多重度が過剰と判断されても予備プロセス数以下には減らされません。詳細は [ ドメイン構築・基本設定ガイド > 7. WebOTXの内部サービス > 7.1. TPシステム > 7.1.13. 運用アシスタント > 7.1.13.2. 多重度の最適化支援 ] を参照してください。

      再起動回数の設定

        アボートした場合のプロセスの再起動回数について設定します。TPシステムの「上限設定」タブにある「プロセス障害時の再起動回数」の設定を見直してください。
        また、一定時間経過した場合に再起動回数をリセットさせることができます。TPシステムの「上限設定」タブにある「プロセスを正常と仮定する間隔」の設定を見直してください。


関連情報