【问题标题】:Upgrading from IIS 6 to 8.5: increased concurrent requests从 IIS 6 升级到 8.5:增加并发请求
【发布时间】:2015-11-14 14:53:18
【问题描述】:

我们将 Web 服务器从 Windows Server 2003 升级到了 Windows Server 2012 R2。有问题的 Web 应用程序针对 ASP.NET 4.0 运行。 Web 应用程序又与第三方 Web API 通信。

升级后不久,Web API 延迟增加,进而导致明显的超时。我怀疑在 IIS 8.5 上,允许的并发请求数增加了,导致 Web API 无法处理的吞吐量增加。然而:

  • IIS 6 不限制并发请求的数量。帮助文件内容如下:您可以将 Internet 信息服务 (IIS) 配置为允许无限数量的并发连接,或限制它为此网站接受的连接数量。我们目前将此设置为无限制。
  • IIS 6 和 IIS 8.5 都使用 ASP.NET 4,它还能够限制并发请求的数量。两个 IIS 版本都在 machine.config 文件中设置为自动配置;由于两台服务器具有相同的处理器和 RAM 配置,因此它们应该使用相同的设置。

当我们回滚升级时,延迟很快就下降了。不太可能是巧合,因此在其他一切都保持不变的情况下,Windows 2012 R2 或 IIS 8.5 一定有一些内在的东西会影响 Web API。第 3 方 Web API 开发人员确认他们的空间没有任何变化,很遗憾我无法收集到任何其他信息。

我检查了版本 6 和 8.5 的 IIS 日志:每秒、每分钟和每小时的平均(和中值)请求表明在 IIS 8.5 上处理的请求更多(我使用 Log Parser Studio 分析日志) .但是,没有任何迹象表明应该如此。有没有人有任何见解或建议?如果有控制这一点的设置,那么现在我希望 Web 应用程序在 Windows Server 2003 和 2012 R2 上表现相同。

【问题讨论】:

    标签: asp.net iis-6 windows-server-2003 windows-server-2012-r2 iis-8.5


    【解决方案1】:

    由于每个新请求都是在线程池中的新工作线程上处理的,因此我查询了线程池限制以验证自动配置的设置是否匹配(aspx 文件):

    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Threading" %>
    <html>
      <body>
        <div>
        <% 
          int workers;
          int io;
          ThreadPool.GetMaxThreads(out workers, out io);
        %>
        The maximum number of worker threads is <%=workers.ToString()%> and 
        the maximum number of IO threads is <%=io.ToString()%>
        </div>
      </body>
    </html>
    

    结果如下(虚拟机有2核):

    • 在 Windows Sever 2003 上,运行 IIS 6:200 个工作线程和 200 个 I/O 线程限制
    • 在 Windows Server 2012 R2 上,运行 IIS 8.5:32767 个工作线程和 1000 个 I/O 线程限制

    这意味着较新的设置能够同时处理更多请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多