【问题标题】:IIS site goes hang when 100 or more users use the site当 100 个或更多用户使用该站点时,IIS 站点会挂起
【发布时间】:2018-01-07 23:26:58
【问题描述】:

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

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

我能否为此问题为 Web API 站点分配 4 个工作进程,但如果我将多个工作进程分配给一个站点,我不知道它是如何工作的。

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

【问题讨论】:

  • 如果不花时间浏览您的网站,任何人都无法告诉您正在发生的事情。没有关于 100 个用户导致此问题的原因 - 它必须是您的代码中的某些内容。您可以在不同的环境中复制相同的问题吗?当超过 100 个用户时,您是否有任何日志记录来确定发生了什么?
  • 我花了很多时间但找不到。你能告诉我,我怎么能找到哪个查询或 API 挂起我的网站?还是存在死锁问题....如果我为该站点进行网络园艺,该站点将处理工作进程是否挂起?

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


【解决方案1】:

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

在问题发生之前,请先在服务器上安装DebugDiag

  1. 捕获DebugDiag(捕获连续的挂起转储)
    • 启动 DebugDiag 集合 并转到进程选项卡
    • 重现问题
    • 捕获挂起转储
      • 右键单击w3wp.exe进程
      • 选择创建完整内存转储选项
    • 30 秒后捕获另一个转储,30 秒后捕获另一个转储
    • 您应该在文件夹 C:\ProgramFiles\DebugDiag\Logs\Misc\ 中捕获转储
    • 右键单击转储文件并选择分析挂起选项

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

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

【讨论】:

  • 感谢您的回复。是的,我正在使用 Azure VM,我会在服务器挂起时尝试​​并通知您
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多