【问题标题】:Web Api Requests Queueing up forever on IIS (in state: ExecuteRequestHandler)Web Api 请求在 IIS 上永远排队(状态:ExecuteRequestHandler)
【发布时间】:2016-06-30 19:17:00
【问题描述】:

我目前在生产环境中遇到了一些挂起,经过一番调查,我看到很多请求在应用程序池的工作进程中排队。共同点是每一个排队时间长的请求都是一个web api请求,我在应用中同时使用了MVCWeb API

请求排队大约 3 小时,当应用程序池被回收时,它们立即开始排队。

它们都处于ExecuteRequestHandler状态

关于我应该在哪里继续挖掘的任何想法?

【问题讨论】:

  • 你解决过这个问题吗?我有一个完全相同的
  • 有同样的问题,显然应用程序代码正在等待连接超时 0 的不存在的连接字符串

标签: iis asp.net-web-api request iis-8 request-queueing


【解决方案1】:

您的请求可能由于多种原因而被搁置:

  • 他们正在等待 I/O 操作,例如数据库、Web 服务调用
  • 他们正在对大型数据集进行循环或执行操作
  • CPU 密集型操作
  • 以上的一些组合

为了了解您的请求在做什么,首先要获取需要很长时间的请求的 url。

您可以在 cmd 行中执行此操作,如下所示

c:\windows\system32\inetsrv\appcmd list requests

如果从 url 和查看代码中不明显,您需要在服务器上执行 w3wp.exe 的进程转储。一旦你有一个进程转储,你需要将它加载到 windbg 中,以便分析占用所有 cpu 周期的内容。掩盖windbg 是相当大的,但这里简要介绍一下您需要做的事情:

  • 加载 SOS dll(托管调试扩展)
  • 调用 !runaway 命令
  • 要获取长时间运行的线程列表,请深入到长时间运行的线程中 通过选择它并调用 !clrstack 命令

有很多关于使用windbg 的博客。这是one 示例。 Tess Ferrandez 的blog 是分析此类问题的重要资源。

【讨论】:

    【解决方案2】:

    这是一个非常长的镜头,没有第一手访问您的系统,但尝试检查 IIS 管理器 gui 中的处理程序映射以获取您的 WebApi。将其与 DEV 的 IIS 设置或它工作的任何其他环境进行比较。

    如果这不是问题,则比较该应用程序的所有其他 IIS 设置。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 2018-02-01
      • 1970-01-01
      • 2022-06-30
      相关资源
      最近更新 更多