MSMQ接收消息的速度很慢

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

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

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

我们有一个群集MSMQ服务器(Windows群集服务器),它从8个Web服务器获取消息。 队列中的数据量没有限制。 硬盘是50 Gig,有46 ​​Gig的可用空间。 这些机器是具有8G内存和4个vCPU的Windows 2008企业版。 曾经有2个vCPU但CPU负载达到100%的集群,所以我把Windows集群的两个节点都增加到了4个vCPU。

有4个应用程序服务器从队列中读取消息并处理它们。

通常这一切都完美,但不是今天。

今天早上一切运行非常缓慢。 这8台networking服务器目前在出站队列中显示多达300k条消息。 群集服务器当前在队列中显示了超过一百万条消息(有些低至200k)。

如果我在8个Web服务器上查看perfmon,它会显示我平均每秒发送2个消息。 如果我查看群集上的perfmon,则会显示每秒大约7条消息进入群集。

正在读取的机器每个都没有收到许多消息。 最快的服务是每秒收到10-12条消息,最慢的是显示0或1。

最近唯一的变化是我们将前端Web服务器的数量从4个更改为8个。大约两个星期前我们做了这个没有问题。 星期二我们给他们打电话,看看剩下的4个怎么处理这个负载。 星期三我们把这四台新机器重新打开了。

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

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

8个Web服务器位于一个vLAN上,Cluster'd服务器和应用程序服务器位于另一个vLAN上。 vLAN之间没有防火墙。

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

每当有人说他们有超过一百万条消息,警报声就会消失! 消息要求pipe理内核(分页池)内存。 如果您拥有如此大量的消息,则可能会耗尽群集服务器上可用的内容。 一个队列中消息的最佳数量是零 – 基本上确保你可以正常处理消息的速度比他们能够到达的要快。

我build议closuresWeb服务器并完全处理消息积压,然后再重新联机。

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

欢呼声John Breakwell(MSFT)

我问了我们的一个系统pipe理员,他说我们的魔法点是4个networking服务器,最多打到虚拟机上的MSMQ盒子,然后移到硬件盒子解决。 也尝试数据包捕获,看看发生了什么。 ADauthentication也有很多吗? 随着MSMQ的传播,你需要限制networkingpath和可能的validationpath。

HTH,Chuck。

引用你对远程pipe理缺乏的评论,是的,MSMQ和perf计数器不是一个好故事。 对于任何人跟随线程,并想知道什么样的操作系统组合工作,然后看看Motley队列博客:

MSMQ 4.0性能计数器和NetNameForPerfCountersregistry项http://blogs.msdn.com/motleyqueue/archive/2007/12/14/msmq-4-0-performance-counters-and-the-netnameforperfcounters-registry-key.aspx

欢呼声John Breakwell(MSFT)