MSMQ 接收消息很慢

mrd*_*nny 8 performance msmq

我们有一个相当大的 MSMQ 环境设置,今天决定停止。

(在 vSphere 4.0 Update 1 下一切都是虚拟机)

有 8 个 Web 服务器从网络上的客户端接收数据。这些机器都安装了 MSMQ,只需将 MSMQ 消息发送到主 MSMQ 服务器即可。消息当前堆积在出站队列中。这些机器是带有 2 GB RAM 和 2 个 vCPU 的 Windows 2008 网络版。

我们有一个集群 MSMQ 服务器(Windows 集群服务器),它从 8 个 Web 服务器获取消息。队列中的数据量没有限制。硬盘驱动器为 50 Gigs,并且有 46 Gigs 的可用空间。这些机器是 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 个如何处理负载。星期三,我们重新打开了四台较新的机器。

集群上的磁盘显示非常低的 IO 并且没有排队。

为安全起见,我已将 PowerPath 更新到最新版本,但这并没有任何帮助。

8 个 Web 服务器位于一个 vLAN 上,集群服务器和应用程序服务器位于第二个 vLAN 上。vLAN 之间没有防火墙。

任何机器上的应用程序或系统日志都没有任何用处。

小智 4

每当有人说他们有超过一百万条消息时,警报器就会响起!消息需要管理内核(分页池)内存。如果您有如此大量的消息,您可能会耗尽集群服务器上的可用资源。队列中消息数量的最佳数量为零 - 基本上确保您正常处理消息的速度快于消息到达的速度。

我建议关闭网络服务器并完全处理积压的消息,然后再将它们重新恢复在线状态。

参考此博客文章的第 4 项: http://blogs.msdn.com/johnbreakwell/archive/2006/09/18/insufficient-resources-run-away-run-away.aspx

干杯约翰·布雷克韦尔 (MSFT)