【问题标题】:Requests hanging on Session module on IIS 7.5在 IIS 7.5 上的会话模块上挂起的请求
【发布时间】:2013-05-10 08:49:28
【问题描述】:

有时,我网站上的一些请求开始挂在 Session 模块的 RequestAcquireState 状态。当螺旋开始时,所有请求都超时,我们需要在受影响的服务器上重新启动 IIS。

我对此进行了很多调查,得到的唯一结论是,当应用程序尝试访问存储在 Session 中的用户数据时,不知何故发生了死锁。

我能想到的解决此问题的唯一选择是减少或停止在我的应用程序中使用会话。这绝对是计划的一部分,但我们还需要一段时间才能完成。

我们使用 IIS 7.5 运行 6 台机器,在我们的负载平衡中运行状态服务器和服务器关联。

有关如何解决此问题或完全修复它而无需完全删除会话的任何提示?

【问题讨论】:

  • 我的 asp.net web forms 4.0 应用程序和 iis 7.5 有同样的问题...有什么建议吗?
  • 在任何情况下,某些页面是否做了很多工作,例如,某些过程,或大文件的下载/上传?
  • 不,大部分页面都是只读的。这是一个电子商务应用程序。当问题没有发生时,所有页面的平均响应时间在 70 到 80 毫秒之间。
  • 您是否考虑过切换到 SQL Server 状态模式?您还可以消除负载平衡器中的服务器关联性,并防止用户会话因服务器崩溃而中断。
  • 我要检查的另一件事是失败时会话状态的膨胀程度。登陆服务器查看任务管理器,发现aspnet_state.exe,是不是很占内存,泡CPU等等?

标签: asp.net timeout iis-7.5 httprequest session-state


【解决方案1】:

提供程序和会话模块(IIS 会话模块)上都存在锁定机制。您可以开发自定义会话模块,但仍需要不加锁的提供程序,或者您可以开发不加锁的自定义提供程序,但仍需要 IIS 会话模块,但在该级别实现并不那么简单。

解决方案是UnlockedStateProvider [aka Unlocked]

跟随白兔:P(查看演示项目,它解释了一切。)

【讨论】:

    【解决方案2】:

    答案是 Hotfix Rollup 2828841 for .NET Framework 4.5 ,这里有所有解释:

    http://forums.asp.net/t/1888889.aspx/2/10?Question+regarding+a+possible+bug+within+NET+4+5

    这里是download link

    它适用于我的 IIS 7.5 Windows Server 2008 rs x64 ,带有大量 ajax 请求的 asp.net Web 表单应用程序。

    【讨论】:

    • 谢谢。我会尝试一下然后回到这里。
    • 在我得到它之前,我没有注意修补程序适用的框架。我没有使用框架 4.5,而是 4.0,因此此修补程序不适用。不过还是谢谢。
    • 实际上下载链接不允许下载此修复程序。
    • 以下是用户论坛上的讨论,其中有人描述了他如何尝试联系客户支持以获取此修补程序。 social.msdn.microsoft.com/Forums/vstudio/en-US/…
    【解决方案3】:

    我今天刚刚发现,如果您有一个长时间运行的请求(或者在我的情况下是一个无限循环),那么所有后续请求都将被锁定,因为 默认情况下 ASP.NET 会锁定会话。强>

    因此,如果您有用户在RequestAcquireState 中提出请求,那么请检查ExecuteRequestHandler 中是否存在锁定会话的请求,从而阻止其他请求启动。

    a discussion here 介绍了如何防止会话锁定。 (基本上,将大部分页面创建为 Session-Read-Only,并尽可能少地修改会话。)

    【讨论】:

      【解决方案4】:

      是否有可能这些用户有另一个长时间运行的请求,而您看到的堆积如山的请求实际上是次要请求?默认情况下,ASP.NET 将锁定 Session 直到请求完成。如果第二个请求在第一个请求完成之前进入,它将不得不等待。如果您使用的是 MVC,则可以通过向控制器添加属性来更改此行为。

      [SessionState(SessionStateBehavior.ReadOnly)]

      这使 Session 成为只读的,消除了允许处理后续请求的锁定行为。

      【讨论】:

      • 为什么第一个请求会挂在首位?如果是这样的话,问题几乎是一样的。我仍然会无缘无故地挂起请求。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 2013-08-05
      相关资源
      最近更新 更多