Azure云服务-似乎总是在加速
我已经实现了一个azure云服务(recipesavants.cloudapp.net),它有两个实例(都很小),每当我转到URI时,第一个页面的呈现就要花费永远的时间(通常是30秒以上) 我认为这是因为实例正在从睡眠或非活动状态旋转,对吗 为了缓解这种情况,我创建了一个worker角色,使用以下代码每分钟ping一次URI:Azure云服务-似乎总是在加速,azure,azure-cloud-services,Azure,Azure Cloud Services,我已经实现了一个azure云服务(recipesavants.cloudapp.net),它有两个实例(都很小),每当我转到URI时,第一个页面的呈现就要花费永远的时间(通常是30秒以上) 我认为这是因为实例正在从睡眠或非活动状态旋转,对吗 为了缓解这种情况,我创建了一个worker角色,使用以下代码每分钟ping一次URI: using (var client = new HttpClient()) { // New code: client.BaseAddress = new
using (var client = new HttpClient())
{
// New code:
client.BaseAddress = new Uri("http://brewsavants.cloudapp.net");
HttpResponseMessage response = await client.GetAsync("");
client.BaseAddress = new Uri("http://recipesavants.cloudapp.net");
response = await client.GetAsync("");
client.BaseAddress = new Uri("http://recipesavantsapi.azurewebsites.net/api/ping");
response = await client.GetAsync("");
}
但是,大约20分钟后,这些实例似乎仍会进入睡眠状态。还有别的工作吗?我确实需要这些实例具有高可用性和快速性。您可以在包中包含一个脚本,该脚本配置为在每次重新启动角色时作为启动脚本运行 一个startup.cmd文件,放置在web角色项目中名为startup的文件夹中
REM *** Prevent the IIS app pools from shutting down due to being idle.
%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00
REM *** Prevent IIS app pool recycles from recycling on the default schedule of 1740 minutes (29 hours).
%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.recycling.periodicRestart.time:00:00:00
将“复制到输出目录”设置为“始终复制”,使其成为包的一部分。
在Azure云服务项目的service definition.csdef中,您必须添加行
<Startup>
<Task commandLine="Startup\Startup.cmd" executionContext="elevated" />
</Startup>
重新部署您的解决方案这更像是一个与IIS相关的问题,因为Azure Web角色只运行普通IIS。您将看到ASP.Net应用程序的默认行为—在一段时间未使用后,卸载其应用程序池,然后在一段时间内开始下一个请求。对于Web角色,有几种解决方案(在堆栈溢出和其他方面)。请在您选择的搜索引擎上查找“always on azure webrole”。不确定这是否与此直接相关,但我不久前曾讨论过调整AppPool超时以处理20分钟的窗口。