繁体   English   中英

从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无法处理的吞吐量增加了。 然而:

  • IIS 6并没有限制并发请求的数量。 帮助文件显示为: 您可以配置Internet信息服务(IIS),以允许无限数量的并发连接,或限制该网站接受的连接数量。 目前,我们将此设置为无限制。
  • IIS 6和IIS 8.5都使用ASP.NET 4,它也具有限制并发请求数的能力。 两种IIS版本都在machine.config文件中设置为auto-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上具有相同的行为。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM