使用 Azure 进行应用程序初始化仍然非常缓慢

使用 Azure 进行应用程序初始化仍然非常缓慢

我的假设是,如果我在 Azure 中启用 IIS8 应用程序预热,那么我的所有网站都将立即加载,不是这种情况

因此,基本上,我已经打开preloadEnabled并将 设置startModeAlwaysRunning,使用:

public class WebRole : RoleEntryPoint
{
    public override void Run()
    {
        using (var serverManager = new ServerManager())
        {
            foreach (var application in serverManager.Sites.SelectMany(c => c.Applications))
            {
                application["preloadEnabled"] = true;
            }

            foreach (var appPool in serverManager.ApplicationPools)
            {
                appPool["startMode"] = "AlwaysRunning";
            }

            serverManager.CommitChanges();
        }
    }
}

我还使用以下启动任务禁用了 IIS 应用程序池的回收和定期的 IIS 重启:

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.recycling.periodicRestart.time:00:00:00

在我的每个站点中,我都在 web.config 中输入了以下内容:

<system.webServer>
    <applicationInitialization skipManagedModules="true">
        <add initializationPage="/" />
    </applicationInitialization>
</system.webServer>

但尽管如此,我的所有网站首次访问仍需 30 秒。如果我在访问任何网站之前远程访问机器,我可以看到 IIS 中应用了所有设置。我还可以看到这些网站闲置了大约 60-80MB 的内存(暗示它们已经预加载)。

我的问题是,这是否是预加载的最佳效果?这肯定意味着更快?我原本以为延迟会很小,第一次加载可能只有 2 到 3 秒?

答案1

我认为您实际上已经安装了默认 IIS8 安装中未包含的应用程序初始化模块?

查看这篇很棒的文章关于如何启动和运行它,希望这可以解决你的问题。

答案2

虽然没有直接回答您的问题,但您可以利用 Azure 中的新监控功能来保持您的网站正常运行。

如果您查看云服务下的管理门户,会发现一个标记为“Web 端点状态”的部分。如果您设置该值,则 Azure 将每隔几分钟左右轮询一次该页面。

相关内容