首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NServiceBus处理消息时,MSMQ会消耗大量内存

使用NServiceBus处理消息时,MSMQ会消耗大量内存
EN

Stack Overflow用户
提问于 2012-11-19 07:15:31
回答 2查看 3.2K关注 0票数 5

我有两个使用NserviceBus的windows服务。一个将消息写入队列,另一个从队列中读取消息并进行一些处理。所有队列都是事务性的,NserviceBus端点的配置如下所示。

代码语言:javascript
复制
.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会使用这么多内存,并且需要相当长的时间来释放它?谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-20 08:00:21

这是非常正常的。MSMQ使用4MB内存块中的存储,这些内存块映射到存储文件夹中的文件。17万条消息大小为5-10kb,大小为0.85-1.7 no,因此您看到如此多的虚拟内存被分配也就不足为奇了。为了减少在消息被删除或到达时删除和创建文件的开销,存储文件将保留6小时。在这段时间之后,空文件将被删除。您可以按照我的博客文章中所讨论的那样进行配置:

Forcing MSMQ to clean up its storage files

票数 8
EN

Stack Overflow用户

发布于 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分钟的时间,并导致大量的内存峰值,然后几天都不会释放。

如果您遇到这种情况,可以按照以下步骤操作,而不是重新安装消息队列:

  1. Stop Message Queuing
  2. 转到MSMQ存储位置(通常只保存P*.MQ、J*.MQ、R*.MQ和L*.MQ

文件

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13445632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档