IIS上永远排队的Web Api请求(状态:执行请求处理程序)

ajsxfq5m  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(251)

我目前在生产环境中遇到一些挂起问题,经过调查,我发现应用池的工作进程中有大量请求排队。常见的情况是,每个排队很长时间的请求都是Web API请求,我在应用中同时使用MVCWeb API

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

它们都处于执行请求处理程序状态
你知道我应该在哪里继续挖吗?

0yg35tkg

0yg35tkg1#

您的请求可能会因以下原因而被延迟:

  • 它们正在等待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是分析这类问题的一个很好的资源。

5gfr0r5j

5gfr0r5j2#

这是一个真正的长镜头没有第一手访问您的系统,但尝试检查处理程序Map在IIS管理器图形用户界面为您的WebApi。比较它与IIS设置您的DEV或任何其他环境中的工作。
如果这不是问题所在,请比较该应用程序的所有其他IIS设置。
祝你好运

相关问题