Windows time_wait過多解決辦法


1、查看可用端口數

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

 

  1. C:\Users\thinkpad>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_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  2. MaxUserPort”=dword:0000fffe
  3. TcpTimeWaitDelay”=dword:0000005 (縮短為5秒)

 

1、修改可用端口范圍

打開注冊表--定位到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters --編輯新建DWORD Value ,新增MaxUserPort

Value data: Enter a decimal value between 5000 and 65534 here

需要特別注意,修改完成后,需要重啟主機生效。

2、修改time_wait值

 

  1. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  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_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
在該路徑下修改或新建注冊表
類型: 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_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters里加上如下的鍵值:
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_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters中加上如下的鍵值來配置:
TcpTimedWaitDelay
項:Tcpip\Parameters
數值類型: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 秒。
請點擊這里查看詳細信息。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM