从 IIS 6 升级到 8.5:并发请求增加

Upgrading from IIS 6 to 8.5: increased concurrent requests

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

通信

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

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

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

由于每个新请求都是在线程池的新工作线程上处理的,因此我查询了线程池限制以验证自动配置的设置是否匹配(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 线程限制

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