|
Problem |
MQ Manager stops responding to JMS requests.
SystemOut.log:
FreePool E J2CA0046E: Method createManagedConnctionWithMCWrapper caught an
exception during creation of the ManagedConnection for resource
JMS$cftestcf$JMSManagedConnection@1373738090, throwing
ResourceAllocationException. Original exception:
javax.resource.spi.ResourceAdapterInternalException: Failed to create
session
at com.ibm.ejs.jms.JMSCMUtils.mapToResourceException(JMSCMUtils.java:125)
at
com.ibm.ejs.jms.JMSManagedSession.<init>(JMSManagedSession.java:213)
. . .
javax.jms.JMSException: MQJMS2005: failed to create MQQueueManager for
'xldn0384abc:XYZ123'
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.MQException: MQJE001: Completion Code 2, Reason 2009
at
com.ibm.mq.MQManagedConnectionJ11.<init>(MQManagedConnectionJ11.java:172)
at
com.ibm.mq.MQClientManagedConnectionFactoryJ11._createManagedConnection(MQClientManagedConnectionFactoryJ11.java:270)
at
com.ibm.mq.MQClientManagedConnectionFactoryJ11.createManagedConnection(MQClientManagedConnectionFactoryJ11.java:290)
AMQERRO1.log
AMQ9513: Maximum number of channels reached. |
|
Cause |
The maximum number of channels that can be in use
simultaneously has been reached. The number of permitted channels is a
configurable parameter in the queue manager configuration file.
When this application connects to MQ a channel is started on the MQ
side. If the application, for any reason, is unexpectedly disconnected (no
proper disconnection takes place) then the channel will NOT get cleaned up
on the MQ side. It will become 'orphaned' from its original parent
connection. When the application reconnects it will get a new instance of
the channel, so now there will be 2 instances of the channel, the new one
and the old, orphaned instance.
MQ only allows a certain number of channels. If you build up enough
channels you will get the MaxChannels error occurring here.
Channels may also be getting orphaned due to TCP/IP interruptions rather
than an application disconnecting improperly from MQ.
|
|
Solution |
How do we manage these orphaned channels?
If you can get these orphaned channels to clean up you will go a long way
towards avoiding this issue.
Wait for some of the operating channels to close. Retry the operation
when some channels are available.
The answer is TCP/IP KeepAlive.
You must enable KeepAlive at operating system (TCP/IP) level. How this is
done depends entirely on the operating system you are using but your
networking or System Admin people will probably know how to do this.
KeepAlive has a timeout option that is usually set to 2 hours. Recommend
setting this to a much shorter interval, such as 10 minutes. Once this
change has been made the OS will need to be rebooted for this to take
effect.
In addition to enabling KeepAlive at the OS level, MQ must also be
configured to use KeepAlive. This is done by adding the following stanza
to the QM.INI file for this queue manager, as follows:
TCP:
KeepAlive=yes
Once this stanza has been added the queue manager must be restarted for
this to take effect.
Lastly, it is highly recommend changing the MaxChannels value (also in the
QM.INI file) to 3 times what you think may be needed. For instance from
100 to 300 MaxChannel. This will ensure that you have some 'elbow room' in
the event a contingency occurs.
|
|
|
|
|
|
|