12

首先,这里对 IIS7 HTTP 请求生命周期和影响性能的各种设置进行了很好的概述:

IIS 7.0 和 6.0 上的 ASP.NET 线程使用情况

非常特别的是,在 dotNet 4 中,maxConcurrentRequestsPerCPUrequestsQueueLimit的默认值设置为 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 状态代码)

4

2 回答 2

13

***我的解释正确吗?

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

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

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

顺便说一句,v4 中似乎有一个错误。对于集成模式,只有按照MSDN 中的描述在aspnet.config 文件中配置了 requestQueueLimit 的值,它才会成功读取该值。出于某种原因,当我之前尝试使用 v4 时,它并没有从 machine.config 中读取它。

于 2011-01-26T19:55:59.017 回答
2

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

于 2011-01-20T18:34:57.710 回答