【问题标题】:IIS Performance "Architecture"IIS 性能“架构”
【发布时间】:2011-10-21 08:27:05
【问题描述】:

我只是想知道什么会有最好的表现。

假设我们有 3 台物理服务器,每台服务器有 32 核和 64GB 内存,应用程序是“标准”asp.net 应用程序。负载平衡已经到位。

设置 1# - 一个应用程序消耗所有 - 一台 IIS 服务器,每台物理服务器上运行 1 个应用程序。 (总共 3 个应用程序“端点”)

设置 2# - 共享资源 - 一个 IIS 服务器在一个 webfarm 中有 16 个应用程序。 (总共 48 个应用程序“端点”)

设置 3# - 虚拟化 虚拟化:15 个虚拟服务器(总共 45 个应用程序端点)

什么性能最好,为什么?

【问题讨论】:

  • 应用程序更受 CPU 限制还是 IO 限制?我想这将是 IO 绑定的,因为 Web 应用程序通常会这样做

标签: c# asp.net performance iis


【解决方案1】:

这取决于!很大程度上取决于应用程序在做什么以及它在哪里花费时间。

但从广义上来说:

如果应用程序是受计算约束的 - 即从数据库等外部来源检索数据所花费的时间是有限的 - 那么在大多数情况下,设置 #1 可能是最快的。 IIS 本身是高度多线程的,并且赋予它对机器资源的控制权将允许它自我调整。

如果应用程序是数据绑定的 - 即每个请求所花费的时间超过(比方说)40% 用于获取和等待数据 - 那么设置 #2 可能会更好.对于执行同步进程内数据库访问的编写不太好的应用程序尤其如此:即使一个线程正在等待数据库访问完成,它仍然在消耗资源。

正如这里所讨论的:How to increase thread-pool threads on IIS 7.0 你最终会用完线程池线程。但是,正如 MSDN 上所讨论的:http://blogs.msdn.com/b/david.wang/archive/2006/03/14/thoughts-on-application-pools-running-out-of-threads.aspx 通过创建多个 IIS 工作进程,您实际上只是在掩盖更大的潜在问题的裂缝。

除非有其他原因(例如可管理性),否则我不推荐设置 #3,因为在整个虚拟机中管理额外操作系统的开销相当可观。

所以:监控您的系统,使用 MiniProfiler (http://code.google.com/p/mvc-mini-profiler/) 之类的工具找出代码中的问题所在,并尽可能使用异步非阻塞调用。

【讨论】:

    【解决方案2】:

    这实际上取决于您的应用程序,您必须针对每种架构进行设计并测试您的设置。一些应用程序将在设置 1 上快速运行,而不是在其他设置上运行,反之亦然。您可以在 iis 中优化更多性能。关键是您设计的应用程序可用于监控和扩展。

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 2012-08-27
      • 2011-12-21
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多