如何在.NET Core Web API中配置并发?

use*_*632 10 concurrency asp.net-core asp.net-core-webapi

在旧的WCF时代,您可以通过MaxConcurrentCalls设置控制服务并发性.MaxConcurrentCalls默认为16个并发呼叫,但您可以根据需要提高或降低该值.

如何在.NET Core Web API中控制服务器端并发?我们可能需要在我们的情况下限制它,因为太多的并发请求会妨碍整体服务器性能.

Ily*_*kov 15

ASP.NET Core应用程序并发由其Web服务器处理.例如:

红隼

var host = new WebHostBuilder()
    .UseKestrel(options => options.ThreadCount = 8)
Run Code Online (Sandbox Code Playgroud)

建议不要将Kestrel线程计数设置为较大的值,例如1K由于基于Kestrel异步的实现.

更多信息:Kestrel是否使用单个线程来处理Node.js等请求?

ASP.NET Core 2.0 Preview 2中引入了新Limits属性.

您现在可以为以下内容添加限制:

  1. 最大客户端连接
  2. 最大请求体型
  3. 最大请求正文数据速率

例如:

.UseKestrel(options =>
{
    options.Limits.MaxConcurrentConnections = 100;
}
Run Code Online (Sandbox Code Playgroud)

IIS

当Kestrel在反向代理后运行时,您可以调整代理本身.例如,您可以在web.config或中配置IIS应用程序池aspnet.config:

<configuration>
  <system.web>
    <applicationPool
        maxConcurrentRequestsPerCPU="5000"
        maxConcurrentThreadsPerCPU="0"
        requestQueueLimit="5000" />
  </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

当然Nginx和Apache都有自己的并发设置.

  • 有谁知道当请求进入并且服务器已经在运行最大数量的线程时Kestrel Web主机的行为吗? (2认同)