1

iSeries サーバーをシャットダウンするたびに定期的に実行されるプロセスがあります。次のコマンドを実行します (iSeries 固有ですが、MQSC コマンドが何であるかはわかります)。

RCDMQMIMG  OBJ(*ALL) OBJTYPE(*ALL) DSPJRNDTA(*YES)
ENDMQMCSVR MQMNAME(IA001.QUEUE.MANAGER)
ENDMQM     MQMNAME(IA001.QUEUE.MANAGER)
DLYJOB     DLY(120)                    
ENDMQMLSR  MQMNAME(IA001.QUEUE.MANAGER)

通常は問題なく動作しますが、前回は 6 チャンネル中 5 チャンネルが即時に正常終了し、約 75 秒後に 6 チャンネルが異常終了しました。

チャネル ジョブのログから、次の 2 つのメッセージが連続していました (つまり、間に問題はありませんでした)。

23/07/12  08:26:44.033529  LIBMQMCS_R   QMQM        *STMT    QCMD        QSYS        01C8
From module . . . . . . . . :   AMQXEIMX_R                                                  
From procedure  . . . . . . :   xcsSendMessage                                              
Statement . . . . . . . . . :   38                                                          
Message . . . . :   Channel 'IA001.TO.ISPRO' is starting.                                   
Cause . . . . . :   Channel 'IA001.TO.ISPRO' is starting.  Recovery  . . . :                
None.  Technical Description . . . . . . . . :   None.                                    

04/08/12  21:11:28.872098  QWTPITP2     QSYS        061A     *EXT                    *N  
Message . . . . :   Job ended abnormally.                                                   
Cause . . . . . :   A SIGKILL signal was received for the job. The action for               
the signal was to terminate the job.                                                      

ENDMQM は *WAIT を使用してキュー マネージャーが終了するのを待機しないことに注意してください (デフォルトの *CNTRLD が使用されています)。手続きの停止を求めることができた。チャネル ジョブの強制終了は、手動でコードに挿入された 120 秒の遅延内に発生しました (*WAIT を使用する必要があることはわかっていますが、このコードは非常に古いものです)。

おそらく、キュー マネージャーが終了したときにチャネルがメッセージを処理していたと想定するのが妥当だと思います。*CNTRLD オプションには暗黙のタイムアウトがあるようですが、これについてはドキュメントのどこにも記載されていません。それか、他の何かが介入したかのどちらかです。しかし、何?

ENDSBS *ALL が続きましたが、チャネルが停止してから数分後だったことを証明しました。

これが後で作成した興味深いシナリオは、キュー マネージャーが再起動されたときでした。チャネルは既に実行されているというエラーが発行されましたが、チャネル ジョブは通常とまったく同じように表示され、ログに「チャネルの開始」が表示され、実際に実行されています。元気に走っています。

どのような外力が関係している可能性があるか、またはタイムアウトがあるかどうかについての提案は大歓迎です。

4

1 に答える 1

1

これにはいくつかの理由が考えられます。チャネルはアウトバウンド チャネルのように見え、QMgr がシャットダウンされたときにネットワーク呼び出しをブロックしている可能性があります。または、バッチの途中で、反対側で応答を待っている場合もあります。反対側が一時停止されているか、接続が切断されている場合、応答を待っている間にチャネルがハングしたように見えることがあります。

リスナーがまだ実行中の場合、インバウンド チャネルを停止するのは難しいことがよくあります。反対側に送信するメッセージがあり、トリガーが有効になっている場合は、すぐにチャネルの再起動を試みます。このリクエストは、プロセスを開始するリスナーにヒットします。QMgr がシャットダウンしているため、チャネルは完了できませんCONNECTが、短時間チャネル プロセスが実行されています。

インバウンドであろうとアウトバウンドであろうと、QMgr は最終的に、自分でダウンしないプロセスを強制終了します。チャネルは正常な再起動をネゴシエートするため、これは問題にはなりませんが、ログにいくつかのエラーが残ります。

これらすべてを考慮に入れたチューニングには、TCP キープアライブ、HBINTチャネルDISCINT再試行パラメータ、Adopt MCA パラメータが含まれます。

于 2012-08-06T12:41:03.050 に答える