当100个或更多用户使用该站点时,IIS站点将挂起

时间:2017-08-01 07:52:25

标签: asp.net azure asp.net-mvc-4 iis application-pool

我有一个网站,其中我通过ajax使用web API,该API在同一个IIS上作为不同的站点托管,并且两个应用程序池都不同。我的Web API在MVC4中,我使用SQL服务器进行数据访问,某些Web API需要0秒,有些需要2秒到8秒。我的网站集中在azure服务器上。

我的问题是当100个或更多用户使用我的网站时,我的IIS网站API网站会挂起,而不会更多地回复任何请求。为此我看了工作进程,列出了一些请求,服务器没有响应任何请求.CPU利用率为50%,当时内存为19%。

我是否可以针对此问题为Web API网站分配4个工作流程,但如果我将多个工作流程分配到一个网站,则不知道其工作原理。

如果您有任何想法,请与我分享我如何处理上述情况?

2 个答案:

答案 0 :(得分:0)

我确定IIS不会导致此问题。如果您认为IIS阻止了请求,则可以检查CurrentQueueSize或ActiveThreads。

您还可以使用“appcmd list request”命令从命令行检查执行请求。您将能够看到哪些请求需要更长时间才能执行,阻止请求通常位于顶部。 很有可能代码中的某些东西阻止了请求。

顺便说一句,您已在'azure'下标记了此查询。您是否将其作为Azure Web App运行?如果是,您可以使用'Kudu'来诊断原因。

答案 1 :(得分:0)

我猜你使用的是Azure VM(从描述中我看到你有权访问IIS)。如果是这种情况,你可以使用debugdiag捕获进程的挂起转储并进行自动分析来计算你的应用程序代码中发生了什么。

在问题出现之前,请继续在服务器上安装DebugDiag

  1. 捕获DebugDiag(捕获连续的挂起转储)
    • 启动 DebugDiag集合并转到“进程”选项卡 debugdiag process tab
    • 重现问题
    • 捕获挂起转储
      • 右键单击w3wp.exe进程
      • 选择Create Full Memory dump选项 capture full memory hang dump
    • 30秒后捕获另一个转储,然后在30秒后捕获另一个转储
    • 您应该在文件夹C:\ ProgramFiles \ DebugDiag \ Logs \ Misc \
    • 中捕获转储
    • 右键单击转储文件,然后选择分析挂起选项 Analyse hang issue
  2.   

    现在,debugdiag自动挂起分析应该告诉您代码中是否存在任何死锁或任何其他问题,并且还会显示所有挂起的请求以及每个请求被卡住的位置。还要查看请求的堆栈跟踪并查看它是什么正在做。

    如果您在分析方面需要任何帮助,请随时更新详细信息。