请高手赐教,MQ队列管理器异常挂起!
问题描述:客户端大并发连接MQ队列管理器,往队列中放置消息的过程中,导致MQ队列管理器挂掉了。
客户端异常:
Caused by: com.ibm.mq.MQException MQJE001: Completion Code '2', Reason '2059'.
Caused by: com.ibm.mq.jmqi.JmqiException CC=2;RC=2059;AMQ9524: Remote queue manager unavailable
MQ服务端:
队列管理器Qm1异常关闭了
服务端错误日志定位:
/var/mqm/qmgrs/Qm1/errors/AMQERR01.LOG
--------------------------------------
10/23/2012 06:15:47 PM - Process(4089.634) User(mqm) Program(runmqlsr)
AMQ9508: Program cannot connect to the queue manager.
EXPLANATION:
The connection attempt to queue manager 'Qm1' failed with reason code 2059.
ACTION:
Ensure that the queue manager is available and operational.
----- amqrmsaa.c : 535 --------------------------------------------------------
10/23/2012 06:15:47 PM - Process(4089.634) User(mqm) Program(runmqlsr)
AMQ9999: Channel program ended abnormally.
--------------------------------------
/var/mqm/errors/AMQ6273.0.FDC
----------------------------------------------------------------------------
| Probe Description :- AMQ6119: An internal WebSphere MQ error has occurred |
| ('28 - No space left on device' from semget.) |
| FDCSequenceNumber :- 0 |
| Arith1 :- 28 1c |
| Comment1 :- '28 - No space left on device' from semget.
----------------------------------------------------------------------------
/var/mqm/errors/AMQERR01.LOG
--------------------------------------
10/23/2012 05:36:56 PM - Process(4029.1) User(mqm) Program(amqzxma0)
AMQ6119: An internal WebSphere MQ error has occurred ('28 - No space left on
device' from semget.)
EXPLANATION:
MQ detected an unexpected error when calling the operating system. The MQ error
recording routine has been called.
ACTION:
Use the standard facilities supplied with your system to record the problem
identifier and to save any generated output files. Use either the WMQ Support
site: http://www.ibm.com/software/integration/wmq/support/, or IBM Support
Assistant (ISA): http://www.ibm.com/software/support/isa/, to see whether a
solution is already available. If you are unable to find a match, contact your
IBM support center. Do not discard these files until the problem has been
resolved.
--------------------------------------
问题分析:
从客户端日志看出是由于队列管理器无法连接导致,查看队列管理器挂掉了。检查MQ错误日志看出由于服务器通道异常关闭导致,查看跟客户端代码有关的错误日志,发现没有足够的资源。
MQ通道设置:(应该不存在通道数太少导致通道不够用的情况)
CHANNELs:
MaxChannels=500
MaxActiveChannels=500
猜想:
MQ安装和配置没什么问题,因为在小并发发送时,是没有问题的。
怀疑是客户端代码存在问题,具体是哪儿有问题不太清楚。因为是公司代码,不方便贴出来。
疑问:
1.MQPoolToken token = MQEnvironment.addConnectionPoolToken();这个的具体含义和影响?
2.多线程可否对同一个队列管理器进行同时操作,往相同的队列中放置不同的消息,即是否需要做同步处理?
3.队列管理器commit的用处,是否可以不提交直接断开连接和关闭?