【问题标题】:ASP.NET website becomes unresponsive under loadASP.NET 网站在负载下变得无响应
【发布时间】:2014-01-26 21:42:03
【问题描述】:

我们的产品由两个组件组成。在 IIS 8 下托管的 WEB API 站点,我称之为 API。该站点为多个站点提供服务,但目前只有一个站点在使用它。该站点的另一个组件是 ASP.NET MVC (.NET 4) 站点,它是目前 API 站点的唯一客户端。我们称之为WEB。

当我们将 API 和 WEB 部署到具有生产能力的单个服务器上时,一切都很好,直到并发用户数超过 16!然后站点变得无响应,这意味着我们没有收到超时(或任何其他)错误,并且浏览器正在等待响应。

我们使用在线负载测试网站在暂存环境中重现了相同的问题。当并发用户数超过 12 或 16(或更高)时,网站再次变得无响应。

当这种情况发生时,网站会死掉大约 10 分钟,然后才会响应。我猜这是因为 App Poll 被回收了?

问题是我如何知道问题出在 API 还是 WEB 中?那么可能的问题是什么? WEB完全依赖API,不直接连接任何数据库,API在AWS上使用MySql。

【问题讨论】:

    标签: asp.net-mvc iis


    【解决方案1】:

    您是否查看过是什么消耗了您的所有资源?内存是否已满?处理器满了?你的瓶颈在哪里? 16 个用户不应该以任何方式吃掉一个应用程序池中的所有线程。我猜想某些进程正在耗尽您服务器上的所有内存,使其无响应。使用 Process Explorer 或任何监视服务器资源的程序找出该进程是什么。

    【讨论】:

    • 感谢 Jason,服务器 CPU 速率上升到 50%,然后在站点崩溃时下降到 5%!内存使用量永远不会超过 3GB(15GB)。我运行了 LeanSentry 诊断工具,它说问题出在“global.asax/ExecuteRequestHandler”。会不会是API没有及时响应,导致WEB的应用池被新进来的请求塞满了?
    【解决方案2】:

    您是否尝试在 IIS 中将更多工作进程添加到应用程序池? 我们在 MVC 网站上遇到了一些性能问题,我们通过简单地添加更多工作进程来解决这些问题。

    【讨论】:

    • 如何添加更多工作进程?是否等于增加app poo中的最大线程数?这不就像只是在问题上贴创可贴吗?我在 Stackoverflow 上读到使用 AsyncController 可能会有所帮助,这是真的吗?
    • 我在服务器上安装了 LeanSentry 监控工具,从它的报告中我可以看出 IIS 线程池被新的传入请求塞满了,而现有线程正在等待 API(外部 Web 服务)响应。我发现了一个属于 ASP.NET 1 (2004) 的页面,它解释了 MaxIoThreads 配置项的优化值是什么。 (msdn.microsoft.com/en-us/library/ms998549.aspx)。我相信这些值在 .NET 4 中已经发生了变化。有谁知道流程模型设置的新值/公式是什么?
    【解决方案3】:

    正如一些用户在这里指出的那样,问题是线程耗尽(又名线程争用)。我们试图识别和修改任何可能阻塞线程的代码。我们还对 API 和站点级别进行了大量性能改进,以帮助线程快速完成。最后,我们将站点部署到生产环境并获得了可以接受的性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      相关资源
      最近更新 更多