gpt4 book ai didi

session - 当 Azure 速度较慢时,IIS 队列已满且无法恢复

转载 作者:行者123 更新时间:2023-12-03 01:57:17 65 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

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

<httpRuntime executionTimeout="50" />

注意:这仅在 Debug = false 时有效

关于session - 当 Azure 速度较慢时,IIS 队列已满且无法恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11656145/

65 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com