You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单台IIS能否承载10万SignalR连接?1.6万连接报端口占用错如何优化

问题解答

你的判断基本正确,你遇到的报错:

Only one usage of each socket address (protocol/network address/port) is normally permitted

是典型的TCP端口/套接字耗尽导致的WSAEADDRINUSE错误,但你当前的配置存在多处错误,还需要从系统、IIS、SignalR、客户端多侧做优化:


现有配置的核心问题

  • processModel配置完全无效:maxWorkerThreads、maxIoThreads的有效值为单CPU核心最大100,你填写的999999会被系统自动截断为默认值,反而会引发线程调度过载,影响连接处理效率。
  • 你当前卡在16000连接的直接原因是Windows默认临时端口范围限制:默认出站动态端口范围为49152~65535,总共仅16384个可用端口,如果你是在同一台机器上同时运行测试客户端和IIS服务端,客户端发起的出站连接会直接占满所有临时端口,触发报错。

可调整的优化配置

服务端(Windows Server 2016 + IIS 侧)

  1. 修正machine.config配置
    按你服务器的CPU核心数配置参数,以16核心服务器为例:
<system.web>
  <processModel autoConfig="false" maxWorkerThreads="100" maxIoThreads="100" minWorkerThreads="50" minIoThreads="50" />
  <httpRuntime minFreeThreads="90" minLocalRequestFreeThreads="80" />
</system.web>
  1. 调整TCP/IP栈参数
    在注册表路径HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下添加/修改以下DWORD值:
  • MaxUserPort:已设为65535,可保留
  • TcpTimedWaitDelay:已设为30,可保留
  • TcpNumConnections:设为16777214,解除系统默认TCP最大连接数限制
  • EnablePortReuse:设为1,开启端口复用,减少TIME_WAIT状态端口占用
  1. IIS配置调整
  • 对应站点高级设置中,将「最大并发连接数」调整为100000以上
  • 对应应用程序池高级设置:
    • 启动模式设为AlwaysRunning
    • 闲置超时(分钟)设为0
    • 定期回收间隔(分钟)设为0
    • 队列长度设为65535以上
  1. SignalR服务端配置
    在Startup类的服务配置中,调高单连接并发处理限制,关闭不必要的协议支持降低开销。

客户端侧优化

  1. 不要在单台机器上发起10万连接测试:单台设备最多只有6万多可用临时端口,不可能支撑10万出站连接,建议用多台客户端机器分片发起连接测试。
  2. 修正代码端口泄漏问题:每次调用sc.Stop()后主动将connection对象置为null,释放底层套接字资源,避免无效端口占用。
  3. 替换同步阻塞逻辑:将connection.Start().Wait()改为异步await写法,减少线程阻塞开销,提升连接建立效率。

内容的提问来源于stack exchange,提问作者Michal_Drwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:15:03