【问题标题】:One mule app server in cluster polling maximum message from MQ集群中的一个 mule 应用服务器轮询来自 MQ 的最大消息
【发布时间】:2019-12-19 13:12:37
【问题描述】:

我的 mule 应用程序由集群中运行的 2 个节点组成,它侦听 IBM MQ 集群(基本上通过队列管理器连接到 2 个 MQ)。在某些情况下,一个 mule 节点从 MQ 集群中提取或获取超过 80% 的消息,而另一个 mule 节点选择剩余的 20%。这会导致 CPU 性能问题。 我们仔细检查了所有负载平衡是否正确,很少出现 CPU 性能问题。请任何人提供一些想法可能是什么原因。

示例:创建最后一个场景,队列中有 200000 条消息,node2 mule 服务器在几分钟内从队列中提取了 92% 的消息。

【问题讨论】:

  • 另一个问题的答案描述了为什么您会在 1 个或 2 个 mule 服务器上看到更多消息。
  • 只是为了从提供的链接中确定-“我的应用程序将持久消息存储在 MQ 中。一个 mule 流将消息放在队列 ABCD 上,另一个 mule 流从同一个队列 ABCD 获取消息”。那么,您的意思是当消息数 > 200000 或消息大小 > 4MB 时,队列上可能会出现保留锁???
  • 根据我最近 5 个月的分析,我们遇到了 14 次相同的问题,每次都是 mule 服务器节点 2 出现 CPU 使用率警报。节点 1 在今年全年都很好。如果发生队列争用锁,那么我希望它会在两个节点上发生......
  • 我在专门谈论 Mark Taylor 关于为什么分布不均匀的答案。马克来自 IBM。消息不会以 50/50 的比例分别提供给两个服务器,它们将提供给准备好接受新消息的最新消费者。

标签: mule load-balancing ibm-mq cpu-usage mule-esb


【解决方案1】:

此问题现已修复。找到根本原因 - 我们在 MULE_NODE01 上运行的 mule 应用程序读取/写入 WMQ_NODE01,对于节点 2 也是如此。其中一个 mule 节点(比如说 MULE_NODE02)从 linux/windows 文件系统读取并将大量消息发送到其相应的 WMQ_NODE02。现在,它的 IBM MQ 尝试将最大负载推送到其他 WMQ 节点以平衡工作负载。这就是为什么 MULE_NODE01 会从 WMQ_NODE01 读取所有已加载的文件并导致 CPU 使用率警报。

@JoshMc 你的线索对理解这些问题很有帮助,非常感谢你的帮助。

它在集群中的 WMQ 节点试图将最大负载推送到其他 WMQ 节点,看起来这就是 MQ 内部的工作方式。

为了解决这个问题,我们现在将 mule 节点连接到 MQ 网关,而不是进行一对一连接

【讨论】:

    【解决方案2】:

    这可以通过避免由多个侦听器引起的竞态条件来解决。仅将集群中的侦听器配置为主节点。 将消息重新发布到持久 VM 队列。 将逻辑移至可以通过 VM 侦听器触发的另一个流,并让 Mule 集群进行负载平衡。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多