ネイティブ例外への対応

事象説明

    例外ハンドリングをする設定で不正アドレス参照などが発生すると本エラーとなります。本エラーが起きるとクライアントにはCORBA::UNKNOWN(3923)のエラーが返ります。該当のプロセスは例外の起きたスレッドを除く残りのスレッドで実行を継続します。残りのスレッドが0になった場合はプロセス終了します。

状況の確認方法

    イベントログ・syslogの確認

      ネイティブ例外の発生をWebOTXで検出した場合、イベントログ・syslogに以下のメッセージが出力されます。

      OTXM:<システム名>:<プロセスグループ名>:<プロセスID>: E:200:TPS10-04401 EXCEPTION OCCURED. CODE:<例外コード(Windows),・シグナル番号(UNIX)> <アプリケーショングループ名> <プロセスグループ名> <プロセスID>
      

    APログの確認

      ネイティブ例外の発生をWebOTXで検出した場合、APログに以下のメッセージが出力されます。

      Error: Exception occurred. repositoryID=<リポジトリID> operation=<オペレーション名>
      

問題の検出方法

    イベントログ・syslogの監視

      TPS10-04401のメッセージを監視することで検出可能です。

採取資料
対象APの特定

    TPS10-04401のメッセージから特定します。

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

    通常の方法では特定できません。もし再現可能なら特定する方法があります。 [ 原因不明時の調査方法 ] を参照してください。

復旧方法

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

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

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

      オペレーションの閉塞解除

        オペレーション実行中にアプリケーション例外などが発生した場合、設定によってはオペレーションが閉塞してしまいます。閉塞してしまうとオペレーションの状態が停止状態となりアプリケーショングループを再起動するまで該当オペレーションを呼出すことができなくなります。その場合はオペレーションを再起動する必要があります。

予防のための対策

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

      問題のAPの修正

        完全に問題を解決するためにはAPを修正する必要があります。例外コードを踏まえて、対象のオペレーションのコードを確認してください。

      プロセス数の設定

        予防ではありませんが、ネイティブ例外が発生した場合の影響を軽減するためにプロセス数を増やすことが効果的な場合があります。ネイティブ例外は発生し、全スレッドが使用不能になると該当プロセスは再起動しますが、再起動が完了するまでの間の呼び出しはエラーになってしまいます。そこで複数のプロセスを設定することにより、再起動処理中も他のプロセスで処理が続行できるように設定できます。プロセスグループの「プロセス制御」タブにある「プロセス数」の設定を見直してください。なお、ステートフルの場合はこの対処はあまり効果がありません。

      再起動回数の設定

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

原因不明時の調査方法

    もし再現性がある場合は、TPシステムの設定の「WebOTXで例外処理を行う」のチェックをOFFにして再現させてください。出力されたcore(UNIX)ないしワトソンログ(Windows)で発生箇所特定してください。coreファイルは、${INSTANCE_ROOT}/logs/tpsystem ディレクトリ直下に出力されます。なお、例外ハンドルを外して再現させた場合、障害の見え方が変わり、[ プロセスの突然終了への対応 ]に説明する状況で起きることになります。

    「WebOTXで例外処理を行う」のチェックをOFFにすると、以下の影響がありますので、注意が必要です。


関連情報