是什么杀死了我的 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 确实遵循了,但我已经证明那是在频道死亡几分钟后。

这为以后创建的有趣场景是,当队列管理器重新启动时,发出了一个错误,指出通道已经在运行,但通道作业看起来与正常情况完全一样,在日志中显示"通道正在启动",并且确实运行良好。

任何关于可能涉及什么外力或是否有超时的建议将不胜感激。

这有几个可能的原因。 该通道显示为出站通道,当 QMgr 关闭时,它可能处于阻止网络调用中。或者,它可以在批处理的中间并在另一侧等待响应。如果另一端暂停或连接断开,则通道在等待响应时可能会挂起。

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

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

调整所有这些因素包括 TCP 保持连接、HBINTDISCINT、通道重试参数和采用 MCA 参数。

相关内容

  • 没有找到相关文章

最新更新