我的假设是,如果我在 Azure 中打开 IIS8 应用程序预热,那么我的所有站点在加载时都会相当即时,但情况并非如此。
所以,基本上,我已经打开preloadEnabled并将 设置startMode为AlwaysRunning,使用:
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还使用以下启动任务禁用了 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
Run Code Online (Sandbox Code Playgroud)
在我的每个站点中,我都在 web.config 中添加了以下内容:
<system.webServer>
<applicationInitialization skipManagedModules="true">
<add initializationPage="/" />
</applicationInitialization>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
但是,我所有的网站在第一次点击时仍然需要 30 秒。如果我在访问任何站点之前远程访问机器,我可以看到所有设置都应用在 IIS 中。我还可以看到这些站点空闲大约 60-80MB 的内存(暗示它们已被预加载)。
我的问题是,这和预加载一样好吗?当然是为了更快?我希望延迟最小,第一次加载可能是 2 或 3 秒?
虽然不能直接回答您的问题,但您也许可以利用 Azure 中的新监视功能来保持您的网站正常运行。
如果您查看云服务下的管理门户,会看到一个标有“Web 端点状态”的部分。如果设置该值,Azure 将每隔几分钟左右轮询该页面。
| 归档时间: |
|
| 查看次数: |
2707 次 |
| 最近记录: |