我有两个使用NserviceBus的windows服务。一个将消息写入队列,另一个从队列中读取消息并进行一些处理。所有队列都是事务性的,NserviceBus端点的配置如下所示。
.IsTransactional(true)
.IsolationLevel(IsolationLevel.ReadCommitted)
.MsmqTransport()
.RunTimeoutManager()
.UseInMemoryTimeoutPersister()
.MsmqSubscriptionStorage()
.DisableRavenInstall()
.JsonSerializer()问题是,当大量消息(170,000+)排队时,MSMQ服务(mqsvc.exe)会消耗相当多的内存(1.5 - 2.0 GB),并且内存至少在5-6小时内不会被释放。平均消息大小约为5-10KB。似乎你排队的消息越多,它使用的内存就越多。基于NServiceBus的Windows Services内存消耗在完全可接受的范围内(50 -100MB),并且无论它们处理多少消息都不会增加。
有什么想法解释为什么MSMQ会使用这么多内存,并且需要相当长的时间来释放它?谢谢你。
发布于 2012-11-20 08:00:21
这是非常正常的。MSMQ使用4MB内存块中的存储,这些内存块映射到存储文件夹中的文件。17万条消息大小为5-10kb,大小为0.85-1.7 no,因此您看到如此多的虚拟内存被分配也就不足为奇了。为了减少在消息被删除或到达时删除和创建文件的开销,存储文件将保留6小时。在这段时间之后,空文件将被删除。您可以按照我的博客文章中所讨论的那样进行配置:
发布于 2013-05-16 23:02:17
这篇由msmq传奇人物John Breakwell在google groups上发表的文章记录了如何真正彻底清理存储中的所有消息,这有时是可取的/必要的
https://groups.google.com/d/msg/microsoft.public.msmq.performance/jByfXUwXFw8/i1hVP1WJpJgJ
我有8 8GB的文件,但队列中没有消息,msmq服务需要大约2个小时才能进入启动状态。清除任何队列都会花费10分钟的时间,并导致大量的内存峰值,然后几天都不会释放。
如果您遇到这种情况,可以按照以下步骤操作,而不是重新安装消息队列:
文件
https://stackoverflow.com/questions/13445632
复制相似问题