【发布时间】: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 命令。
我正在寻找的帮助是
- 如何探测非托管内存并查明问题?
- WinDbg/dotnet-dump 分析“非托管内存”的任何有用命令
- 当 dotnet 5 可以使用相对较低的占用空间时,为什么 dotnet 6 需要如此多的非托管内存的可能原因。
【问题讨论】:
标签: .net .net-core memory-leaks