微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

<gcServer enabled =“ false” />不适用于ASP.Net MVC 5

如何解决<gcServer enabled =“ false” />不适用于ASP.Net MVC 5

背景:

  1. 我在Hostgator中托管了2个Web应用程序。其中一个是MVC 5 / EF 6 / .Net 4.6.1,另一个是Web Api2 / EF 6 / .Net 4.6.1

  2. Hostgator将每个应用程序池的专用内存限制为250MB,如果达到此限制,则将回收该应用程序池,如果在5分钟内进行5次回收,则该应用程序池将被停止(快速失败防护)

  3. 经过几天的研究,我可以说所有DBContext都已被丢弃。托管内存约为20MB,非托管内存约为200MB。

  4. 由于我无法剖析主机,因此创建了一个页面来检索一些内存信息,结果如下:

Hosting Values

这是控制器中的代码(由于托管服务器上没有权限,所以注释了两行):

    model.ProcessMem = proc.PrivateMemorySize64;
    model.Gcmemory = GC.GetTotalMemory(true);
    model.IsGCServer = GCSettings.IsServerGC;
    //model.cpuCounter = cpuCounter.NextValue();
    //model.RAMCounter = ramCounter.NextValue();
    

我使用Ant探查器在本地计算机上获取信息,这是结果:

profiler snapshot

profiler timeline

如您所见,大多数内存是由.Net预先分配的(我想这比分配几个小部分更有效),但是这个未使用的内存被算作“应用程序池进程内存”的一部分。我现在可以根据需要收集GC了,但是由于服务器还剩几个GB的内存,并且GC不知道应用程序池配置中的内存限制,因此它被忽略了,因为“还不需要”。

  1. 我的研究使我进入了垃圾收集器模式(服务器/工作站),因此它看起来像解决方案,但是当我将值更改为web.config时,它没有生效。在VS2017,本地IIS和主机上进行了测试。

问题:

是否可以更改设置以使用Workstation GC? 还是有什么方法可以限制.Net预先分配的私有内存? 还是任何降低它的方法

相关帖子:

https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/gcserver-element

How to disable Server GC in ASP.NET Framework App running on Azure App Service

Generation 1 Heap Consuming Gigs of Memory as Free Space

解决方法

如果您正在使用他们的共享主机,则无法更改您的私有内存限制,您需要请他们为您更改它。为了避免上述问题,也许您需要升级到更高的计划。请随时就遇到的问题与他们的支持部门联系

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。