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)

通常这运行没有问题,但在最后一次,六个频道中有五个立即正常结束,而第六个频道在大约 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 确实紧随其后,但我已经证明那是在频道死后几分钟。

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

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

4

1 回答 1

1

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

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

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

调整所有这些因素包括 TCP Keepalive、、、HBINT通道DISCINT重试参数和采用 MCA 参数。

于 2012-08-06T12:41:03.050 回答