1、查看可用端口數
以下是我在win7下查看的結果
- C:\Users\thinkpad>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_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
- “MaxUserPort”=dword:0000fffe
- “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值
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
- 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_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 秒。
請點擊這里查看詳細信息。