首先,这里对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/核心服务器上,这里的requestQueueLimit总是在“perCPU”限制之前调用。因此,如果每个CPU最多需要5000个请求,那么我希望requestQueueLimit需要增加到5000 * CPUCount或完全禁用。

我的解释正确吗?如果可以,我可以禁用requestQueueLimit吗? (将其设置为零?)。关于此设置的文档似乎没有解决此问题(因此,我可能遗漏了某些东西或误读了吗?)

**以上文章的旁注:requestQueueLimit的名称不正确。实际上,它限制了ASP.NET可以同时服务的最大请求数。这既包括排队的请求,也包括正在执行的请求。如果“Requests Current”性能计数器超过requestQueueLimit,则将使用503状态代码拒绝新的传入请求)

最佳答案

***我的解释正确吗?

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

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

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

顺便说一句,v4中似乎有一个错误。对于集成模式,仅当在aspnet.config文件中将requestQueueLimit的值配置为described on MSDN时,它才成功读取该值。出于某种原因,当我稍早进行试验时,v4并未从machine.config中读取它。

10-08 09:04