【问题标题】:MassTransit high memory usage in cloudampqCloudampq 中的 MassTransit 高内存使用率
【发布时间】:2020-04-16 23:33:27
【问题描述】:

我们目前有大约 100 个队列在 .NET Core 2.0、3.0 和使用 MassTransit 的完整 .NET 服务中运行,所有这些服务都托管在 IIS 中的 2 个服务器上,即 2 个 IP 地址/连接(因此每个队列有 2 个消费者)和内存使用量AMPQ 服务器持续超过 70%(大约 670Mb)。

目前我们的消息数量非常少。

这是我们的消费者/渠道计数等的屏幕截图。

我查看了所有内容,但不知道如何减少内存使用量、通道等,但它们看起来都非常高。任何关于寻找什么或我可能做错了什么的想法将不胜感激。

【问题讨论】:

    标签: asp.net-core rabbitmq masstransit


    【解决方案1】:

    220 个消费者,300 个渠道,似乎并不过分。连接看起来不错,每个总线实例的接收端点密度不错,所以这也很好。 您是否遇到性能问题,或者只是想避免使用 1GB 内存? RabbitMQ 使用内存来优化性能,因此请记住这一点。

    如果您使用的是 6.x 或更高版本,则应该尽可能优化,较新的版本使用单个通道接收端点,包括端点发送/发布的消息,这显着减少了通道使用率。不过,这只在使用临时端点的高请求/响应期间发挥作用。

    老实说,我还没有发现问题 - 看起来应用程序和服务的使用效果很好。

    【讨论】:

    • 只是拼命地试图保持在我们的 Cloud AMPQ 服务的限制之下,因为下一次跳跃是成本的 3 倍,并且不确定我们是否可以证明这一点。我们只在少数服务上使用 v6,所以也许值得我们花一些时间来更新?不,我们没有看到任何性能问题。
    • 我同意 Chris 的观点 - 这里没有任何不妥之处。确保您使用的是惰性队列。您可以通过执行TCP buffer size tuning 来节省一些 RAM,尽管这可能会带来性能成本。最佳调整和基准测试。
    • 是的,Lazy 会节省 RAM,您可以在 ReceiveEndpoint 上进行设置。队列将需要重新创建,因此如果您更改为 Lazy,请将它们全部清除。
    • 我有点担心延迟队列进入磁盘并减慢速度(我不确定)但我认为对于某些队列来说这可能还是可以的(例如电子邮件通知) .还希望在下个月左右迁移到 v6。感谢您的支持。
    • 惰性队列仍然很快,RabbitMQ 只是不会尝试将整个队列保留在内存中。所有持久消息都会在某个时候进入磁盘,但如果有可用消息,通常会立即发送给消费者。此外,v6 不再自动启动总线端点临时队列,这可能会降低您的队列数。
    【解决方案2】:

    我想发布我的问题的实际解决方案,无论它看起来多么愚蠢/明显。感谢@chris-patterson 和@luke-bakken 确认消费者、连接、通道等的数量看起来都很健康,我联系了托管和管理 RabbitMQ 实例的 CloudAMPQ,他们同意内存使用率看起来很高。他们将我们的实例移到了一个新的虚拟机上,内存使用量下降到稳定的 0.45Gb(从大约 0.7Gb)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2018-07-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      相关资源
      最近更新 更多