【问题标题】:RequestAcquireState Hanging on .NET 4.5.1 IIS8RequestAcquireState 挂在 .NET 4.5.1 IIS8 上
【发布时间】:2023-04-02 23:49:02
【问题描述】:

在负载过重或使用 jQuery 的 ajax 中止功能时,我们看到请求在 IIS 中累积到没有人可以连接并且整个站点挂起,从而强制回收。

similar post from 3 years ago 在 .NET 4.5 和 IIS 7.5 中也存在类似问题,但 Microsoft 已声明此问题已在 4.5.1 中修复,并发布了 4.5 的补丁。

在尝试使用状态服务器时使用 IIS 8 的 Windows Server 2012R2 上出现此问题,在运行 Windows 10 和 IIS10 的开发机器上使用状态服务器时更是如此。由于 4.5.1 的存在阻止了安装程序,因此无法在任何这些机器上安装补丁。更改为 In Proc 可以减少问题的发生,但不能完全解决问题。

今年在 IIS 论坛上的这个 dead thread 有几个其他人有同样的问题,但没有解决方案。我也尝试按照其他地方的建议将 UploadReadAheadSize 设置为 0,但这并没有解决问题。

有其他人经历过和/或找到解决方案吗?任何意见将不胜感激。

【问题讨论】:

  • 我也遇到了同样的问题。当我找到解决方案/修复时,我会在这里发布。你已经想通了吗?
  • @Tweek 我们使用 4.5.2 已经有一段时间了,到目前为止我的团队都没有报告过它。你用的是哪个版本?
  • 我们在 4.5.2 上运行 - 仍然有这个问题。它大部分时间都发生在一些没有任何 jquery/ajax 调用的经典(旧)aspx 页面上。
  • 这与我们看到的相反。如果我们进行 AJAX 调用,在它完成之前取消它,然后尝试进行另一个调用,问题就会显现出来。我想知道更新到 4.6.x 是否会为您解决问题?
  • @DanDef 你遇到过这个问题吗?

标签: asp.net iis session-state iis-8 freeze


【解决方案1】:

我们的问题似乎是由某人在这篇帖子Can I access session state from an HTTPModule? 中实施建议引起的。

这似乎诱使 SessionStateModule 认为它需要加载 SessionState,即使最终将执行的处理程序没有标记为 IRequiresSessionState,方法是将其临时交换为一个。加载 SessionState 后,处理程序将交换回原始处理程序。我怀疑,但没有证明,如果请求被取消,SessionStateModule 不会释放锁,因为当时“正在运行”的处理程序没有用IRequiresSessionState 标记;因此无需清理。

删除模块并标记因此不需要IRequiresSessionState 的处理程序,然后问题就消失了。

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 2013-11-23
    • 2018-10-31
    • 2013-11-27
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多