我们已经设置了一个相当大的 MSMQ 环境,但今天它却停止了运行。
(在 vSphere 4.0 Update 1 下一切都是虚拟机)
有 8 台 Web 服务器从网络上的客户端接收数据。这些机器都安装了 MSMQ,并简单地将 MSMQ 消息发送到主 MSMQ 服务器。消息目前堆积在出站队列中。这些机器是 Windows 2008 Web 版,具有 2 GB 的 RAM 和 2 个 vCPU。
我们有一个群集 MSMQ 服务器(Windows 群集服务器),它从 8 个 Web 服务器获取消息。队列中的数据量没有限制。硬盘为 50 GB,有 46 GB 的可用空间。这些机器是 Windows 2008 企业版,具有 8 GB 的 RAM 和 4 个 vCPU。群集以前有 2 个 vCPU,但 CPU 负载达到 100%,因此我将 Windows 群集的两个节点都增加到 4 个 vCPU。
有 4 个应用服务器从队列读取消息并处理它们。
通常这一切都运行正常,但今天却不行。
今天早上一切都运行得很慢。8 个 Web 服务器目前显示出站队列中有多达 30 万条消息。集群服务器目前显示队列中有超过一百万条消息(有些低至 20 万条)。
如果我查看 8 个 Web 服务器上的 perfmon,它会显示我平均每秒发送 2 条消息。如果我查看集群上的 perfmon,它会显示每秒大约有 7 条消息进入集群。
每台执行读取的机器都没有收到太多消息。最快的服务每秒收到 10-12 条消息,最慢的服务显示 0 条或 1 条消息。
最近唯一的变化是我们将前端 Web 服务器的数量从 4 台改为 8 台。我们大约在 2 周前就这样做了,没有出现任何问题。周二我们关闭了这些服务器,看看剩下的 4 台服务器能否处理负载。周三我们重新开启了 4 台新机器。
集群上的磁盘显示 IO 非常低且没有排队。
为了安全起见,我已将 PowerPath 更新到最新版本,但这并没有任何帮助。
8 个 Web 服务器位于一个 vLAN 上,集群服务器和应用服务器位于另一个 vLAN 上。vLAN 之间没有防火墙。
并且任何机器上的应用程序或系统日志中都没有任何有用的信息。
答案1
每当有人说他们有超过一百万条消息时,警报器就会响起!消息需要管理内核(分页池)内存。如果您有如此大量的消息,您可能会耗尽集群服务器上的可用资源。队列中消息数量的最佳数字是零 - 基本上确保您通常能够比消息到达的速度更快地处理消息。
我建议关闭网络服务器并彻底处理积压的消息,然后再重新上线。
参考本博文第4条: http://blogs.msdn.com/johnbreakwell/archive/2006/09/18/insufficient-resources-run-away-run-away.aspx
欢呼 John Breakwell (MSFT)
答案2
我问了我们的一位系统管理员,他说我们的魔力在于最多 4 个 Web 服务器在虚拟机上命中 MSMQ 盒,然后他们转向硬件盒来解决。还可以尝试数据包捕获以查看发生了什么。身份验证中是否也有很多内容要转到 AD?由于 MSMQ 非常繁忙,因此您需要限制网络路径和可能的身份验证路径。
HTH,查克。
答案3
参考您关于缺乏远程管理的评论,是的,MSMQ 和 perf 计数器的情况并不好。对于关注该主题并想知道哪些操作系统组合有效的人来说,请查看 Motley Queue 博客:
MSMQ 4.0 性能计数器和 NetNameForPerfCounters 注册表项 http://blogs.msdn.com/motleyqueue/archive/2007/12/14/msmq-4-0-performance-counters-and-the-netnameforperfcounters-registry-key.aspx
欢呼 John Breakwell (MSFT)