Windows time_wait过多解决办法

1、查看可用端口数

以下是我在win7下查看的结果

  1. C:Users hinkpad>netsh int ipv4 show dynamicportrange tcp
  2. 协议 tcp 动态端口范围
  3. ---------------------------------
  4. 启动端口 : 1025
  5. 端口数 : 13976

win2008下经查是 49152 through 65535 ,可用端口数16384个。

2、netsh命令修改可用端口数

  1. netsh int ipv4 set dynamicport tcp start=2000 num=63000
  2. netsh int ipv4 set dynamicport udp start=2000 num=63000
  3. netsh int ipv6 set dynamicport tcp start=2000 num=63000
  4. netsh int ipv6 set dynamicport udp start=2000 num=63000

3、time_wait超时时间调整

regedit打开注册表,添加

  1. HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
  2. MaxUserPort”=dword:0000fffe
  3. 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值

  1. HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters
  2. On the Edit menu, click New, DWORD Value
  3. Value nameTcpTimedWaitDelay
  4. 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 秒。
请点击这里查看详细信息。

原文地址:https://www.cnblogs.com/asdyzh/p/15190323.html