【问题标题】:Application "freezes" and requests queue is full应用程序“冻结”并且请求队列已满
【发布时间】:2015-01-29 16:35:06
【问题描述】:

我有一个在 IIS 7.5、Windows Server 2008 R2 上运行的 asp.net 应用程序——在经典模式下使用应用程序池,框架版本 4。

有时我会遇到以下问题: 该应用程序可以运行几天,但突然间我收到一个 http 错误 503 – 服务器不可用。

当我查看应用程序池时,它似乎正在运行(我看到它已启动),但实际上它已冻结 - 对它的每个请求都以 503 响应。 在工作进程列表(在 IIS 管理器中),我看到很多请求未处理。

值得一提的是,在其他应用程序池下运行的其他 asp.net 应用程序运行良好,这意味着 IIS 运行良好,问题仅出在这个特定的应用程序池中。

当我研究 http 错误日志时,我在 Windows\System32\LogFiles\HTTPERR 文件夹中看到了以下错误日志:

  • 在常规设置中,当一切正常时,我注意到记录 “Timer_ConnectionIdle”(我读过的一个正常的东西)。
  • 在某些时候我注意到“Client_Reset”记录的出现。
  • “Client_Reset”错误开始15分钟后->出现“QueueFull”记录。

为了使用该应用程序,我正在执行 iisreset(我想池的回收也足够了)。

我很乐意收到任何帮助或建议。

编辑:

值得一提的是,不会将任何相关内容写入 IIS 日志或系统和应用程序日志。这个错误以前发生过。

【问题讨论】:

  • 会不会是某种资源争用问题?甚至可能陷入僵局?您在(例如)global.asax 中是否有一些代码可以访问某些锁定/共享资源..?

标签: asp.net iis-7 iis-7.5 application-pool http-error


【解决方案1】:

当我遇到 HTTP 500 错误时,我发现启用 IIS Tracing 非常有帮助。下面的链接描述了启用跟踪然后查看跟踪的过程。该站点的第一部分描述了如何安装 IIS,因此您可能想跳到标有“启用失败请求跟踪”的部分。

Troubleshooting Failed Requests Using Tracing in IIS 7

编辑:

由于您收到 QueueFull 错误,您可能需要监控请求队列。最简单的方法是使用 Perfmon。在装有 IIS 的服务器上,打开性能监视器并在“HTTP 服务请求队列”下添加适当的计数器。在您的情况下,出现问题的应用程序池的“当前请求队列”可能很有价值。

【讨论】:

    【解决方案2】:

    如果没有关于您的问题的更多信息,最快速的解决方法是发送至Configure Recycling Settings for an Application Pool。由于您的问题与请求队列有关,因此您可以选择选项在达到多个请求后

    【讨论】:

    • 你的意思是在处理一定数量的请求后回收池吗?还是在请求队列中等待一定数量的请求之后?
    • 是的,您的其他请求将在回收后处理。
    • 是什么? :] 处理一定数量的请求后回收池?就我而言,这无济于事,因为请求队列中充满了未处理的请求。所以我怎么知道何时将回收设置为?
    • @Dvirski 你测量过你每天处理多少请求吗?
    • 这真的是一个巨大的数字.. 可能每分钟 100 多个.. (白天)
    猜你喜欢
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多