为什么即使请求执行低于其限制,请求排队也很高?
我们正在使用以下设置
使用machine.config和aspnet.config中的默认设置
我们使用ACT进行了测试,并采用了性能计数器。
ASP.NET Apps v2.0.50727(_LM_W3SVC_2_ROOT)\ Requests Executing
ASP.NET v2.0.50727 \ Requests Queued
现在我们进行了以下更改
在aspnet.config中
<system.web>
<applicationPool maxConcurrentRequestsPerCPU="5000" maxConcurrentThreadsPerCPU="0" requestQueueLimit="5000"/>
</system.web>
在machine.config
中<system.web>
<processModel autoConfig="false" maxWorkerThreads="4095" maxIoThreads="4095" minWorkerThreads="2047" minIoThreads="2047" />
</system.web>
并提供应用程序池队列限制= 5000 现在我们有相对较少的请求排队和高请求执行,如下面的快照描述!!
ASP.NET Apps v2.0.50727(_LM_W3SVC_2_ROOT)\ Requests Executing
ASP.NET v2.0.50727 \ Requests Queued
但令人惊讶的是平均。 ACT的每秒响应时间没有改善。
所以我有以下问题......
1)为什么即使执行请求低于其限制(在我的情况下,CPU x maxconcurrentrequestperCPU = 8 x 12 = 96),还是有请求排队?
2)即使对aspnet.config,machine.config进行更改并提供应用程序池队列限制= 5000,为什么会出现请求排队?
3)为什么ACT响应时间没有改善,因为请求执行计数器更高?
任何帮助表示赞赏!!
谢谢,
Sandeepkumar Gupta
答案 0 :(得分:0)
好像你按照Thomas L. Marquardt所描述的那样做了所有事情,你甚至增加了minWorkerThreads和minIoThreads。
有一个关于connectionManagement / maxconnection的有趣内容可能会影响到你
通常,使用默认配置运行效果最佳。然而, 具有可测量延迟的应用程序,例如延迟为100 将与后端Web服务通信时的毫秒数 通过一些配置更改,性能更佳。
然后他建议
如果您的ASP.NET应用程序使用的是Web服务(WFC或ASMX)或 System.Net可以通过HTTP与后端进行通信 增加connectionManagement / maxconnection。对于ASP.NET 应用程序,autoConfig功能限制为12 * #CPU。 这意味着在四触发器上,最多可以有12 * 4 = 48 并发连接到IP端点。
可悲的是他补充道。
如果您的应用程序在启动时看到大量并发请求或者有突发性负载,那么并发性会突然增加, 您将需要使应用程序异步,因为CLR ThreadPool对这些负载没有很好的响应。