我使用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:无法从 传输连接:现有连接被强制关闭 远程主机。
答案 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)