gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:39:45 26 4
gpt4 key购买 nike

我有两个使用 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 会使用这么多内存并且需要很长时间才能释放它有什么想法吗?非常感谢。

最佳答案

这是完全正常的。 MSMQ 使用 4MB 内存块进行存储,这些内存块映射到存储文件夹中的文件。 170,000 条消息,每条 5-10kb 的大小为 0.85-1.7GB,因此您看到分配了如此多的虚拟内存也就不足为奇了。为了减少消息删除或到达时删除和创建文件的开销,存储文件将保留 6 小时。在此期限之后,空文件将被删除。您可以对此进行配置,如我的博客文章中所述:

Forcing MSMQ to clean up its storage files

关于使用 NServiceBus 处理消息时 MSMQ 消耗大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445632/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com