【问题标题】:Excessive "Unmanaged memory" consumed by dotnet 6dotnet 6 消耗过多的“非托管内存”
【发布时间】:2022-11-09 22:00:08
【问题描述】:

从 dotnet 5 移植到 dotnet 6 后,后端应用程序正在消耗大量“非托管内存”。它是一个托管在 Linux 上的复杂 F# 应用程序,运行多个进程,来自 EventStore 的大量消息序列化,并使用 AKKA.NET 实现了 Actor 模型。

移植期间没有重大代码更改。

dotnet 5 的屏幕截图

dotnet 6 的屏幕截图

非托管内存可以达到 6 GB,如果进程保持空闲(EventStore 中没有消息),它会释放一些非托管内存并稳定在 3-4 GB 左右。

其他详情

  • 操作系统:Linux(Ubuntu 22.04,Debian 10.11)
  • dotnet 6 版本:6.0.401
  • dotnet 5 版本:5.0.408

使用了来自 JetBrains 的 dotnet-dump 和 dotMemeory。 (dotMemory 没有提供任何关于“非托管内存”的见解)。目前正在探索 WinDbg 和 dotnet-dump 命令。

我正在寻找的帮助是

  1. 如何探测非托管内存并查明问题?
  2. WinDbg/dotnet-dump 分析“非托管内存”的任何有用命令
  3. 当 dotnet 5 可以使用相对较低的占用空间时,为什么 dotnet 6 需要如此多的非托管内存的可能原因。

【问题讨论】:

    标签: .net .net-core memory-leaks


    【解决方案1】:

    问题出在 Marten,更新版本 (v3 -> v5) 在运行时创建类型,因此导致非托管内存激增。 Marten 团队解释了here 的行为。遵循 Marten 团队提供的说明后,问题得到解决。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2016-05-12
      • 2022-11-28
      • 1970-01-01
      • 2013-03-24
      • 2016-09-24
      • 1970-01-01
      相关资源
      最近更新 更多