IBM Support

NFX6155: Exception while writing to an external MQ Queue - causing a channel connection leak.

Troubleshooting


Problem

NFX6155: Exception while writing to an external MQ Queue - causing a channel connection leak.

Symptom

A MQ channel connection leak is observed when JMS Session pooling is enabled and if the MQ Queue usage is as follows:
The service configured to use the MQ Queue is kept idle for a few hours and then messages are put again.
Error Message

2009-Feb-18 05:02:58 880;ERROR ;Thread-15_EDITCE; ;Exception while processing message for Service: EDI_TCE ; IntegrationAdapter ; Contact:<Email_Address>@Company.com
2009-Feb-18 05:02:58 881;ERROR ;Thread-15_EDITCE;javax.jms.JMSException;[1234954978880] javax.jms.JMSException ; IntegrationAdapter ; Contact:<Email_Address>@Company.com
2009-Feb-18 05:02:58 881;ERRORDTL;Thread-15_EDITCE;javax.jms.JMSException;[1234954978880]
<Errors>
<Error ErrorCode="javax.jms.JMSException"

<Attribute Name="ErrorCode" Value="javax.jms.JMSException"/>
<Attribute Name="ErrorDescription" Value="Error description not available"/>
<Error ErrorCode="javax.jms.JMSException" ErrorDescription="" ErrorRelatedMoreInfo="MQJMS2005: failed to create MQQueueManager for 'Qmanagername:'Qmanagername">
<Stack>javax.jms.JMSException: MQJMS2005: failed to create MQQueueManager for 'Qmanagername:'Qmanagername'

Resolving The Problem

The resolution is to disable JMS session pooling. This can be achieved by setting the following property in $YFS_HOME/resources/yfs.properties

yfs.jms.session.disable.pooling=Y

This property is commented out in yfs.properties file. By default the property is set to N.

The reason why a channel connection leak is observed only when JMS Session pooling is enabled and the MQ Queue usage is as mentioned below-

In the MCF solution when JMS Session pooling is enabled a session pool is maintained. Sessions [one per connection/transaction] that are created are cached using the KeyedPoolableObjectFactory implementation [pool/factory implementation from Apache]. The factory implementation provides different parameters to control the eviction of idle sessions which should help in releasing the open channels in case of idle session(s).

The two parameters of consequence here are:
  • timeBetweenEvictionRunsMillis indicates how long the eviction thread should sleep before "runs" of examining idle objects. When non-positive, no eviction thread will be launched. The default setting for this parameter is -1 (i.e., by default, idle object eviction is disabled).
  • minEvictableIdleTimeMillis specifies the minimum amount of time that an object may sit idle in the pool before it is eligible for eviction due to idle time. When non-positive, no object will be dropped from the pool due to idle time alone. This setting has no effect unless timeBetweenEvictionRunsMillis > 0. The default setting for this parameter is 30 minutes. In our product this is set to 10 minutes.
So, every 10 minutes an idle session is closed by the eviction thread. However we don’t close the corresponding connection associated with this session. As a consequence, when one more session is opened a corresponding channel connection is opened. This causes the channel count to increase.

[{"Product":{"code":"SS6PEW","label":"IBM Sterling Order Management"},"Business Unit":{"code":"BU048","label":"IBM Software"},"Component":"Not Applicable","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All","Edition":"","Line of Business":{"code":"LOB59","label":"Sustainability Software"}}]

Historical Number

NFX6155

Product Synonym

[<p><b>]Escalation ID[</b><p>];00019794;[<p><b>]Fix ID[</b><p>];MCF 8.5 (Aries) GA.;[<p><b>]Severity[</b><p>];Normal

Document Information

Modified date:
16 June 2018

UID

swg21554506