一、问题现象描述
那是某年某日某日下午4:30 中间件工程师收到现场工程师电话反馈说运营商系统的MQ消息中间件这几天持续发生问题,问题定位不明。问题现象是应用程序发送消息给Websphere MQ消息中间件返回异常,导致消息发送不出去。最后还是现场工程师通过将应用程序断开MQ的异常连接,才恢复正常。
二、系统环境信息
MQ
运行环境信息,如下表所示
三、问题原因分析
通过现场工程师反馈当问题发生时,他们检查过Webpshere MQ的服务健康运行良好,问题时间点内MQ队列通道状态都是运行状态,队列深度也没有出现消息积压的情况。基于现场工程师反馈的情况,我们让现场工程师提取问题发生点的发送方应用日志与接收方的MQ相关的日志过来,并对日志做如下分析。
1、
应用连接MQ队列通道异常
应用日志分析情况
DEBUG] [2017-12-13 14:14:33,657] [SocketMsgSndrThread] [com.boco.gcp.common.msgsrvis.srvis.SocketCollectorSrvis] - [向客户端[XX.XX.XX.XX:9997/gcp_alarm]发送数据:
IntVersion:1.0
AlarmUniqueId:-6806507528009776145
********************************中间部分信息省略*********************************
NmsAlarmId:
AlarmTitle:[alarmdata][][告警发送失败]
ProbableCauseTxt:采集出故障或者北向接口故障
AlarmText:告警发送MQ失败,异常信息为
com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2009
at com.ibm.mq.MQQueue.put(MQQueue.java:1518)
at com.boco.gdau.channel.remote.QueueChannel.writeData(QueueChannel.java:341)
at com.boco.gcp.north.sender.NorthMQSender.send(NorthMQSender.java:62)
at com.boco.gcp.north.NorthSendThread.sendObject(NorthSendThread.java:134)
at com.boco.gcp.north.NorthSendThread.dispose(NorthSendThread.java:51)
at com.boco.gcp.util.thread.ControllThread.run(ControllThread.java:40)
at java.lang.Thread.run(Thread.java:662)
MQ
日志分析情况
----- amqccita.c : 3694 -------------------------------------------------------
12/13/2017 02:11:27 PM - Process(5466.2777238) User(mqm) Program(amqrmppa)
Host(ahjzgz-149) Installation(Installation1)
VRMF(7.5.0.0) QMgr(WNMS7_QM)
AMQ9209: Connection to host '10.243.64.73' for channel 'CH1' closed.
EXPLANATION:
An error occurred receiving data from 'XX.XX.XX.XX' over TCP/IP. The
connection to the remote host has unexpectedly terminated.
The channel name is 'CH1'; in some cases it cannot be determined and so is
----- amqccita.c : 3694 -------------------------------------------------------
12/13/2017 02:16:57 PM - Process(5772.2752596) User(mqm) Program(amqrmppa)
Host(ahjzgz-149) Installation(Installation1)
VRMF(7.5.0.0) QMgr(WNMS7_QM)
AMQ9209: Connection to host 'XX.XX.XX.XX' for channel 'CH1' closed.
EXPLANATION:
An error occurred receiving data from '10.24
XX.XX.XX.XX' over TCP/IP. The
connection to the remote host has unexpectedly terminated.
The channel name is 'CH1'; in some cases it cannot be determined and so is
原因分析:
以上这段应用日志是截取于应用主机在问题时间点内的日志,从日志角度分析来看应用程序(发送方)向远程MQ(接收方)投放消息的时候,远程MQ通道与发送方应用连接失败,其报错信息很明显
”
com.ibm.mq.MQException: MQJE001: Completion Code 2, Reason 2009”。
这个错说明应用发送端到MQ接收端这条socket连接被中断了。因而导致发送方的消息发送不出去。同时又结合同一时间点的
MQ
的日志来看,远程主机发消息数据给
MQ
的
CH1
通道时,它与
MQ
的连接被异常终止,提示信息“
An error occurred receiving data from 'xx.xx.xx.xx' over TCP/IP. The connection to the remote host has unexpectedly terminated.
”,所以应用消息发送失败。其原因可能存在网络或是应用程序主动发起连接断开。但从表面日志是无法分析出来,需要通过网络抓包方式进行分析。
2
、
MQ
版本风险
12/10/2017 08:21:48 AM - Process(5146.4) User(mqm) Program(amqzmur0)
Host(ahjzgz-149) Installation(Installation1)
VRMF(7.5.0.0) QMgr(WNMS7_QM)
AMQ6287: WebSphere MQ V7.5.0.0 (p000-L120605).
EXPLANATION:
WebSphere MQ system information:
Host Info :- Linux 2.6.32-279.el6.x86_64 (MQ Linux (x86-64 platform)
64-bit)
Installation :- /opt/mqm (Installation1)
Version :- 7.5.0.0 (p000-L120605)
原因分析:
当前WebSphere MQ软件版本只安装BASE版本为V7.5.0.0,随时会触碰到BUG风险,建议将其版本升级到最新补丁v7.5.0.8版本。
四、问题总结
1、通过以上分析发现应用程序与MQ通道之间的连接是被异常中断开的,但从日志中无法分析到否是应用程序主动断开MQ连接,还是网络中断了应用程序与MQ之间的连接。因此介于这种情况建议在故障时间点内通过网络抓包方式对发送方应用程序与接收方MQ主机之间网络进程抓包分析。
2、WebSphere MQ软件只安装了BASE版本,随时会触碰到BUG风险。为了降低因版本问题带来的风险,建议将其版本升级到最新补丁v7.5.0.8版本。
五、优化建议
针对本次问题,我们认为可以从以下两个方面进行调整,建议如下:
1、
通过分析发现应用程序与MQ通道之间的连接是被异常中断开的,但从日志中无法分析到是网络还是应用程序主动发现连接断开。建议在故障时间点内对发送方应用与接收方MQ主机之间网络进程抓包分析。
2、
WebSphere MQ软件补丁从v7.5.0.0升级到v7.5.0.8。
补丁下载地址:
升级方案: