簡體   English   中英

<gcServer enabled="false" />不適用於 ASP.Net MVC 5

[英]<gcServer enabled="false" /> not working on 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 次,則應用程序池停止(Rapid-Failure Potection)。

  3. 經過幾天的研究,我可以說所有的 DBContext 都被處理掉了。 托管內存約20MB,非托管內存約200MB。

  4. 由於我無法進入托管,我創建了一個頁面來檢索一些內存信息,結果如下:

托管價值

這是控制器中的代碼(因為缺少托管服務器的權限而注釋了兩行):

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

我使用 Ant profiler 獲取本地機器上的信息,結果如下:

分析器快照

分析器時間線

正如您所看到的,大部分內存是由 .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

如何在 Azure 應用服務上運行的 ASP.NET Framework 應用中禁用服務器 GC

第 1 代堆消耗千兆內存作為可用空間

如果您使用他們的共享主機,則無法更改您的私人內存限制,您需要要求他們為您更改。 或者為了避免上述問題,也許您需要升級到更高的計划。 關於您遇到的問題,請先聯系他們的支持

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM