Jmeter分布式執行原理:
1、Jmeter分布式測試時,選擇其中一臺作為調度機(master/Controller),其它機器做為執行機(slave/Agent)。
2、執行時,master會把腳本發送到每臺slave上,slave 拿到腳本后就開始執行,slave執行時不需要啟動GUI,應該是通過non-gui命令行模式執行的。
3、執行完成后,slave會把結果回傳給master,master會收集所有slave的信息并匯總。
注意:
(1)每一臺jmeter遠程服務器(slave機器)都執行相同的測試計劃,jmeter不會在執行期間做負載均衡,每一臺服務器都會完整地運行測試計劃,所以根據木桶原理,性能最差的slave可能會影響測試;
(2)采用JMeter遠程模式并不會比獨立運行相同數目的非GUI 測試更耗費資源。但是,如果使用大量的JMeter 遠程服務器,可能會導致客戶端過載,或者網絡連接發生擁塞;
(3)默認情況下,master機器是不執行參與生成并發數據的;
(4)調度機(master)和執行機(slave)最好分開,由于master需要發送信息給slave并且會接收slave回傳回來的測試數據,所以master自身會有消耗,所以建議單獨用一臺機器作為master。
這些簡介都是從其他童鞋那里抄的,之前在網上找文檔的時候,發現都是windows作為master,本文主要share Centos 的機器搭建的過程,下面是具體的步驟:
- 配置安裝Java & Jmeter
- 配置 slave
- 配置 master
- non-gui 下,run Jmeter 腳本
- 配置安裝Java & Jmeter
安裝Java,自己找文檔去吧,我用的是1.8
安裝Jmeter
Jmeter幫助文檔:http://jmeter.apache.org/usermanual/index.html
Jmeter下載地址:http://jmeter.apache.org/download_jmeter.cgi
進入到自己的目錄(/home/username)
這里要配置環境變量,因為公司Centos設置,一般測試賬號拿不到root 權限,于是把環境變量設置在 /home/username/.bashrc里面,
export JMETER_HOME=/home/langzm/apache-jmeter-3.2
export JAVA_HOME=/opt/java/jdk1.8.0_91
export JAVA_BIN=/opt/java/jdk1.8.0_91/bin
export PATH=$PATH:$JAVA_HOME/bin:$JMETER_HOME/bin
配置以后,執行source ~/.bashrc 或者 source /home/username/.bashrc,在哪兒執行都沒有問題。
安裝成功的標志:
- 配置slave
在配置安裝完 Java 和 Jmeter 后,我們要配置兩個地方,slave 的IP和端口。
分別在s1、s2、s3(slave機器)上,進入%JMETER HOME%/bin/目錄,
打開“jmeter.properties”,配置執行機遠程啟動端口(默認為 1099),
如改為:
server_port=1099
server.rmi.localport=1099
打開“jmeter-server”,配置執行機遠程啟動IP
如改為:
DIRNAME=dirname $0
RMI_HOST_DEF=-Djava.rmi.server.hostname=10.31.121.115
啟動slave server:
Using local port: 1099
Created remote object: UnicastServerRef [liveRef: [endpoint:10.31.121.115:1099,objID:[-19017b68:15d1c7583bc:-7fff, -5417132512864584786]]]
之前沒有配置1099端口和IP,造成如下情況:
后果是master 連不上slave,沒有starting ...連接成功的log。
- 配置master
在配置安裝完 Java 和 Jmeter 后,進入%JMETER HOME%/bin/目錄,
編輯 jmeter.properties 這個文件,修改添加:
remote_hosts=172.16.129.155:1099,172.16.129.43:1099
(slave的IP)
server_port=1099
client.rmi.localport=0
server.rmi.port=1234
server.rmi.localport=1099
進入%JMETER HOME%/bin/目錄,編輯 jmeter.bat這個文件,修改添加:
set rmi_host=-Djava.rmi.server.hostname=本機ip(控制器ip)
Set ARGS=%DUMP% %HEAP% %NEW% %SURVIVOR% %TENURING% %PERM% %DDRAW% %rmi_host%
- non-gui 下,run Jmeter 腳本
參考文檔:
http://www.cnblogs.com/fengpingfan/p/5586711.html
這個可以推薦看一下,我就硬搬過來了,
先附上參數表:
Demo 1:執行最簡單的Jmeter例子
自己寫個test job,里面只訪問百度,然后把job 放到master 上面去跑;
baidu.jmx 配置好后,copy到master;
command:
jmeter -n -t baidu.jmx
Demo 2:指定Jmeter結果文件及日志路徑
jmeter -n -t /home/langzm/apache-jmeter-3.2/testcase/demo_500_qps.jmx -l /home/langzm/apache-jmeter-3.2/result/demo_500QPS_result.csv
Demo 3:分布式(遠程)執行單個服務器
jmeter -n -t /home/langzm/apache-jmeter-3.2/testcase/demo_500_qps.jmx -R 11.71.161.115:1099 -l /home/langzm/apache-jmeter-3.2/result/demo_500QPS_result.csv
Demo 4:多個分布式(遠程)執行多個服務器
jmeter -n -t /home/langzm/apache-jmeter-3.2/testcase/demo_500_qps.jmx -R 11.71.161.115:1099,11.27.221.182:1099,11.81.198.142:1099 -l /home/langzm/apache-jmeter-3.2/result/demo_1500QPS_result.csv
正經的log: