Azure App Service 上的服务器垃圾回收

8

在Azure App Service上可以使用服务器垃圾回收吗?

我已经在web.config(D:\ home \ site \ wwwroot \ web.config)中设置了gcServer,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <gcServer enabled="true" />
  </runtime>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\MyApplication.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
  </system.webServer>
</configuration>

但是GCSettings.IsServerGC仍然返回false。


1
如果应用程序服务仅使用“单核无超线程CPU”(http://stackoverflow.com/questions/11488324/when-server-gc-is-ignored)运行,则无法启用服务GC。 - stuartd
1个回答

17
根据这篇文章,您可以看到以下内容:

如果未启用服务器垃圾回收,则启用工作站垃圾回收(无论是否并发)。只有在多处理器计算机上才可使用服务器垃圾回收。

默认情况下,如果您的 Web 应用服务计划是多处理器的,例如 B2、S2,它将自动启用 gcServer。

但是,如果您的 Web 应用服务计划是 B1、S1,它只有一个核心,它将启用工作站。

这里是测试示例:
我有一个页面,其中包含以下代码:
string result;

        if (GCSettings.IsServerGC == true)
            result = "server";
        else
            result = "workstation";

        Response.Write(result);

然后我将Web应用程序发布到不同的应用服务计划。(B1、B2)

结果如下:

在此输入图片描述


有更新了吗?如果您觉得我的回答有用/有帮助,请将其标记为答案,以便其他人也能从中受益。 - Brando Zhang
抱歉回复晚了 - 是的,这解决了我的问题。我没有意识到服务计划选项会有所不同。 - Dave New

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接