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

问题描述:

我有一个站点,我通过ajax使用Web API,该站点在同一个IIS上作为不同站点驻留在同一IIS上,并且这两个应用程序池都不相同。我的web API是在MVC4中,我使用SQL Server进行数据访问,一些web API需要0秒,有些需要2秒到8秒。我的网站集中在Azure服务器上。当100个或更多用户使用该站点时,IIS站点挂起

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

我可以为此问题分配4个工作进程到Web API网站,但不知道如果我将多个工作进程分配给一个站点如何工作。

如果你有什么想法,请与我分享我如何处理上述情况?

+1

任何人都不可能告诉你发生了什么事情,而无需花时间在您的网站上。没有任何关于100个用户的原因 - 它必须是你的代码中的东西。你能否在不同的环境中复制相同的问题?您是否有任何日志记录来确定当超过100个用户时发生了什么? – Fermin

+0

我花了很多时间,但无法找到。可以告诉我,我怎么能找到哪个查询或API挂起我的网站?或死锁问题是否存在.... 如果我做网站园艺的网站,将处理如果工作进程挂起或不? –

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

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

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

我在猜测你使用的是Azure虚拟机(从描述中我发现你可以访问IIS)。如果是这样的话,你可以使用debugdiag捕获进程的挂起转储,并进行自动分析弄清楚你的应用程序代码中发生了什么。

出现问题之前,请着手服务器

  1. 捕获DebugDiag(捕捉连续挂转储)
    • 启动DebugDiag资料收集上安装DebugDiag并转到进程选项卡 debugdiag process tab
    • 重现问题
    • 捕获挂起转储
      • 右键单击w3wp。EXE进程
      • 选择的选项创建完全内存转储 capture full memory hang dump
    • 捕获另一转储后30秒和30又接连秒后
    • 您应该转储文件夹C捕获:\ PROGRAMFILES \ DebugDiag资料\日志\杂项\
    • 右键单击转储文件,并选择选项分析杭 Analyse hang issue

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

如果您在分析时需要任何帮助,请随时用更多的细节更新问题。

+0

感谢您的回复。 是的我正在使用Azure虚拟机,我会尝试服务器挂起时,让你知道 –