Web Api 请求在 IIS 上永远排队(状态:ExecuteRequestHandler)

Web Api Requests Queueing up forever on IIS (in state: ExecuteRequestHandler)

我目前在生产环境中遇到了一些挂起问题,经过一些调查,我发现应用程序池的工作进程中有很多请求在排队。常见的是每次排队时间长的请求都是webapi请求,我用的是MVCWeb[=28] =] 在应用程序中。

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

都处于ExecuteRequestHandler状态

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

如果没有第一手访问您的系统,这是一个非常遥远的尝试,但请尝试在 IIS 管理器 gui 中检查您的 WebApi 的处理程序映射。将它与您的 DEV 的 IIS 设置或它工作的任何其他 Env 进行比较。

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

祝你好运。

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

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

为了找出您的请求在做什么,首先要获取花费很长时间的请求的 url。

您可以在命令行中执行以下操作

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

如果从 url 和代码中看不明显,您需要在服务器上对 w3wp.exe 进行进程转储。获得进程转储后,您需要将其加载到 windbg 中,以便分析占用所有 cpu 周期的内容。覆盖 windbg 相当大,但这里简要介绍了您需要做的事情:

  • 加载 SOS dll(托管调试扩展)
  • 调用 !runaway 命令
  • 获取长运行线程的列表潜入一个长运行线程 通过选择它并调用 !clrstack 命令

关于使用windbg的博客有很多。这里是 one example. A great resource on analyzing these types of issues is Tess Ferrandez's blog.