5.3.2 アプリケーションプログラム障害の対策
UAPに障害が起こった場合,OpenTP1はUAP単位の回復処理(部分回復)をして,システム全体に影響がないようにします。UAPに障害が起こった場合の処置について説明します。
- 〈この項の構成〉
(1) システム定義が間違っている場合の処置
システム定義に適切でない値が設定されている場合は,OpenTP1はエラーメッセージを出力して該当するUAPを停止させます。この場合は,システム定義を修正してUAPを再び開始させてください。
メモリ容量が不足したことが原因でUAPを開始できない場合は,必要ないUAPのプロセスを停止させるか,または不要なファイルを削除してからOpenTP1を再開始させてください。
(2) プログラムがループした場合の処置
UAPが終了できなかったり,サービス要求の結果が戻ってこなかったりした場合に備えて,OpenTP1は次に示す時間を監視しています。
-
トランザクション経過時間の監視
トランザクションの開始から終了までの経過時間を監視します。トランザクション経過時間を超えると,OpenTP1は該当するUAPプロセスを強制的に終了させて,トランザクションをロールバックさせます。経過時間を監視するのはトランザクションの処理にだけ有効です。経過時間に0を指定した場合は,時間監視をしません。
-
RPC応答時間監視
サーバUAPにサービスを要求してから応答が返るまでの時間を監視します。指定した経過時間を超えた場合,サービスを要求した関数はエラーリターンします。トランザクションの処理の場合は,同期点処理でロールバックします。応答待ち時間に0を指定したときは,応答が返るまで待ち続けます。
-
CPU時間の監視
トランザクション処理を開始してから同期点を取得するまでに,トランザクションブランチが使うCPU時間を監視します。指定した時間を過ぎてもトランザクションが完了しない場合は,該当するトランザクションブランチを終了させて,トランザクションをロールバックさせます。
(3) UAPのリンケージの不良で異常終了する場合の処置
OSがHP-UXの場合,リンケージ時のバインドモードには必ず"immediate"を指定してください。UAPを"immediate"以外のバインドモードで作成した場合,UAPが異常終了する場合があります。作成したUAPのバインドモードが"immediate"かどうかは,OSのchatrコマンドで確認してください。
(4) 異常終了したUAPの部分回復処理の場合の処置
UAPが異常終了した場合,OpenTP1はUAPの部分回復処理をします。UAPの部分回復には,次のものがあります。
(a) UAPプロセスの再起動および閉塞処理
-
SPPが異常終了した場合
サービスグループを閉塞するか,またはプロセスを再起動するかをユーザサービス定義に指定します。ただし,ユーザサービス定義の連続異常終了限界経過時間に指定した時間内に3回異常終了すると,OpenTP1はSPPを強制的に閉塞します。閉塞されたSPPにサービスを要求しても,エラーリターンします。
-
MHPが異常終了した場合
アプリケーションまたはサービスを閉塞するか,またはプロセスを再起動するかをアプリケーション属性定義に指定します。MHPが閉塞された場合,そのMHPに対してメッセージ送信されると,ERREVT2のMCFイベントが通知されます。
-
SUPが異常終了した場合
異常終了したときにプロセスを再起動するかどうかは,ユーザサービス定義のauto_restartオペランドの指定に従います。
(b) トランザクションの部分回復処理
異常終了したUAPがトランザクション処理中の場合は,トランザクション部分回復をします。
UAPで障害が起こった場合,トランザクション内のUAPプロセスが異常終了したことをOpenTP1が検知して,トランザクション回復サービスは該当するトランザクションを回復して,決着させます。このとき,トランザクションのプロセスの回復処理を並行させて,効率を上げることができます。並行させて回復するプロセスの数は,トランザクションサービス定義に指定しておきます。
回復依頼をスケジュールしているときにシステムが使用する領域が不足してトランザクションを回復できない場合があります。これを防ぐため,OpenTP1は一定間隔で回復していないトランザクションを検索して,再び回復する処理をします。
(5) UAPのデッドロックが起こった場合の処置
複数のUAPから同じ資源にアクセスすると,デッドロックが起こる場合があります。OpenTP1がデッドロックを検知すると,UAPのデッドロックプライオリティを比較して,優先度が低い方のUAPの関数をエラーリターンさせます。
デッドロック時のOpenTP1の処置については,「3.9.1(5) デッドロックの対処方法」を参照してください。