Web Api 请求在 IIS 上永远排队(状态:ExecuteRequestHandler)
Posted
技术标签:
【中文标题】Web Api 请求在 IIS 上永远排队(状态:ExecuteRequestHandler)【英文标题】:Web Api Requests Queueing up forever on IIS (in state: ExecuteRequestHandler) 【发布时间】:2016-06-30 19:17:00 【问题描述】:我目前在生产环境中遇到了一些挂起,经过一番调查,我看到很多请求在应用程序池的工作进程中排队。共同点是每一个排队时间长的请求都是一个web api请求,我在应用中同时使用了MVC和Web API。
请求排队大约 3 小时,当应用程序池被回收时,它们立即开始排队。
它们都处于ExecuteRequestHandler状态
关于我应该在哪里继续挖掘的任何想法?
【问题讨论】:
你解决过这个问题吗?我有一个完全相同的 有同样的问题,显然应用程序代码正在等待连接超时 0 的不存在的连接字符串 【参考方案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 设置。
祝你好运。
【讨论】:
以上是关于Web Api 请求在 IIS 上永远排队(状态:ExecuteRequestHandler)的主要内容,如果未能解决你的问题,请参考以下文章
使用 CORS 在 IIS 上运行的 Angular 2 和 .net 核心 Web 应用程序之间的 HTTP 415 OPTIONS 请求