1、查看可用端口数
以下是我在win7下查看的结果
- C:Users hinkpad>netsh int ipv4 show dynamicportrange tcp
- 协议 tcp 动态端口范围
- ---------------------------------
- 启动端口 : 1025
- 端口数 : 13976
win2008下经查是 49152 through 65535 ,可用端口数16384个。
2、netsh命令修改可用端口数
- netsh int ipv4 set dynamicport tcp start=2000 num=63000
- netsh int ipv4 set dynamicport udp start=2000 num=63000
- netsh int ipv6 set dynamicport tcp start=2000 num=63000
- netsh int ipv6 set dynamicport udp start=2000 num=63000
3、time_wait超时时间调整
regedit打开注册表,添加
- HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
- “MaxUserPort”=dword:0000fffe
- “TcpTimeWaitDelay”=dword:0000005 (缩短为5秒)
1、修改可用端口范围
打开注册表--定位到 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters --编辑新建DWORD Value ,新增MaxUserPort
Value data: Enter a decimal value between 5000 and 65534 here
需要特别注意,修改完成后,需要重启主机生效。
2、修改time_wait值
- HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
- On the Edit menu, click New, DWORD Value
- Value name:TcpTimedWaitDelay
- Value data :<Enter a decimal value between 30 and 300 here>
默认值是240秒(可用范围是30-300),这里修改为30秒后,重启系统使修改生效。
windows下的解决方案
1.查看一下占用情况.在cmd输入命令
netstat -ano | findstr "3306"
发现 Mysql 的 3306 端口存在大量 TIME_WAIT
状态连接,考虑到近期考勤人数的突然增多,且指纹机打卡为实时上传等原因,初步猜测是在短时间内指纹机大量请求接口操作数据库,而端口并未释放所导致。
解决方法:
修改Mysql配置
[mysqld] # 服务器关闭交互式连接前等待活动的秒数 interactive_timeout=30 # 服务器关闭非交互连接之前等待活动的秒数 wait_timeout=30
注意:需要同时配置interactive_timeout与wait_timeout才可生效!
修改Windows服务器TCP连接配置
由于Windows下默认Socket连接为5000个,且预设TIME_WAIT时间为4分钟。我们同时需要修改服务器配置。
打开注册表 regedit
找到路径 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
在该路径下修改或新建注册表
类型: DWORD值
名称:MaxUserPort
值(十进制):65543
类型: DWORD值
名称:TcpTimedWaitDelay
值(十进制):30
默认的动态端口范围:
在Windows vista和windows server 2008以前的系统中动态的客户端端口范围是1025到5000;在Windows vista和windows server 2008中,为了遵守IANA的推荐,把范围扩展成49152到65535。在Windows vista和windows server 2008的环境中,可以用如下命令查看这些配置:
netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp
netsh int ipv6 show dynamicport tcp
netsh int ipv6 show dynamicport udp
使用如下命令可以重新配置:
netsh int set dynamic start=number num=range
简单的例子如下:
netsh int ipv4 set dynamicport tcp start=10000 num=1000
netsh int ipv4 set dynamicport udp start=10000 num=1000
netsh int ipv6 set dynamicport tcp start=10000 num=1000
netsh int ipv4 set dynamicport udp start=10000 num=1000
如上所示,可以为每种传输层协议及每个版本的IP协议进行单独的设置,start的最小值是1025,num指的是范围,最小值是255。
请点击这里查看详细信息。
通过注册表配置动态分配端口的最大值:
在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters里加上如下的键值:
Value Name: MaxUserPort
Value Type: DWORD
Value data: 65534
Valid Range: 5000-65534 (decimal)
Default: 0x1388 (5000 decimal)
Description: This parameter controls the maximum port number that is used when a program requests any available user port from the system. Typically, ephemeral (short-lived) ports are allocated between the values of 1024 and 5000 inclusive. After the release of security bulletin MS08-037, the behavior of Windows Server 2003 was changed to more closely match that of Windows Server 2008 and Windows Vista
请点击这里查看详细信息。
端口重用
此外,每个动态分配的端口号在连接关闭后,需要等待一段时间才能重新使用,可以在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters中加上如下的键值来配置:
TcpTimedWaitDelay
项:TcpipParameters
数值类型:REG_DWORD - 时间(以秒为单位)
有效范围:30-300(十进制)
默认值:0x78(十进制 120)
描述:此参数确定连接在关闭时保持 TIME_WAIT 状态的时长。只要连接处于 TIME_WAIT 状态,便不能重新使用套接字对。此状态又称为“2MSL”状态。根据 RFC793 规范,此值应是网络上最大段生存期的两倍。有关更多信息,请参见 RFC793。注意:在 Microsoft Windows 2000 中,它的默认值为 240 秒。而在 Windows XP 和 Microsoft Windows Server 2003 中,IPv4 堆栈的默认值已更改为 120 秒,以便提高性能。IPv6 堆栈的默认值为 240 秒。
请点击这里查看详细信息。