存储中间件-MQ常见问题解决方法FAQ 联系客服

发布时间 : 星期日 文章存储中间件-MQ常见问题解决方法FAQ更新完毕开始阅读96e45482a58da0116d174921

IBM Websphere MQ FAQ

Last Release: 2006-1-2

这里整理了IBM Websphere MQ的一些常见错误和解决方法,当发现MQ错误而一时无法解决时,可以参阅这里的解决方法,可能有所启发;多个原因可能会引发同一错误现象,为此对某种错误现象列出了好几种解决方法,工程人员需要根据实际情况用相应的解决方法处理。

引发MQ错误的原因有很多,这里也无法一一罗列出来,对于无法在这里找到解决方法的错误,请将错误现象发给我(MSN: sqwen_cn@hotmail.com,邮件: sqwen@eastcom-ca.com, wensq@eastcom.com),我会定期将解决方法整理并添加到这份文档里面。

1. 不能创建MQ队列管理器

错误现象:

javax.jms.JMSException: MQJMS2005: 未能为‘192.168.1.21:' 创建MQQueueManager at

com.ibm.mq.jms.services.ConfigEnvironment.newException(ConfigEnvironment.java:546)

at com.ibm.mq.jms.MQConnection.createQM(MQConnection.java:1450) at com.ibm.mq.jms.MQConnection.createQMNonXA(MQConnection.java:960) at com.ibm.mq.jms.MQTopicConnection.(MQTopicConnection.java:152) at com.ibm.mq.jms.MQTopicConnection.(MQTopicConnection.java:114) at

com.ibm.mq.jms.MQTopicConnectionFactory.createMQTopicConnection(MQTopicConnectionFactory.java:337) at

com.ibm.mq.jms.MQTopicConnectionFactory.createTopicConnection(MQTopicConnectionFactory.java:214)

at ipnet.sqwen.jmstest.JMSSubscriber.subscribe(JMSSubscriber.java:71) at ipnet.sqwen.jmstest.JMSSubscriber.main(JMSSubscriber.java:34)

解决方法:

? CCSID不对,修改相应队列管理器的CCSID与JNDI里面定义的相同;一

般情况下,通过的队列管理器CCSID为1208,做JMS pub/sub的队列管理器CCSID为819。

? 运行mqMonitor脚本中的mc.sh,查看现在的连接数,是否为100;如果

是,则是达到了默认情况下通道的最大连接数,需要优化MQ的配置;具体优化的方法是修改/var/mqm/qmgrs/XXX/qm.ini文件,增加: Channels:

MaxChannels=xxxx MaxActiveChannels=xxxx

xxxx表示需要配置的最大通道数和最大活动通道数,根据实际情况指定,100是默认值,对一般的队列管理器是足够的,对于QM_BASE、QM_DC、QM_TOPIC、QM_PS_FM需要增大为200直至1000,最大值允许为9999。 ? 查看这个连接所用的通道是否存在。

非JNDI方式的通道配置看配置文件,JNDI方式的话,在JMSAdmin下执行命令dis qcf(xxx)或dis tcf(xxx)获取相应的通道名称,获取通道名称后,到runmqsc QM_XXX下dis chl(*)查看对应的通道是否存在;

2. 代理(broker)无响应

错误现象:

使用MQ队列管理器做JMS pub/sub的时候无法成功,报代理无相应的错误(broker has no reponse)。

解决方法:

? 出现此现象的原因是代理(broker)没有启动或代理僵死,解决方法是启动

代理或重启代理:

endmqbrk –m QM_XXX (只用于重启过程中) strmqbrk –m QM_XXX

? 也有可能是broker出现故障,需要重建:

endmqbrk –m QM_XXX dltmqbrk QM_XXX strmqbrk –m QM_XXX

3. 队列深度满

错误现象:

普通的队列管理器报队列深度满的错误

解决方法:

? 增加队列管理器的最大深度,默认队列深度为100000,可以根据需要增加

为1000000或2000000。上 runmqsc QM_XXX

alter ql(Q_XXX) maxdepth(xxxxx) end

4. SYSTEM.JMS.ND.SUBSCRIBER.QUEUE队列深度一直满

错误现象:

系统运行一段时间后,用于JMS pub/sub的队列管理器中的队列SYSTEM.JMS.ND.SUBSCRIBER.QUEUE一直保持在最大深度,即使增加最大队列深度,新增消息也很快使队列积压消息数达到最大深度。

解决方法:

? 这种情况下,再次增加最大深度是没有意义的。需要相关的开发人员改进程

序,在Publish消息之前,设置TimeToLive(单位为毫秒)的值为较小的值(默认TimeToLive=0,即永久存活),使Publish出去的消息只有有限的生命周期,超过TimeToLive设定的时间值将被MQ队列管理器自动删除。

5. 运行/opt/mqm/java/bin/Cleanup出错

错误现象:

$ Cleanup -m QM_TOPIC nondur

5648-C60, 5724-B41, 5655-F10 Copyright IBM Corp. 2002. All Rights Reserved. Websphere MQ classes for Java(tm) Message Service 5.300 Publish/Subscribe 清除实用程序

Exception in thread \java.lang.UnsatisfiedLinkError: no mqjbnd05 in java.library.path

解决方法:

? 修改环境变量LD_LIBRARY_PATH,将/opt/mqm/java/lib加入

LD_LIBRARY_PATH;

LD_LIBRARY_PATH=/opt/mqm/java/lib:$LD_LIBRARY_PATH export LD_LIBRARY_PATH

6. 接收消息出错

错误现象:

/var/mqm/qmgrs/XXX/ errors/ AMQERR01.LOG报如下错误:

----- amqccita.c : 2732 ------------------------------------------------------- 08/29/05 21:32:10

AMQ9208: Error on receive from host gdipnm6 (211.139.136.111).

EXPLANATION:

An error occurred receiving data from gdipnm6 (211.139.136.111) over TCP/IP. This may be due to a communications failure. ACTION:

The return code from the TCP/IP (read) call was 131 (X'83'). Record these values and tell the systems administrator.

解决方法:

? 重启队列管理器。