red*_*alx 11 asp.net iis iis-7 asp.net-2.0 integrated-pipeline-mode
首先,有一个很好的概述IIS7 HTTP请求生命周期和影响性能的各种设置:
但非常具体,在dotNet 4中,maxConcurrentRequestsPerCPU和requestsQueueLimit的默认值设置为5000.例如,相当于:(在aspnet.config中):
<system.web>
<applicationPool
maxConcurrentRequestsPerCPU="5000"
maxConcurrentThreadsPerCPU="0"
requestQueueLimit="5000" /> (** see note below)
</system.web>
Run Code Online (Sandbox Code Playgroud)
在我看来,在多CPU /核心服务器上,在'perCPU'限制之前,始终会调用requestQueueLimit.因此,如果每个CPU最多需要5000个请求,那么我希望requestQueueLimit需要增加到5000*CPUCount或者只是完全禁用.
我的解释是否正确?如果是这样,我可以禁用requestQueueLimit吗?(将其设为零?).关于此设置的文档似乎没有解决这个问题(所以我可能会遗漏某些内容或误读?)
**上述文章的旁注:requestQueueLimit命名不佳.它实际上限制了ASP.NET可以同时处理的最大请求数.这包括排队的请求和正在执行的请求.如果"请求当前"性能计数器超过requestQueueLimit,则将拒绝新的传入请求,并显示503状态代码)
小智 12
***我的解释是否正确?
是的,如果要同时执行超过5000个请求,则需要增加requestQueueLimit.requestQueueLimit限制系统中的请求总数.由于其遗留问题,它实际上是系统中的请求总数,而不是某些队列中的请求数.它的目标是防止服务器由于缺少物理内存,虚拟内存等而翻倒.当达到限制时,传入的请求将收到快速的503"服务器太忙"响应.顺便说一下,"ASP.NET\Requests Current"性能计数器公开了系统中当前的请求数.
***我可以禁用requestQueueLimit吗?(设为零?)
您可以通过将其设置为较大的值(如50000)来有效地禁用它.您必须在aspnet.config文件中设置该值我怀疑您的服务器可以处理50000个并发请求,但如果是,则将其加倍.将其设置为零不会禁用它...奇怪的是,这意味着不能同时执行多个请求.
顺便说一句,看起来v4中有一个bug.对于集成模式,如果在aspnet.config文件中配置requestQueueLimit,它只会成功读取它的值,如MSDN所述.出于某种原因,当我在一段时间之前尝试使用它时,v4并没有从machine.config中读取它.
| 归档时间: |
|
| 查看次数: |
8972 次 |
| 最近记录: |