Jmeter分布式壓測及踩坑記錄


Jmeter分布式壓測介紹

在工作中使用jmeter做大並發壓力測試的場景下,單機受限內存、CPU、網絡IO,會出現服務器壓力還沒有上去,但是壓測服務器已經由於模擬的壓力太大死機了。為了讓jmeter工具提供更強大的負載能力,jmeter提供了多台機器同時產生負載的機制。

工作節點(slave)配置

工作節點(slave)
負載機(slaves)端口:tcp 1099

  • jmeter.properties:
    • 關閉SSL:server.rmi.ssl.disable=true
  • system.properties
    • 添加java.rmi.server.hostname=192.168.12.106 (IP為slave機器IP)
  • 運行:jmeter-server

Windows:

ip地址為負載機的IP


如果彈出是否允許防火牆,點擊允許
Linux:
進入到Jmeter bin目錄下
vim jmeter.properties

vim system.properties

IP地址為負載機的IP
./jmeter-server

控制節點(master)配置

控制節點(master):
端口:udp 4445

  • jmeter.properties
    • 添加負載機ip:remote_hosts=192.168.12.106,192.168.12.107 (IP為所有slave機器IP,以英文,分隔)
    • 關閉SSL:server.rmi.ssl.disable=true

vim jmeter.properties

vim jmeter.properties

./jmeter.sh

分布式壓測

如圖,可選擇相應的遠程服務器運行,活動點擊遠程啟動所有,同時在所有遠程機器上運行

注,Jmeter的並發對所有遠程機器都是單獨進行的,比如設置並發數為2,Jmeter會對所有遠程機器的並發都是2,而控制節點實際的並發數是所有遠程機器的並發之和
如下圖,設置2個並發

同時運行2個遠程機器,實際並發數為4

命令行運行:

$ jmeter -n -t baidu.jmx -l test_baidu.jtl -R 192.168.12.106,192.168.12.107
Creating summariser <summary>
Created the tree successfully using baidu.jmx
Configuring remote engine: 192.168.12.106
Configuring remote engine: 192.168.12.107
Starting distributed test with remote engines: [192.168.12.106, 192.168.12.107] @ Sun Feb 21 01:02:32 CST 2021 (1613840552118)
Remote engines have been started:[192.168.12.106, 192.168.12.107]
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary +      1 in 00:00:01 =    1.8/s Avg: 390 Min: 390 Max: 390 Err:     0 (0.00%) Active: 2 Started: 2 Finished: 0
summary +      3 in 00:00:22 =    0.1/s Avg: 12219 Min: 343 Max: 21252 Err:     0 (0.00%) Active: 0 Started: 4 Finished: 4
summary =      4 in 00:00:22 =    0.2/s Avg: 9261 Min: 343 Max: 21252 Err:     0 (0.00%)
Tidying up remote @ Sun Feb 21 01:02:55 CST 2021 (1613840575155)
... end of run

注意:如果腳本中有參數化,那么所有salve機器上都必須上傳一份參數化文件,且保證路徑相同!

踩坑記錄:

一、jmeter進行分布式測試,遠程機器來運行腳本,在察看結果樹中的響應數據項為空白
第一步:打開主控機的jmeter--bin目錄下的jmeter.properties文件
image
第二步:查找到mode=Standard 項
image
第三步:將其前邊的注釋去掉,然后保存重啟jmeter,再次運行遠程機器,就可以看到數據了
image

二、jmeter壓力測試報Address already in use: connect錯誤
原因分析:
這個問題的原因是windows端口被耗盡了(默認1024-5000),而且操作系統要 2~4分鍾才會重新釋放這些端口,所以可以增加windows的可用端口來解決。windows端口最大數為65535
解決方法:

修改操作系統注冊表:
1.cmd中,用regedit命令打開注冊表
2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下,
  1 .右擊parameters,添加一個新的DWORD,名字為MaxUserPort
  2 .然后雙擊MaxUserPort,輸入數值數據為65534,基數選擇十進制(如果是分布式運行的話,控制機器和負載機器都需要這樣操作哦)
3.修改配置完畢之后記得重啟機器才會生效

上面這個方法能解決一部分問題。雖然增加了端口數,但壓測的時候2分鍾內發送超過 70000 個請求,還是報了 Address already in use: connect 的問題。

解決該問題有兩種方法,一種是修改Jmeter配置項,一種是修改操作系統注冊表

解決方法一:.

修改Jmeter配置項

不勾選 Use KeepAlive ,該配置默認勾選,去掉勾選后,請求就變為短連接。
image

解決方法二:.

修改操作系統注冊表

1、cmd輸入:regedit
2、找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters
3、新建 QWORD值,name:TcpTimedWaitDelay,value:30(十進制)
4、重啟系統
image
三、分布式壓測時,2台壓測機並發不同步
image
如上圖,2台壓測機加壓時間相差30s左右

原因分析:
由於2台壓測機本地時間不一致導致
解決辦法:
修改2台壓測機本地時間相同
四、分布式壓測時,線程異常停止
image
如上圖,腳本中設置為100並發,但實際壓測時,線程加到100時立即停止了一半的線程
原因分析:
jmeter運行虛擬內存不足
解決辦法:
需要調整jmeter運行虛擬內存
在Jmeter的bin目錄下的啟動腳本jmeter.bat中,添加或修改jvm配置如下參數

if not defined HEAP (
    rem See the unix startup file for the rationale of the following parameters,
    rem including some tuning recommendations
    set HEAP=-Xms3g -Xmx3g -XX:MaxMetaspaceSize=1g
)

image

可視壓測機配置情況加大或減小內存

重新啟動Jmeter,線程啟動正常
image


免責聲明!

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



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