Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session 当Azure运行缓慢时,IIS队列已满且无法恢复_Session_Iis_Iis 7_Azure_Azure Web Roles - Fatal编程技术网

Session 当Azure运行缓慢时,IIS队列已满且无法恢复

Session 当Azure运行缓慢时,IIS队列已满且无法恢复,session,iis,iis-7,azure,azure-web-roles,Session,Iis,Iis 7,Azure,Azure Web Roles,我们在IIS和Azure方面遇到了一个非常严重的问题。不确定这是IIS端还是自定义代码端 我参与了Azure中运行的两个网站(站点A和站点B)。(标准Web角色,ASP.NET MVC3)。这两个站点的架构完全不同,彼此之间没有任何关系,但在相似的情况下,它们都表现出相似的行为 站点A正在启用会话状态下运行。会话存储在SQL Azure数据库中。对站点A的大多数调用都是通过指向SQL Azure数据库的ASP.NET SQL成员资格提供程序进行保护的 站点B也在启用会话状态的情况下运行。会话存储

我们在IIS和Azure方面遇到了一个非常严重的问题。不确定这是IIS端还是自定义代码端

我参与了Azure中运行的两个网站(站点A和站点B)。(标准Web角色,ASP.NET MVC3)。这两个站点的架构完全不同,彼此之间没有任何关系,但在相似的情况下,它们都表现出相似的行为

站点A正在启用会话状态下运行。会话存储在SQL Azure数据库中。对站点A的大多数调用都是通过指向SQL Azure数据库的ASP.NET SQL成员资格提供程序进行保护的

站点B也在启用会话状态的情况下运行。会话存储在Azure AppFabric缓存中。站点B还有一个http处理程序,可以与AppFabric缓存和Azure表存储进行通信

当关键Azure资源(如SQL Azure或缓存)变得非常缓慢时,问题开始出现,但不会恢复。当这些资源变得非常慢并且每个请求的处理时间超过一分钟时,Azure的负载平衡器会终止这些连接,但web角色上的IIS不会从其活动队列中清除/删除这些请求


因此,问题不是当SQL Azure或AppFabric缓存非常慢时,站点没有响应。最大的问题是,当SQL Azure或AppFabric缓存恢复并开始正常工作时,站点无法恢复。请求位于活动请求列表中,并且不会长时间(小时?)消失。坦白地说,我不知道他们在那里呆了多久,因为我们会尽快重新启动那些服务器。由于Azure资源可能会偶尔出现间歇性问题,而且两个站点的流量都非常高,因此两个站点很快就会在非清除请求的重压下陷入困境。IIS队列已满,在有人进入并重新启动应用程序池之前,这些站点不可用。

IIS使请求保持“活动”状态的事实非常奇怪。您是否已尝试将请求超时配置为小于60秒?这样做将使IIS控制终止请求,而不是让负载平衡器关闭连接:

<httpRuntime executionTimeout="50" />


注意:这仅在Debug=false时有效。我遇到了类似的问题,IIS请求会持续很长时间。我花了很长时间试图弄明白为什么IIS没有杀死他们。我尝试了Sandrino Di Mattia的解决方案,以及其他一些,但都不适用于我

结果表明,IIS并没有杀死这些请求,因为它们仍然处于活动状态。在某些情况下,客户端浏览器会打开一个连接并永远保持它。我会在网络调试器中查找浏览器(Firebug、Webkit inspector等),看到请求就在那里旋转。据我所知,他们正在响应keepalives,因此IIS和负载平衡器将保持连接和请求处于活动状态。最终的解决方案是让浏览器不这样做

这可能与您的问题无关,但在我的特殊情况下,问题是
标签。当一个
标签指向一个大文件时,他们会立即打开一个连接并保持它直到视频播放,这可能永远不会发生(我们已经关闭了自动播放)。解决方案是在我们准备好播放视频之前不要创建
标签

还有,有没有办法知道Azure负载平衡器已经终止了一个请求?据我所知,查看活动请求的唯一方法是通过IIS管理控制台