聊聊JMeter分布式壓測部署
使用JMeter開展性能測試,當(dāng)單臺機器無法滿足性能壓測的負載要求時,或者單臺機器的網(wǎng)絡(luò)帶寬存在瓶頸的情況下,可以采用分布式部署的方案來解決這些問題。
JMeter分布式部署方案中,需要一臺作為控制節(jié)點(Master),其余節(jié)點作為執(zhí)行機(Slave)??刂乒?jié)點負責(zé)向執(zhí)行機發(fā)送指令和展示結(jié)果,執(zhí)行機負責(zé)產(chǎn)生負載和向控制節(jié)點返回結(jié)果。

JMeter分布式環(huán)境部署
示例環(huán)境規(guī)劃:
- 控制機:windows系統(tǒng),Master節(jié)點,ip=192.168.2.5;
- 執(zhí)行機:CentOS系統(tǒng),Slave節(jié)點,ip=192.168.2.15;
1. 前提條件
- Master、Slave使用相同的JMeter版本;Master、Slave使用相同的JAVA版本;
- Master、Slave節(jié)點:創(chuàng)建有效的keystore文件或者禁用ssl,這里選擇直接禁用ssl。編輯JMETER_HOME/bin/jmeter.properties設(shè)置server.rmi.ssl.disable=true。

如果需要開啟ssl,請參考Apache JMeter - User's Manual: Remote (Distributed) Testing中的13.1 Setting up SSL章節(jié)進行配置。
2. 執(zhí)行機節(jié)點(Slave)配置
- 設(shè)置rmi.server.hostname,編輯JMETER_HOME/bin/jmeter-server,取消MI_HOST_DEF項的默認(rèn)注釋并修改hostname為本機的IP地址
- MI_HOST_DEF=-Djava.rmi.server.hostname=192.168.2.15
推薦設(shè)置此項,否則可能運行jmeter-server會出現(xiàn)下面的錯誤:
- ./jmeter-server
- Server failed to start: java.rmi.RemoteException: Cannot start.
- localhost.localdomain is a loopback address.
- An error occurred: Cannot start. localhost.localdomain is a loopback
- address.
執(zhí)行JMETER_HOME/bin/jmeter-server啟用服務(wù),如果打印如下的信息表示啟動成功

3. 控制節(jié)點(Master)配置
- 指定Slave節(jié)點,編輯JMETER_HOME/bin/jmeter.properties,將remote_hosts設(shè)置為Slave節(jié)點的IP地址,如果有多臺Slave節(jié)點,以逗號分隔多個IP地址;
- remote_hosts=192.168.2.15
remote_hosts不需要指定端口號,JMeter會自動進行探測
- 多網(wǎng)卡情況,如果Master節(jié)點有多網(wǎng)卡(如安裝了虛擬機就會有個網(wǎng)卡,示例就是在windows機器上安裝了CentOS虛擬機作為Slave,就是多網(wǎng)卡的情況),JMeter會選擇任意網(wǎng)卡嘗試與Slave節(jié)點建立連接,如果選擇錯誤的網(wǎng)卡將無法建立連接。需要通過明確指定IP的方式來解決多網(wǎng)卡的問題,編輯JMETER_HOME/bin/jmeter.bat,在下圖中標(biāo)記的位置添加如下兩條語句,其中server.hostname設(shè)置為可以與Slave連接的IP地址;
- set rmi_host=-Djava.rmi.server.hostname=192.168.2.5
- set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %DDRAW% %rmi_host%

4. 遠程測試調(diào)測
步驟3設(shè)置完成后,重啟JMeter,打開要壓測的腳本文件,運行/遠程啟動菜單出現(xiàn)了Slave節(jié)點的IP,點擊Slave節(jié)點IP地址就會發(fā)起遠程節(jié)點的測試。

默認(rèn)情況下,遠程節(jié)點測試可以通過匯總報告、聚合報告來查看調(diào)測結(jié)果,查
看結(jié)果樹不會顯示響應(yīng)數(shù)據(jù),主要是Master節(jié)點為了減少數(shù)據(jù)傳輸?shù)拈_銷,如
果需要顯示可以通過取消注釋
JMETER_HOME/bin/jmeter.properties文件中
的mode=Standard來達到目的。
Slave節(jié)點也會打印響應(yīng)的連接信息

JMeter分布式壓測執(zhí)行正式執(zhí)行壓測時,JMeter官方推薦在非GUI模式下運行,可以節(jié)省部分運行資源,執(zhí)行如下命令啟動壓測
- jmeter -n -t 分布式測試示例.jmx -l report_01.jtl -e -o report_01
- 參數(shù)說明:
- -n 表示非GUI模式
- -t 表示指定腳本文件,可以使用相對和絕對路徑方式指定
- -l 表示指定結(jié)果記錄的文件,文件格式為.jtl
- -e 表示測試完成即生成報告
- -o 指定報告生成的目錄
壓測期間會持續(xù)打印匯總信息,可以看到執(zhí)行了多久,響應(yīng)時間、錯誤率、線程數(shù)等情況

壓測結(jié)束后會在參數(shù)指定的目錄下生成html格式的測試報告
