我们正在努力增加.NET远程处理通过TCP使用的线程数量。我们已经尝试更改ThreadPool.SetMinThreads,但我们的压力测试显示,.NET远程处理只能处理大约100个并发请求。(但这不是硬性限制)。在任务管理器中,我们可以看到远程处理服务器进程线程数从11增长到大约80,然后在压力测试后回落到11。我们正在运行ASP.NET 4.0应用程序。
总结一下。远程处理服务器由windows服务托管,远程处理客户端由IIS托管。要执行压力测试,您可以使用ApacheBench来调用远程客户端,远程客户端调用远程服务器。您观察到,尽管您增加了远程处理服务器上线程池中的最大线程数,但远程处理服务器处理的并发请求不超过100个。
如果我说的都是真的,我认为这里缺少一件事,即IIS也有可用于处理请求的线程的限制。您可以从ApacheBench向远程处理客户端发送1000个请求,但只能同时处理其中的100个请求。我怀疑这可能是一个原因。
为了增加IIS的线程数量,我建议您尝试:
- 检查配置(请参阅此问题)
- 尝试在IIS上使用
SetMinThreads
我的最后一条评论是,你必须记住,线程池中线程数量太少或线程数量太高都不好。这两种情况都会影响表现。
您是否确定瓶颈是线程,而不是网络连接。。?默认情况下,.net为每个远程IP提供的套接字数量相当有限。这适用于远程处理、http(WCF、web服务客户端)等。
如果你看到的是system.net/connectionManagement,你可以在你的应用config/web.config中覆盖它,例如:
<configuration>
...
<system.net>
<connectionManagement>
<add address="*" maxconnection="1000"/>
</connectionManagement>
</system.net>
有关该配置设置的更多详细信息,请访问此处:https://msdn.microsoft.com/en-us/library/fb6y0fyc%28v=vs.110%29.aspx
检查SetMinThreads的返回值。
如果指定负数或大于活动线程池线程的最大数量(使用GetMaxThreads获得)的数字,SetMinThreads将返回false,并且不会更改任何一个最小值。(链接)