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

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

如果需要開啟ssl,請(qǐng)參考Apache JMeter - User's Manual: Remote (Distributed) Testing中的13.1 Setting up SSL章節(jié)進(jìn)行配置。
2. 執(zhí)行機(jī)節(jié)點(diǎn)(Slave)配置
- 設(shè)置rmi.server.hostname,編輯JMETER_HOME/bin/jmeter-server,取消MI_HOST_DEF項(xiàng)的默認(rèn)注釋并修改hostname為本機(jī)的IP地址
- MI_HOST_DEF=-Djava.rmi.server.hostname=192.168.2.15
推薦設(shè)置此項(xiàng),否則可能運(yùn)行jmeter-server會(huì)出現(xiàn)下面的錯(cuò)誤:
- ./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ù),如果打印如下的信息表示啟動(dòng)成功

3. 控制節(jié)點(diǎn)(Master)配置
- 指定Slave節(jié)點(diǎn),編輯JMETER_HOME/bin/jmeter.properties,將remote_hosts設(shè)置為Slave節(jié)點(diǎn)的IP地址,如果有多臺(tái)Slave節(jié)點(diǎn),以逗號(hào)分隔多個(gè)IP地址;
- remote_hosts=192.168.2.15
remote_hosts不需要指定端口號(hào),JMeter會(huì)自動(dòng)進(jìn)行探測(cè)
- 多網(wǎng)卡情況,如果Master節(jié)點(diǎn)有多網(wǎng)卡(如安裝了虛擬機(jī)就會(huì)有個(gè)網(wǎng)卡,示例就是在windows機(jī)器上安裝了CentOS虛擬機(jī)作為Slave,就是多網(wǎng)卡的情況),JMeter會(huì)選擇任意網(wǎng)卡嘗試與Slave節(jié)點(diǎn)建立連接,如果選擇錯(cuò)誤的網(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. 遠(yuǎn)程測(cè)試調(diào)測(cè)
步驟3設(shè)置完成后,重啟JMeter,打開要壓測(cè)的腳本文件,運(yùn)行/遠(yuǎn)程啟動(dòng)菜單出現(xiàn)了Slave節(jié)點(diǎn)的IP,點(diǎn)擊Slave節(jié)點(diǎn)IP地址就會(huì)發(fā)起遠(yuǎn)程節(jié)點(diǎn)的測(cè)試。

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

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

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