.NetCore 应用程序内存泄漏 - 高开销|未使用的内存

Posted

技术标签:

【中文标题】.NetCore 应用程序内存泄漏 - 高开销|未使用的内存【英文标题】:.NetCore App Memory Leak - high Overhead|Unused memory 【发布时间】:2021-12-11 03:36:27 【问题描述】:

使用 .Net Core 应用程序从源读取数据、对其进行转换、存储在内存队列中、对转换后的数据进行批处理并将其写入接收器。随着进程运行的时间更长,我们观察到 VM 的内存开始减少,直到完全结束,并且我开始收到“内存不足”异常。我们在程序中监控了内存队列,没有数据堆积在那里。我从“任务管理器”创建了程序的内存转储。

大部分内存似乎在开销|未使用。这是什么意思?我该如何解决这个问题?

【问题讨论】:

.NET Core 的哪个版本?你能用一个工具来显示代数和 LOH 的大小,包括碎片吗?我将从在 PerfView 中录制“仅 gc 收集”会话开始。 net5.0 是版本。 .etl 文件可以吗? 看起来很有趣,将挖掘它并返回一些细节! 【参考方案1】:

当 gc 模式为服务器时,我也发生了类似的事情。在这种模式下,GC 会以更大的块收集内存,因此可能需要一段时间才能 GC 开始收集内存。在我的情况下,这个过程达到了大约 20GB。当我更改为工作站模式时,进程达到了大约 1GB 的内存

https://docs.microsoft.com/en-us/dotnet/core/run-time-config/garbage-collector#workstation-vs-server

【讨论】:

以上是关于.NetCore 应用程序内存泄漏 - 高开销|未使用的内存的主要内容,如果未能解决你的问题,请参考以下文章

如何排查 .NET 内存泄漏

Spark 驱动程序中的内存泄漏

Android —— 内存泄漏检查

一个跨平台的 C++ 内存泄漏检测器

Android 中的内存泄漏和内存溢出

SpringBoot 因未重写hashCode和equals方法导致的HashMap的内存泄漏问题