ASP.NET Core SignalR Websocket连接限制

时间:2018-07-09 09:54:27

标签: asp.net-core signalr signalr.client asp.net-core-signalr

我使用Microsoft.AspNetCore.SignalR.Client进行以Windows Server 2016标准托管的SignalR(ASP.NET Core)应用程序的负载测试。 已安装Dotnet Core Hosting 2.1.1

我创建的连接数不能超过3000(2950-3050)。

已按如下所述尝试过推荐:

UseKestrel添加了限制(如果我将值设置为100或1000,这似乎可行):

var host = new WebHostBuilder()
    .UseKestrel(options =>
    {
        options.Limits.MaxConcurrentConnections = 50000;
        options.Limits.MaxConcurrentUpgradedConnections = 50000;
    })

通过添加以下内容来更改所有aspnet.config文件:

<system.web>
    <applicationPool maxConcurrentRequestsPerCPU="50000" />
</system.web>

执行此命令:

cd%windir%\ System32 \ inetsrv \ appcmd.exe设置配置/section:system.webserver/serverRuntime / appConcurrentRequestLimit:50000

Web服务\当前连接-最大连接添加了性能计数器。并且最大连接数增加到3300并停止。

服务器日志中没有例外。但是我感觉系统上有一些限制。

服务器IIS日志仅包含以下内容:

  

GET / messageshub   id = A_3x1sH9kHM1Rc3oPSgP6w   80-172.20.192.11--404 0 0 3

客户端异常基本上如下:

  

System.Net.Http.HttpRequestException:将内容复制到   流。 ---> System.IO.IOException:无法从   传输连接:现有连接被强制关闭   远程主机。

1 个答案:

答案 0 :(得分:0)

在Windows上,您可能会遇到动态端口分配问题。 Windows默认情况下有5000个端口号可随时分配给TCP连接,其中1024个是为操作系统本身保留的,最终将为3977个端口免费分配。 在您的情况下,您提到的数字是3300,但有可能建立了3300个连接,其中有677个为Time_Waited。 无论如何,我建议使用

netstat -an | find 'Established" -c 
netstat -an | find 'TIME" -c 
netstat -an | find 'CLOSED" -c 

为了在收到IO异常时弄清已建立的&time_wait&close_wait连接的数量,如果数量接近5000,只需将其添加到注册表中,然后重新启动并再次测试

  [HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters]
MaxUserPort = 5000 (Default = 5000, Max = 65534)