Asp.net Core没有收集垃圾

Zor*_*hgo 7 .net c# asp.net asp.net-mvc asp.net-core

我似乎无法理解为什么Asp.net核心没有收集垃圾.上周我让网络服务运行了几天,我的内存使用量达到了20GB.GC似乎不起作用.所以为了测试这个,我写了一个非常简单的web方法,它返回一大堆字符串.该应用程序仅使用124MB启动,但每次调用Web方法时,内存使用量都会越来越高,直到达到411MB.如果我继续调用web方法,它会更高.但我决定停止测试.

在此输入图像描述

有谁知道为什么GC不工作?从性能监视器中可以看到GC被调用(图中的黄色标记).但它没有收集内存中的垃圾.我认为GC会热切地收集任何没有引用它的东西.

任何帮助将不胜感激.谢谢!:)

dvd*_*d94 8

我遇到了同样的问题,经过漫长的一天后,在注册的高内存消耗问题的 github 问题之一中找到了解决方案。

实际上,这是预期的行为(在多核高内存机器中),称为“服务器”垃圾收集模式。此模式针对服务器负载进行了优化,并且仅在真正需要时(当计算机开始缺乏内存时)才运行 GC。

解决方案是将GC模式更改为“工作站”模式。您可以通过向 .csproj 添加设置来完成此操作

<PropertyGroup>
  <ServerGarbageCollection>false</ServerGarbageCollection>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

工作站模式意味着使用更少的内存,但更频繁地运行 GC。

Sebastien Ros 对此进行了详细记录: https://github.com/sebastienros/memoryleak

在典型的 Web 服务器环境中,CPU 资源比内存更重要,因此使用服务器 GC 更适合。


小智 0

服务器正在缓存输出,100,000,000 * 4 个字符 ~ 411MB。