3

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

我们正在使用以下设置

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

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

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

ASP.NET 应用程序 v2.0.50727(_LM_W3SVC_2_ROOT)\请求执行

在此处输入图像描述

ASP.NET v2.0.50727\Requests 排队

在此处输入图像描述

现在我们进行了以下更改

在 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>

并提供 Application Pool Queue Limit=5000 现在我们的请求队列相对较少,并且执行的请求较高,如下图所示!!

ASP.NET 应用程序 v2.0.50727(_LM_W3SVC_2_ROOT)\请求执行

在此处输入图像描述

ASP.NET v2.0.50727\Requests 排队

在此处输入图像描述

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

在此处输入图像描述

所以我有以下问题......</p>

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

2) 即使更改aspnet.config、machine.config 并提供Application Pool Queue Limit=5000,为什么会观察到请求排队?

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

任何帮助表示赞赏!

谢谢,

桑迪普库马尔·古普塔

4

1 回答 1

0

似乎您按照Thomas L. Marquardt的描述做了所有事情,甚至增加了 minWorkerThreads 和 minIoThreads。

有一篇关于 connectionManagement/maxconnection 的有趣文章可能会影响您

一般来说,使用默认配置运行效果最好。但是,具有可测量延迟的应用程序,例如与后端 Web 服务通信时的延迟为 100 毫秒,只需更改一些配置即可获得更好的性能。

然后他推荐

如果您的 ASP.NET 应用程序使用 Web 服务(WFC 或 ASMX)或 System.Net 通过 HTTP 与后端通信,您可能需要增加 connectionManagement/maxconnection。对于 ASP.NET 应用程序,autoConfig 功能将其限制为 12 * #CPU。这意味着在 quad-proc 上,您最多可以有 12 * 4 = 48 个到 IP 端点的并发连接。

可悲的是,他补充说

如果您的应用程序在启动时看到大量并发请求或有突发负载,其中并发突然增加,您将需要使应用程序异步,因为 CLR 线程池无法很好地响应这些负载。

于 2017-02-28T22:30:17.837 回答