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

时间:2015-11-14 14:53:19

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

我们将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。第三方Web API开发人员确认他们的空间没有任何变化,遗憾的是我没有任何其他信息可以收集。

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

1 个答案:

答案 0 :(得分:0)

由于每个新请求都是在线程池的新工作线程上处理的,因此我查询了线程池限制,以验证自动配置的设置是否匹配(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 worker和200 I / O线程限制
  • 在Windows Server 2012 R2上,运行IIS 8.5:32767 worker和1000 I / O线程限制

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