我目前在生产环境中遇到一些挂起,经过一番调查,我看到很多请求在应用程序池的工作进程中排队。共同点是每个排队时间长的请求都是一个web api请求,我在应用程序中同时使用了MVC和Web API。
请求排队大约 3 小时,当应用程序池被回收时,它们立即开始排队。
它们都处于ExecuteRequestHandler状态
关于我应该在哪里继续挖掘的任何想法?
我目前在生产环境中遇到一些挂起,经过一番调查,我看到很多请求在应用程序池的工作进程中排队。共同点是每个排队时间长的请求都是一个web api请求,我在应用程序中同时使用了MVC和Web API。
请求排队大约 3 小时,当应用程序池被回收时,它们立即开始排队。
它们都处于ExecuteRequestHandler状态
关于我应该在哪里继续挖掘的任何想法?
您的请求可能由于多种原因而被搁置:
为了找出您的请求在做什么,首先要获取需要很长时间的请求的 url。
您可以在 cmd 行中执行此操作,如下所示
c:\windows\system32\inetsrv\appcmd list requests
如果从 url 和查看代码中不明显,您需要在服务器上执行 w3wp.exe 的进程转储。有了进程转储后,您需要将其加载到 windbg 中,以便分析占用所有 cpu 周期的内容。掩盖 windbg 是相当大的,但这里简要介绍一下您需要做的事情:
有很多关于使用 windbg 的博客。这是一个例子。Tess Ferrandez 的博客是分析这些类型问题的重要资源。
这是一个非常长的镜头,没有第一手访问您的系统,但尝试检查 IIS 管理器 gui 中的处理程序映射以获取您的 WebApi。将其与 DEV 的 IIS 设置或它工作的任何其他环境进行比较。
如果这不是问题,则对该应用程序的所有其他 IIS 设置进行比较。
祝你好运。