【发布时间】:2014-08-30 10:36:18
【问题描述】:
我有一个通过 10 个连接连接到 MQ 的 Java 客户端。这些在 Java 客户端运行期间保持打开状态。对于每个线程,我们创建一条消息,创建一个会话,发送消息并关闭会话。我们正在使用 Spring CachingConnectionFactory 并且 sessionCacheSize 为 100。我们的 MQ 工程团队告诉我们,我们的队列管理器的最大连接数为 500,并且我们已经超过了这个值。 QM.ini 文件有:
maxChannels=500
maxActiveChannels=256
maxHandles=256
我在 MQ 资源管理器中观察到,队列上的打开输出计数保持静态为 10,但是如果我们在 2 个队列之间进行负载平衡,则每个队列为 10,即使我们仍然只有 10 个连接。那么我想知道的是,jms 连接和会话在 MQ 术语中是什么意思?
我确实认为一个连接等同于一个活动通道,一个会话是一个句柄,所以当我们打开(和关闭)的会话数量达到数百或数千时,我们可能超过了句柄,而我们只有10个连接。尽管与此相反,IBM 技术说明“Explanation of connection pool and session pool settings for JMS connection factories”下面的 sn-p 建议最大通道数应大于最大会话数,但我们永远不知道这一点,因为它取决于负载(除非这应该大于sessionCacheSize?)。
每个会话都代表一个到队列管理器的 TCP/IP 连接。 使用这里提到的设置,最多可以有 100 个 TCP/IP 连接。如果您使用的是 WebSphere MQ,那么调优很重要 队列管理器的 MaxChannels 设置,位于 qm.ini 文件中, 到一个大于最大可能数量之和的值 来自连接到队列的每个 JMS 连接工厂的会话 经理。
任何关于如何最好地配置 MQ 的帮助将不胜感激。
【问题讨论】: