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

时间:2016-06-30 19:17:00

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

我目前正在生产环境中遇到一些问题,经过一些调查后,我看到很多请求在应用程序池的工作进程中排队。常见的是,长时间排队的每个请求都是一个web api请求,我在应用程序中同时使用 MVC Web API

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

他们都在 ExecuteRequestHandler 状态

我应该继续挖掘哪些想法?

2 个答案:

答案 0 :(得分:2)

您的请求可能会因多种原因而停止:

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

为了找出您的请求正在做什么,首先要获取请求的网址需要很长时间。

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

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

如果从网址中看不清楚并且查看代码,则需要在服务器上执行w3wp.exe的进程转储。一旦你有一个进程转储,你需要将它加载到windbg中,以分析占用所有cpu周期的内容。覆盖windbg非常重要,但简要介绍一下你需要做什么:

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

有很多关于使用windbg的博客。这是one示例。分析这些类型问题的一个很好的资源是Tess Ferrandez的blog

答案 1 :(得分:0)

这是一个很长的镜头,没有第一手访问您的系统,但尝试检查IIS管理器gui中的Handler映射为您的WebApi。将它与DEV的IIS设置或其工作的任何其他Env进行比较。

如果这不是问题,那么请对该应用程序的所有其他IIS设置进行比较。

祝你好运。