You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure App Service上禁用ASP.NET Framework应用的Server GC

解决Azure App Service中配置不生效的问题

我来帮你梳理下这个问题——你遇到的情况其实在Azure App Service上托管.NET Framework应用时挺常见的,核心问题是web.config的<gcServer>设置要么位置不对,要么被更高优先级的平台配置覆盖了。下面是具体的排查和解决步骤:

1. 先确认web.config的配置位置是否正确

很多人容易犯的错误是把<gcServer>放在了<system.web>节点下,这是完全无效的。正确的结构必须是在<configuration>根节点下的<runtime>子节点中,示例如下:

<configuration>
  <runtime>
    <!-- 必须放在这个位置才会生效 -->
    <gcServer enabled="false" />
  </runtime>
  <!-- 其他配置节点(比如system.web、system.serviceModel等)放在这里 -->
</configuration>

如果你的配置位置不对,调整后先重启应用,再检查GCSettings.IsServerGC的值。

2. 用环境变量强制覆盖平台配置

Azure App Service会根据实例的CPU配置自动设置COMPlus_GCServer环境变量,这个环境变量的优先级比web.config更高,所以即使你在web.config里设了enabled="false",也会被它覆盖。

解决方法很简单:

  • 登录Azure门户,找到你的App Service
  • 进入配置 -> 应用设置
  • 添加一个新的应用设置:
    • 名称:COMPlus_GCServer
    • 值:0(0代表禁用Server GC,1代表启用)
  • 保存设置,应用会自动重启

重启后再检查GCSettings.IsServerGC,应该会返回false了。

3. 确认应用的平台位数设置

如果你的App Service设置为32位平台(在配置 -> 常规设置里的"平台位数"选项),那么Server GC本身就是不支持的,会自动使用工作站GC。但如果是64位多CPU实例,平台默认会启用Server GC,这时候就必须用上面的环境变量来强制关闭。

额外提示:内存占用的后续排查

关闭Server GC后,工作站GC的内存 footprint应该会明显降低,解决你说的闲置应用内存过高的问题。如果之后还是存在非托管内存占用过高的情况,可能需要进一步排查IIS模块、第三方原生DLL或者WCF的宿主配置,但先解决Server GC的问题是关键第一步。

内容的提问来源于stack exchange,提问作者Suchiman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:32:53