如何通过TCP增加.NET远程处理使用的线程数



我们正在努力增加.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,并且不会更改任何一个最小值。(链接)

最新更新