【发布时间】:2020-06-12 11:47:27
【问题描述】:
我正在 Azure 应用服务上对 ASP.NET MVC 5 / WCF 应用程序进行一些高密度托管,而空闲应用程序每个都使用 600~1000MB 的内存,这是相当多的,因为内存转储显示GC 堆只有大约 40MB 已满。 我怀疑这是由于服务器 GC 造成的,所以我尝试通过关注 https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/gcserver-element 来禁用它 并添加
<gcServer enabled="false" />
到我的 web.config,但这似乎没有任何效果
GCSettings.IsServerGC
仍然返回 true。我在这里错过了什么?
编辑:
使用普通 IIS 可以使用 https://weblogs.asp.net/owscott/setting-an-aspnet-config-file-per-application-pool 完成,但在 Azure 应用服务中,您没有执行此操作的权限。
【问题讨论】:
-
你认为你有什么问题?应用程序占用太多内存?在我看来,您认为自己有问题,但实际上没有。
-
@Neil 正如我所解释的,这些应用程序最多使用 1GB 的内存,什么也不做,正如我所分析的那样,GC 堆只有大约 40MB 的利用率。众所周知,服务器 GC 比工作站 GC 具有更高的内存占用,因此在这种情况下,对我来说,更有效的内存利用率比服务器 gc 的好处更重要。
-
如果他们没有真正使用它,那么当他们声称它时,它实际上并不存在。这意味着你猎杀鬼魂(预订而不是使用)。
-
@TomTom 我的意思是,它仍然占用我的应用服务计划中的物理资源,内存利用率约为 80%。它只是没有得到有效的使用。
-
这个设置似乎不再适用于 ASP.NET。我已经尝试过了,它甚至在我的本地环境中都不起作用。不过它适用于 ASP.NET Core。
标签: c# asp.net .net garbage-collection azure-web-app-service