IIS7集成管道:maxConcurrentRequestsPerCPU和requestsQueueLimit设置之间的交互

时间:2011-01-19 16:09:19

标签: asp.net iis iis-7 asp.net-2.0 integrated-pipeline-mode

首先,对IIS7 HTTP请求生命周期和影响性能的各种设置有一个很好的概述:

ASP.NET Thread Usage on IIS 7.0 and 6.0

非常具体地说,在dotNet 4中, maxConcurrentRequestsPerCPU requestsQueueLimit 的默认值设置为5000.例如。相当于:(在aspnet.config中):

<system.web>
   <applicationPool 
      maxConcurrentRequestsPerCPU="5000" 
      maxConcurrentThreadsPerCPU="0" 
      requestQueueLimit="5000" /> (** see note below)
</system.web>

在我看来,在多CPU /核心服务器上,始终会在'perCPU'限制之前调用requestQueueLimit。因此,如果每个CPU最多需要5000个请求,那么我希望requestQueueLimit需要增加到5000 * CPUCount或者只是完全禁用。

我的解释是否正确?如果是这样,我可以禁用requestQueueLimit吗? (将其设为零?)。关于此设置的文档似乎没有解决这个问题(所以我可能会遗漏某些内容或误读?)

**上述文章的旁注:requestQueueLimit命名不佳。它实际上限制了ASP.NET可以同时处理的最大请求数。这包括排队的请求和正在执行的请求。如果“请求当前”性能计数器超过requestQueueLimit,则将拒绝新的传入请求,并显示503状态代码)

2 个答案:

答案 0 :(得分:12)

***我的解释是否正确?

是的,如果要同时执行超过5000个请求,则需要增加requestQueueLimit。 requestQueueLimit限制系统中的请求总数。由于其遗留问题,它实际上是系统中的请求总数,而不是某些队列中的请求数。它的目标是防止服务器由于缺少物理内存,虚拟内存等而翻倒。当达到限制时,传入的请求将收到快速的503“服务器太忙”响应。顺便说一句,系统中的当前请求数由“ASP.NET \ Requests Current”性能计数器公开。

***我可以禁用requestQueueLimit吗? (将其设为零?)

您可以通过将其设置为较大的值(如50000)来有效地禁用它。您必须在aspnet.config文件中设置该值我怀疑您的服务器可以处理50000个并发请求,但如果是,则将其加倍。将其设置为零不会禁用它...奇怪的是,这意味着不能同时执行一个请求。

顺便说一句,看起来v4中有一个bug。对于集成模式,如果它在aspnet.config文件中配置为described on MSDN,它只会成功读取requestQueueLimit的值。出于某种原因,当我稍微尝试使用它时,v4并没有从machine.config中读取它。

答案 1 :(得分:2)

您可能需要查看this应用程序的源代码。 IIS调优器是一个开源应用程序,它可以优化IIS设置以获得更好的性能。另一方面,this页面可能对您的问题有用。

相关问题