您没有提及 WAS 或 MQ 的特定版本,并且特定版本可能存在会改变行为的已知问题,但一般来说它应该按如下所述工作。
IBM 有一个很好的技术说明“WebSphere Application Server V7 和 V8 以及 WebSphere MQ V7(及更高版本)之间的 TCP/IP 连接使用说明”其中详细介绍了这个主题。
你没有提到你有SVRCONN频道的SHARECNV
设置为,如下所示,这将影响观察到的通道实例的数量,我将假设计算的默认值为 10。
请注意,下面的引用块来自技术说明
- 我们已经设定了最大服务器会话数对于行为规范
40
对于每个节点
上面的链接指出:
最大会话数 = 最大服务器会话数 + 1
最大对话数 =40 + 1
= 41
该链接还指出:
TCP/IP 最大数量通道实例= 最大会话数 / 正在使用的通道的 SHARECNV
TCP/IP 最大数量通道实例 = 41 / 10
= 5
(四舍五入到最近的连接)
- 最大连接数在连接工厂中
40
对于每个节点
- 会话池中的最大会话数连接工厂到
10
.
最大会话数 = 连接池最大连接数 + (连接池最大连接数 * 会话池最大连接数)
最大对话数 =40 + (40 * 10)
= 440
TCP/IP 通道实例的最大数量 = 最大会话数 /SHARECNV
对于正在使用的通道
TCP/IP 通道实例的最大数量 =440 / 10
= 44
如果您的 MQ SVRCONN 通道的SHARECNV
被设置为10
,那么基于连接到单独通道的每个节点,每个通道的通道实例不应超过 49 个。
如果您达到 200 个通道实例,我会怀疑您的SHARECNV
小于 10。如果为 1,WAS 将尝试创建的通道实例的最大数量将达到481
这将受到限制MAXINST
的通道到200
.
当应用程序完成 JMS 连接并将其关闭后,它就会从活动池移至空闲池,以供重用。连接池属性未使用超时定义 JMS 连接在断开连接之前将在空闲池中保留多长时间。该属性的默认值为 1800 秒,即 30 分钟。
从 WebSphere MQ 消息传递提供程序连接工厂创建的每个 JMS 连接都有一个关联的 JMS 会话池,其工作方式与连接池相同。可以从单个 JMS 连接创建的 JMS 会话的最大数量由连接工厂会话池属性最大连接数确定。该属性的默认值为 10。
首次创建 JMS 会话时开始对话,并且将保持活动状态,直到 JMS 会话关闭,因为它在空闲池中保留的时间超过了会话池的未使用超时属性的值。
当您的应用程序在 onMessage 中关闭会话和连接时,连接将移至空闲池以供重用,并且会话将移至空闲池以供重用,直到达到相应的超时后,MQ Channel 实例才会关闭。
如果您想将最大通道数保持在 200 以下,那么您可以调整您的会话池最大连接数)到 1,与您的激活规范和 SHARECNV(1) 相结合,最多可容纳 121 个通道实例。
您还可以增加通道的 SHARECNV 值,这将导致通道实例除以该数字。
您的连接或会话可能没有正确关闭,并且存在“泄漏”。