【问题标题】:IIS Worker Process not releasing memory until any other Application required memoryIIS 工作进程在任何其他应用程序需要内存之前不会释放内存
【发布时间】:2020-10-15 17:40:27
【问题描述】:

我在 IIS 上有六个网站,其工作进程内存约为 1.5 GB,并且在进程完成后它不会减少,直到我在系统上运行一些需要内存的其他应用程序,然后 IIS 工作进程内存随着其他应用程序内存的增加而减少.

【问题讨论】:

  • 说实话,这听起来很正常;我知道在 .NET Core 的最新版本中,他们添加了一些控件,以允许您更积极地限制工作集,但默认情况下:如果没有其他人主动想要内存......

标签: c# asp.net-mvc iis iis-10


【解决方案1】:

按照以下步骤操作。它对我有用。

第 1 步: 要启用 GC 内存调整,请将以下设置添加到 Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config

<configuration>
  <!-- ... -->
  <runtime>
    <performanceScenario value="HighDensityWebHosting"  />
    <!-- ... -->

链接> https://docs.microsoft.com/en-us/aspnet/whitepapers/whats-new-in-aspnet-45-and-visual-studio-2012

【讨论】:

  • 在对 ASP.Net Web Pages razor 网站进行几次页面刷新后,本地设置的 IIS 工作进程从 4MB 增加到 60MB。在用尽所有与代码相关的选项后,设置了一个空白的 .cshtml 页面,并且在回收到 30MB 后多次刷新后内存似乎继续增加。更新配置文件使内存保持在 16MB。很高兴知道是什么占用了内存而不是为空白页释放它。在本地设置的另一个 ASP.NET Core 项目似乎徘徊在 5MB 左右。
【解决方案2】:

使用 windbg 工具调试您的网站并找出导致问题的确切原因。应用程序池回收通常会关闭旧的工作进程,因此请尝试根据您在 iis 中的要求设置一些应用程序池回收设置。在请求结束或使用完连接时使用 .Dispose()。

现在您可以在一定的 CPU 限制后将操作设置为 KillW3p。

<applicationPools>
   <add name="DefaultAppPool">
     <cpu limit="80000" action="KillW3wp" resetInterval="00:02:00" />
   </add>
</applicationPools>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-15
    • 2010-09-26
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2020-01-27
    相关资源
    最近更新 更多