Jmeter分佈式測試
本文總結了一些Jmeter執行性能測試時常見的問題。通常請求報java錯誤時,就需要在自己腳本或是運行環境上找原因了。
1. TCP連接數耗盡
- 在執行Jmeter性能測試腳本過程中,當線程數>500就會遇到這幾種錯誤,而且佔總數很多。
Non HTTP response code: java.net.BindException/Non HTTP response message: Address already in use: connect
Non HTTP response code: java.net.ConnectException/Non HTTP response message: Connection refused: connect
包括不限於上面2個。
2. 這種情況還又一種表現是服務器的CPU忽高忽低。那是因爲你的機器本身就無法把請求發出去了。像左圖這樣。
3. 這時由於windows系統會默認TCP連接數不夠用。我知道的說法是默認連接數只有1000,每4分鐘回收一次,不確定具體數值,但確實需要在註冊表裏修改最大連接數與延遲時間。
- Win + R, 運行regedit
- 進入 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Performance
- 對着Performance右鍵,新建QWORD(32位) ,名稱: MaxUserPort, 值: 65534(十進制)
- 對着Performance右鍵,新建QWORD(32位) ,名稱: TcpTimedWaitDelay, 值: 30(十進制)
- 調好之後再跑一下,效果立竿見影。
2. JVM內存溢出
-
有的時候,執行腳本過程中,突然cmd框裏不動了,然後又一個報錯。還會在jmeter程序根目錄生成一個幾百兆的.h***開頭的文件。(具體報錯和文件名記不清了,以後補上)。通常多線程組,多用戶數,長時間,客戶機內存小會產生這樣的問題。這是因爲啓動Jmeter時,JVM分配給jmeter的內存不足以支撐跑完這個腳本。
-
我們可以修改jmeter.bat文件裏的相關參數來避免這個問題。
- 編輯你平時啓動jmeter gui的那個文件,也就是/bin/jmeter.bat文件。
- 搜索xms找到對應的這一行,根據你的實際情況修改這3個參數。(個人本地8G配置如圖)
xms: 初始內存
xmx: 最大內存
MaxMetaspaceSize: 最大內存的永久保存區域
3. 客戶機所在網絡帶寬限制
最近在測試一個項目。要求併發非常高。我用5臺機器模擬6k併發,效果是最好的。達到1w併發時,TPS下降的厲害,響應時間也慘不忍睹。但是通過查看服務器CPU之後,發現CPU並不高。後來排查到原因是因爲,我的5臺客戶機1w個線程把公司局域網帶寬佔的滿滿的。自然就網速非常的慢了。(發現的契機是跑腳本時,公司wifi訪問系統奇慢,但4g訪問就正常)。所以就算有足夠的客戶機參與分佈式測試。可能帶寬的限制也會影響最終結果的準確性。