我使用Windows 2016标准使用SignalR (ASP.NET Core)应用程序进行负载测试。Dotnet内核托管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 32\inetsrv\ appcmd.exe set config /节:system.webserver/serverRuntime /appConcurrentRequestLimit:50000
为 performance \当前连接添加了性能计数器-最大连接。最大连接增加到3300并停止。
服务器日志中没有例外情况。但我觉得制度上是有一些限制的。
服务器IIS日志仅包含以下内容:
/messageshub id=A_3x1sH9kHM1Rc3oPSgP6w 80 - 172.20.192.11 -- 404 0 0 3
客户端异常基本上如下:
System.Net.Http.HttpRequestException:将内容复制到流中时出错。-> System.IO.IOException:无法从传输连接读取数据:现有连接被远程主机强制关闭。
发布于 2019-01-20 09:54:19
在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)
https://stackoverflow.com/questions/51242689
复制相似问题