在IIS 10(Windows Server 2016,.NET 4集成模式,经典ASP.NET应用程序)上遇到一个问题,其中maxConcurrentRequestsPerCPU
设置超过5000似乎不适用。但是,将其设置为较低的值具有清晰可见的效果。
我正在使用JMetter进行负载测试。如果我将线程数设置为5000,我会看到100%的成功率,但任何更高的值都有失败率,无论我将maxConcurrentRequestsPerCPU
和requestQueueLimit
设置得多高。例如,使用6000个线程进行测试时,失败率始终为16.6%。
如果我将maxConcurrentRequestsPerCPU
设置为12这样的低值,我会得到几乎99%的失败率,所以我知道下限设置是有效的,只是不会超过5000。
该虚拟机分配了2个内核,因此我认为使用5000 x 2个内核应该能够成功测试10,000个线程。
Aspnet.配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<system.web>
<applicationPool
maxConcurrentRequestsPerCPU="50000"
maxConcurrentThreadsPerCPU="0"
requestQueueLimit="50000"/>
</system.web>
<runtime>
<legacyUnhandledExceptionPolicy enabled="false" />
<legacyImpersonationPolicy enabled="true"/>
<alwaysFlowImpersonationPolicy enabled="false"/>
<SymbolReadingPolicy enabled="1" />
<shadowCopyVerifyByTimestamp enabled="true"/>
</runtime>
<startup useLegacyV2RuntimeActivationPolicy="true" />
</configuration>
什么会覆盖这些设置并强制执行上限5000?
我觉得有一些额外的设置,需要设置为超过5000。
在这一点上,任何帮助/建议都将不胜感激。谢谢。
3条答案
按热度按时间lrl1mhuk1#
我遇到了类似的问题,经过一些挖掘,我相信你正在寻找的设置是在网站配置,称为appConcurrentRequestLimit。我能够测试较低的限制工作的预期,但我没有一个很好的方法来测试超过5000个连接的时刻。我会更新这篇文章,如果/当我击中〉5000个连接在未来。
**更新:**可以确认此设置确实有效。
要更改此值:
1.单击IIS管理器左窗格中的站点。
1.双击右窗格中的“配置编辑器”。
1.从“节”下拉列表中选择“system.webServer/serverRuntime”。
1.设置appConcurrentRequestLimit值(默认值为5000)。
1.单击“操作”窗格中的“应用”。
1.重新启动站点。
dly7yett2#
如果要并发执行5000个以上的请求,则需要增加requestQueueLimit。requestQueueLimit限制系统中的请求总数。由于它的继承性,它实际上是系统中的请求总数,而不是某个队列中的请求数。它的目标是防止服务器由于缺少物理内存、虚拟内存等。当达到该限制时,传入的请求将收到快速的503“服务器忙碌”响应。
hyrbngr73#
请尝试将appConcurrentRequestLimit设置为超过5000