windows下Jmeter壓測端口占用問題(親測有效)


windows下Jmeter壓測端口占用問題

1 報錯信息描述

壓測的初期,在設置了 150qps/s 的並發數下壓測幾分鍾后 Jmeter 就出現了如下報錯。


    JAVA.NET.BINDEXCEPTION: ADDRESS ALREADY IN USE: CONNECT 
  • 1
  • 2

在這里插入圖片描述

4 問題排查

開始考慮的方向是Nginx、PHP、MySQL做了相關限制導致線程被占用, 但是修改對應的配置后發現沒有任何效果,該報錯的還是報錯。 查了一波資料,發現  windows 環境下的端口循環回收需要消耗2~4分鍾。由此猜測可能是由於 windows下壓測端口數有限,端口資源被占滿,沒有及時循環回收,導致報錯。

5 初步解決之擴大端口數量

設置 windows下最大端口數 65534,嘗試將端口資源數設置為最大,windows最大能支持65534個端口。

步驟1

使用 win + R 快捷鍵打開 cmd,輸入 regedit 命令打開注冊表

步驟2  設置 MaxUserPort 數量

2.1 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters目錄。

2.2  右擊 Parameters,添加一個新的 DWORD,命名為MaxUserPort

2.3 然后雙擊 MaxUserPort,輸入 65534,基數選擇 十進制(如果是分布式運行的話,控制機器和負載機器都需要這樣操作)。

2.4 修改配置完畢后, 需要重啟 windows 才會生效。

6 初步實踐

采用上述的解決方案之后,windows 下設置 150qps/s 並發數進行壓測,暫時解決了端口占用的問題。在此基礎上,將壓測的並發數提高至 700qps/s,兩分鍾內達到 66000+ 個請求,數量超過了 65534 端口數,再次出現了同一報錯。

擴大 windows 端口資源數量, 能夠支持 150qps/s 並發數的壓測。 但是在高並發數(700qps/s)的壓測下,即使 windows 端口資源數量設置為最大,也會出現端口占用的問題。

7 深入研究之提高端口使用率

又是一波海量搜索,定位到了兩個影響端口使用率的主要因素,具體如下。

  • windows下的端口 Time_Wait 導致端口無法使用

  • windows下的端口 CLOSE_WAIT 導致端口無法使用

7.1 Time_Wait 解決方案

主要思路是通過縮短 TIME_WAIT 的等待時間,提高端口的使用率。

step1: 使用 win + R 快捷鍵打開 cmd,輸入 regedit 命令打開注冊表。

step2: 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters目錄。

step3: 右擊 parameters,添加一個新的DWORD,命名為 TcpTimedWaitDelay,將值設置為30, 縮短 TIME_WAIT 的等待時間。

step4: 重啟windows,配置項生效。

7.2 CLOSE_WAIT

CLOSE_WAIT 引發問題

Close_Wait 會占用一個連接,網絡可用連接小。當數量過多時,可能會引起網絡性能下降,並占用系統非換頁內存。尤其是在有連接池的情況下(比如 HttpRequest),會耗盡連接池的網絡連接數,導致無法建立網絡連接。

CLOSE_WAIT 產生原因
  • 一般情況下是因為 TCP 連接沒有調用關閉方法,需要應用來處理網絡鏈接關閉。

  • 如果是Web請求,經常是因為 ResponseBodyStream 沒有調用 Close。舉個例子,Widnows 下使用 HttpWebRequest 一定要保證 GetRequestStreamGetResponse 對象關閉,否則容易造成連接處於 CLOSE_WAIT 狀態。

  • TCP的 KeepLive 功能, 操作系統 默認 7200秒 (2小時) 自動清理一次 CLOSE_WAIT 的連接,滿足不了高並發下的端口需求數。支持自定義配置。

CLOSE_WAIT 解決方案

step1: 使用 win + R 快捷鍵打開 cmd,輸入 regedit 命令打開注冊表。

step2: 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters目錄。

step3: 在該目錄下添加新的配置項。設置合理的Keepalive參數。

"KeepAliveTime"=dword:006ddd00 "KeepAliveInterval"=dword:000003e8 "MaxDataRetries"="5" 
  • 1
  • 2
  • 3
  • 4
  • 5

step4: 重啟windows,配置項生效。

8 總結

解決問題的關鍵

敲黑板,划重點

  • 擴大端口數量
  • 提高端口使用率


免責聲明!

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



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