我使用 Microsoft.AspNetCore.SignalR.Client 对在 Windows Server 2016 标准上托管的 SignalR (ASP.NET Core) 应用程序进行负载测试。
安装了 Dotnet 核心托管 2.1.1
我无法创建超过 3000 (2950-3050) 个连接。
已经尝试过此处描述的建议:
- 如何在.NET Core Web API中配置并发? https://stackoverflow.com/questions/44391268/how-to-configure-concurrency-in-net-core-web-api
- ASP.NET 4.5 中 WebSocket 的性能限制因素? https://stackoverflow.com/questions/9982600/limiting-performance-factors-of-websocket-in-asp-net-4-5
- 在iis 8上设置websocket的并发连接数限制 https://stackoverflow.com/questions/30500495/set-limit-concurrent-connections-for-websocket-on-iis-8
添加了限制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 日志仅包含以下内容:
获取/messageshub
id=A_3x1sH9kHM1Rc3oPSgP6w
80 - 172.20.192.11 - - 404 0 0 3
客户端异常主要有以下几种:
System.Net.Http.HttpRequestException:将内容复制到
溪流。 ---> System.IO.IOException:无法从
传输连接:现有连接被强行关闭
远程主机。
在 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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)