解决方案:
扩大端口数量:
设置 windows下最大端口数 65534,尝试将端口资源数设置为最大,windows最大能支持65534个端口。
步骤:
1、使用 win + R 快捷键打开 cmd,输入 regedit 命令打开注册表
2、 找到计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters目录。
3、右击 Parameters,添加一个新的 DWORD,命名为MaxUserPort。
4、然后双击 MaxUserPort,输入 65534,基数选择 十进制(如果是分布式运行的话,控制机器和负载机器都需要这样操作)。
5、 修改配置完毕后, 需要重启 windows 才会生效
扩展1:
**说明:**
**windows下的端口 Time_Wait 导致端口无法使用**
**解决方案:**
1: 使用 win + R 快捷键打开 cmd,输入 regedit 命令打开注册表。
2: 找到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters目录。
3: 右击 parameters,添加一个新的DWORD,命名为 TcpTimedWaitDelay,将值设置为30, 缩短 TIME_WAIT 的等待时间。
4: 重启windows,配置项生效。
扩展2:
**说明:**
Close_Wait 会占用一个连接,网络可用连接小。当数量过多时,可能会引起网络性能下降,
并占用系统非换页内存。尤其是在有连接池的情况下(比如 HttpRequest),会耗尽连接池的网络连接数,导致无法建立网络连接。
**CLOSE_WAIT 产生原因**
一般情况下是因为 TCP 连接没有调用关闭方法,需要应用来处理网络链接关闭。
如果是Web请求,经常是因为 Response 的 BodyStream 没有调用 Close。举个例子,Widnows 下使用 HttpWebRequest
一定要保证 GetRequestStream 和 GetResponse 对象关闭,否则容易造成连接处于 CLOSE_WAIT 状态。
TCP的 KeepLive 功能, 操作系统 默认 7200秒 (2小时) 自动清理一次 CLOSE_WAIT 的连接,满足不了高并发下的端口需求数。支持自定义配置。
**解决方案:**
1: 使用 win + R 快捷键打开 cmd,输入 regedit 命令打开注册表。
2: 找到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters目录。
3: 在该目录下添加新的配置项。设置合理的Keepalive参数。
"KeepAliveTime"=dword:006ddd00
"KeepAliveInterval"=dword:000003e8
"MaxDataRetries"="5"
4: 重启windows,配置项生效
|