您没有提及 WAS 或 MQ 的特定版本,并且在特定版本中可能存在会改变行为的已知问题,但通常它应该如下所述工作。
IBM 有一篇不错的技术说明“TCP/IP Connection usage between WebSphere Application Server V7 and V8, and WebSphere MQ V7 (and later) explained”,其中详细介绍了这个主题。
您没有提及您将 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 值,这将导致通道实例除以该数字。
您的连接或会话可能没有正确关闭并且您有“泄漏”。