我有两个使用 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 - 10 KB。似乎您排队的消息越多,它使用的内存就越多。基于 NServiceBus 的 Windows 服务内存消耗在完全可以接受的范围内 (50 - 100 MB),并且无论它们处理多少消息都不会增加。
关于为什么 MSMQ 会使用这么多内存并且需要很长时间才能释放它的任何想法?多谢了。