请高手赐教,MQ队列管理器异常挂起!

sjz64472418 2012-10-23 08:26:02
问题描述:客户端大并发连接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的用处,是否可以不提交直接断开连接和关闭?
...全文
1458 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sjz64472418 2012-11-20
目前这个问题这么处理了,针对资源不足的情况,在MQ7.0.0上打了补丁,再次压力测试倒是没有发现挂起的现象。 补丁下载地址:http://www-01.ibm.com/support/docview.wss?uid=swg24030108 至于多线程访问MQ队列管理器,还在继续研究。 目前使用阻塞获取消息的方式处理着,总感觉太慢,想从两个方向解决这个问题: 一、使用MQ集群方式 二、获取消息使用多线程并发获取,多线程访问队列管理器先从mq取消息放入阻塞队列中,然后后面的逻辑再通过消费线程去阻塞队列中获取处理。不知道有没有人,有好的方案和可以借鉴的代码贴出来参考参考!
回复
tomorrow_hello 2012-11-12
LZ 记得给分哈...
回复
tomorrow_hello 2012-11-12
Java 中的多线程程序 Java™ 运行时环境是继承性多线程的。WebSphere® MQ classes for Java 允许在多个线程之间共享队列管理器对象,但确保对目标队列管理器的所有访问都是同步的。 Java 中很难避免多线程程序。请考虑一个连接到队列管理器的简单程序,并在启动时打开队列。该程序在屏幕上显示单个按钮。当用户单击该按钮时,程序从队列中取出一条消息。 Java 运行时环境是继承性多线程的。因此,应用程序的初始化将在一个线程中进行,作为响应按钮按下而执行的代码在另一个线程中进行(用户接口线程)。 WebSphere MQ classes for Java 放松了此约束,允许队列管理器对象及其关联的队列、主题和进程对象能够在多线程之间共享。 对于给定的连接(MQQueueManager 对象实例)而言,WebSphere MQ classes for Java 的实现确保了所有对目标 WebSphere MQ 队列管理器的访问都是同步的。阻止了要发出对队列管理器的调用的线程,直到该连接进程中的所有其他调用都完成。如 果要从程序内的多个线程同时访问同一个队列管理器,应为需要同时访问的每个线程都创建一个新的 MQQueueManager 对象。(这等同于为每个线程发出一个单独的 MQCONN 调用。)
回复
tomorrow_hello 2012-11-12
楼主解决没? 我最近也碰到类似问题了...看了帮助文档后,队列管理器对象是支持多线程访问的,但是是同步的 。估计要每个线程都要创建属于自己的队列管理器
回复
QQ99902 2012-10-29
学习一下。参观参观。
回复
jxsrzrj 2012-10-28
谢谢上传啊!
回复
相关推荐
发帖
WebSphere
创建于2007-08-27

2608

社区成员

WebSphere 是 IBM 的软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具。
申请成为版主
帖子事件
创建了帖子
2012-10-23 08:26
社区公告
暂无公告