即使请求执行低于其限制,为什么请求排队很高?

时间:2013-09-24 05:02:29

标签: .net performance performancecounter act

为什么即使请求执行低于其限制,请求排队也很高?

我们正在使用以下设置

  • 目标框架:.Net 3.5 Framework
  • 应用程序池:.Net Framework v2.0.50727,具有托管管道模式 - 集成
  • 并且,没有CPU是8所以maxconcurrentRequestperCPUx8 = 96
  • RAM:24 GB

使用machine.config和aspnet.config中的默认设置

我们使用ACT进行了测试,并采用了性能计数器。

ASP.NET Apps v2.0.50727(_LM_W3SVC_2_ROOT)\ Requests Executing

enter image description here

ASP.NET v2.0.50727 \ Requests Queued

enter image description here

现在我们进行了以下更改

在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

enter image description here

ASP.NET v2.0.50727 \ Requests Queued

enter image description here

但令人惊讶的是平均。 ACT的每秒响应时间没有改善。

enter image description here

所以我有以下问题......

1)为什么即使执行请求低于其限制(在我的情况下,CPU x maxconcurrentrequestperCPU = 8 x 12 = 96),还是有请求排队?

2)即使对aspnet.config,machine.config进行更改并提供应用程序池队列限制= 5000,为什么会出现请求排队?

3)为什么ACT响应时间没有改善,因为请求执行计数器更高?

任何帮助表示赞赏!!

谢谢,

Sandeepkumar Gupta

1 个答案:

答案 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对这些负载没有很好的响应。