【问题标题】:Websphere MQ using 100% CPU in .NET appWebsphere MQ 在 .NET 应用程序中使用 100% CPU
【发布时间】:2013-01-29 16:35:16
【问题描述】:

我有一个 .NET 应用程序,它使用 WebSphere MQ 作为可靠的发布/订阅中间件,在从服务器向客户端发送后续消息队列时遇到问题。服务器使用来自this library 的 XMSClient 对象,发布一条消息,并在确认交付后,检查是否有新消息并发布该消息,直到没有可发布的消息,此时它等待 30 秒并轮询更多消息要发送。但是,我发现经常发生的情况是,当我有一个消息队列(只有 25 个)时,WebSphere 会突然将 CPU 使用率推到 100%,除非我使用 MQ Explorer 并清除渠道。这可能会导致我的程序出现灾难性问题:有谁知道导致这种情况的原因以及解决方法?

谢谢

【问题讨论】:

  • WMQ 运行多个进程。你能告诉我们哪些进程正在消耗 100% 的 CPU。此外,您使用的 MQTTDotnet 程序集仅适用于客户端。不确定如何从 MQ 服务器端使用它们。
  • 您好,占用 CPU 最多的进程是 System 和 java.exe - 分别约为 56% 和 41%。另外:“您使用的 MQTTDotnet 程序集也仅用于客户端。” - 你能澄清一下这个说法吗?我使用该库中的 MQTTClient 对象作为客户端,使用 XMSClient 对象作为服务器。

标签: c# .net websphere ibm-mq


【解决方案1】:

现在我想我对你的情况有了更好的理解。我相信您正在为您的服务器应用程序使用 XMS.NET 程序集,该程序集将消息发布到使用 this library 开发的 MQTT 客户端应用程序。在某个阶段,MQTT 的 WebSphere MQ 通道进入高 CPU 利用率。

您提到过 System 和 Java.exe 占用大量 CPU。您可以放心地忽略系统的 CPU 使用率。导致 CPU 使用率高的是 Java.exe。似乎在某些时候 MQTT 通道将进入一个消耗高 CPU 的循环。它可能与您的 MQTT 客户端应用程序不断对话。问题也可能出在您的 MQTT 客户端应用程序上。所以我的建议是通过使用其他一些 MQTT 客户端应用程序来隔离问题,看看是否会出现同样的问题。您可以使用 MQ Explorer 附带的 MQTT Client Utility 进行测试。

【讨论】:

  • 谢谢。不过,我一直在进行更多调查,并发现以下内容:1)将 QoS 更改为 QoS0 以实现非持久性可以避免错误:但是,我们想要持久性。 2) 没有正确处理 QoS2 的握手,我按照 IBM 的文档重新安排了它。它更好,但仍然会发生(在快速连续 > 50 条消息之后)。 3)如果我在发送一条消息后暂停 3 秒钟,则问题永远不会发生。 4)当我停止接收(或至少听到)PUBREL 消息以响应我返回的 PUBREC 消息时,问题似乎发生了。
  • 另外,一旦出现问题,所有发送的其余消息都在“Pending”中排队,处于“In Doubt Out”中。
  • 我认为您应该向 IBM 提出 PMR 来解决这个问题。
  • 我已经使用 WebSphere 附带的 IBM MQTT Client 实用程序进行了测试,但没有看到同样的问题。这不是 WebSphere 的问题,我认为这是库的问题。我想知道任何可能导致我看到的问题的已知问题。
  • 没有。我不知道有任何此类问题。
猜你喜欢
  • 1970-01-01
  • 2015-10-29
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 2011-05-29
  • 1970-01-01
  • 2014-05-10
相关资源
最近更新 更多