自从我做了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的客户端才能完成安装。
有一个想法:性能监视器对你的内存状态问题有什么看法?那里有很多磁盘交换吗?
什么是MSMQ进程的内存大小有限? – 2009-10-29 14:57:14
我不确定你的意思?我在哪里可以检查MSMQ的内存限制? – mike 2009-10-29 23:23:49
你确定问题出在MSMQ上,而不是你正在使用的开源库吗?你是否跨过了实际从MSMQ读取的代码,并确认这是延迟的地方? – DSO 2009-10-30 14:27:05