什么杀了我的MQ频道?

时间:2012-08-06 04:03:07

标签: ibm-midrange ibm-mq

每当我们关闭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)

通常情况下运行没有问题,但是在最后一次,六个通道中有五个正常立即结束,第六个通道在大约75秒后异常结束。

从频道作业的日志中,这两条消息是连续的(即没有干预问题):

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,但这段代码很旧)。

我认为假设通道在队列管理器结束时处理消息是合理的 - 否则为什么在下一个动作之前会经过75秒?似乎* CNTRLD选项有一个隐含的超时,虽然我无法在文档中的任何地方看到这个。无论是那种,还是其他干预的东西。但是什么?

ENDSBS * ALL确实效仿,但事实证明,这是在频道死后几分钟。

此后创建的有趣场景是重新启动队列管理器时,发出了一条错误,说明该频道已在运行,但频道作业显示正常情况,显示日志中的“频道启动”和确实它运行良好。

对于可能涉及的外力或是否超时的任何建议都将非常感激。

1 个答案:

答案 0 :(得分:1)

有几个可能的原因。该通道似乎是一个出站通道,当QMgr关闭时,它可以处于阻塞网络呼叫中。或者,它可以在批处理中间并在另一侧等待响应。如果另一侧暂停或连接断开,则在等待响应时通道可能会挂起。

如果侦听器仍在运行,则入站通道通常很难停止。如果另一方有要发送的消息并且已启用触发,它将立即尝试重新启动该通道。此请求命中启动进程的侦听器。由于QMgr正在关闭,因此通道无法完成其CONNECT,但短时间内正在运行通道进程。

无论是入站还是出站,QMgr最终都会杀死不能自行降级的进程。这应该不是问题,因为通道会协商有序重启,尽管它会在日志中留下一些错误。

调整所有这些因素包括TCP Keepalive,HBINTDISCINT,频道重试参数和采用MCA参数。