2009-10-19 157 views
3

我正在使用一个开源的.Net库,它使用下面的MSMQ。大约一周或2周后,服务速度会减慢(不是准确定时,而是一般猜测)。看起来发生了什么是来自MSMQ的消息只能每10秒钟只读一次。通常情况下,他们会立即阅读。所以它们将在T + 10秒,T + 20秒,T + 30秒等时间内被读取,而不管消息何时被发送(即有时需要3秒钟的时间读取消息,其他时间9秒)。MSMQ缓慢队列读取

目前我恢复正常的方法是简单地删除&重新创建队列。所以问题是,MSMQ队列中可能产生什么会导致这种减速?发生减速时,队列中没有消息。是否有任何先进的MSMQ分析工具可以让您更深入地了解队列(而不是计算机管理)?

哦,我忘了提及,将消息写入队列仍然是瞬间的。它只是读取显示此行为的消息。

编辑:后续问题@here这是一个更详细和更专注。

+0

什么是MSMQ进程的内存大小有限? – 2009-10-29 14:57:14

+0

我不确定你的意思?我在哪里可以检查MSMQ的内存限制? – mike 2009-10-29 23:23:49

+0

你确定问题出在MSMQ上,而不是你正在使用的开源库吗?你是否跨过了实际从MSMQ读取的代码,并确认这是延迟的地方? – DSO 2009-10-30 14:27:05

回答

2

自从我做了MSMQ的东西以来,我已经有一段时间了,因此忍受着我的大脑记忆(忍耐)。 想到一些问题:

日志队列是否处于活动状态?这是连接到一个队列,如果队列被删除,我相信(不要引用我),该日记然后从空...

队列上是否有清除进程? 这些事务队列?

是否应用了所有当前的Service Pack?我似乎回想起在遥远的过去一个服务包的修复。这可能与平台有关,但您不会列出您的平台。 我相信有这种性质的几个服务包。

什么是你的磁盘空间?您是否遇到磁盘空间问题或磁盘碎片问题?文件(如果我记得的话)存储在windows \ system32 \ msmq下。如果没有足够的大小所需的块,它可能会减慢速度 - 通常是存储/接收消息,不确定读取。

这些公共或私人队列?

性能监视器对分页池等有什么看法?我相信它是每个消息70-80字节。

EDIT 1:

从MSDN文件档案: “专用队列被登记在本地计算机上,而不是在目录服务,并且它们的性质不能被远程计算机上运行的消息队列应用程序来获得消息通过将每个队列的描述存储在本地计算机上的本地队列存储(LQS)文件夹的单独文件中,排队在本地注册专用队列。“

因此,如果目录服务关闭,公用队列不可用。另一方面,专用队列存储在本地文件系统中。

这台机器应该有很多内存以避免磁盘交换队列。我从来没有试图在Windows XP上运行MSMQ,坦率地说,由于性能问题 - 一直都在专用的服务器机箱上执行大量内存 - 但之后,我们正在处理大量排队项目,每个大尺寸。 (成千上万,附近各大小的限制)

编辑2:文件系统和空文件:

“空消息文件被删除一次,每六个小时,默认情况下,这个时间间隔可以在控制。通过在HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSMQ \ Parameters下设置MessageCleanupInterval REG_DWORD值,应用程序不应该让游标长时间不必要的打开,游标可能指向已经接收到的消息(并从文件中删除),这些指针会阻止清理并删除空文件

注意:您应该在运行该磁盘时预留大量的可用空间nt碎片问题。你可以尝试减少这6小时的时间,看看是否有帮助 - 所以它不必跟踪空文件。

尽量确保机器上没有任何其他可能导致驱动器碎片的活动 - 例如浏览互联网。

在公共队列中,有时候这会延长,以避免可能造成代价较高的Active Directory交互。 您需要在消息队列会话的两端添加此注册表值。否则,具有最小值的计算机将过早地停止会话。将此注册表值添加较大值的常见原因是使会话保持活动状态,并避免创建消息队列会话的开销。在您的实例中,您可能需要缩短值以帮助进行文件系统管理。 (这是一个艰难的呼吁,坦率地需要考虑)。

至于热修复: (可能更多的在那里,而不是具体到你的问题,我可以看到)

http://support.microsoft.com/kb/304212描述的MSMQ 1.0修补程序。 此修补程序的原因是Windows XP消息队列3.0独立客户端构建为可靠的RPC客户端。没有此修补程序,从Windows XP消息队列3.0独立客户端调用到MQLocateNext失败。

RPC修复程序在http://support.microsoft.com/kb/823980中描述。 需要此修补程序才能在运行Windows XP的客户端上启用审核。此修补程序还需要启用运行Windows 2000的客户端才能完成安装。

有一个想法:性能监视器对你的内存状态问题有什么看法?那里有很多磁盘交换吗?

+0

请原谅我缺乏知识,因为我不是MSMQ专家,只知道/通过这个第三方库使用它。 - 日记帐已禁用且没有日记邮件 - 如果清除您的意思是删除邮件?队列中有0条消息,并且减速仍然发生。它们是事务性队列。 - 我很确定我的电脑已修补。是否有特定的MSMQ补丁可供下载?电脑是赢的。 XP - 大量的磁盘空间,碎片可能是一个问题,但我怀疑它 - 私人 - 小心解释? – mike 2009-10-28 23:18:50

+0

对不起,最后的评论没有很好地格式化......我还发现了一个名为TMQ的工具,它似乎做了一些额外的分析。当再次放缓时,我会尝试进一步调试。 – mike 2009-10-28 23:19:48

+0

是的,这里是一个MS页面的链接,详细介绍了很多关于性能,内存,如何管理等方面的内容。 http://msdn.microsoft.com/en-us/library/ms811056.aspx 更多关于消息大小,数字等的细节可能是有用的,以及对维护商店的文件系统的检查。 – 2009-10-29 12:59:43