Web Api 请求在 IIS 上永远排队(状态:ExecuteRequestHandler)
Web Api Requests Queueing up forever on IIS (in state: ExecuteRequestHandler)
我目前在生产环境中遇到了一些挂起问题,经过一些调查,我发现应用程序池的工作进程中有很多请求在排队。常见的是每次排队时间长的请求都是webapi请求,我用的是MVC和Web[=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.
我目前在生产环境中遇到了一些挂起问题,经过一些调查,我发现应用程序池的工作进程中有很多请求在排队。常见的是每次排队时间长的请求都是webapi请求,我用的是MVC和Web[=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.