一、原因
1、當你想並發很大的時候(比如3000)那么一台jmeter可能就不能勝任了,這時候就需要多台jmeter同時加壓
2、當jmeter壓力機安裝在沒有gui的linux上,又不想通過非gui的方式完成性能測試
二、原理
原理很簡單就是找一台裝有jmeter的機器當控制端,由這個控制端統一控制其它裝有jmeter的機器作為代理,產生壓力。如下圖
三、安裝jdk和jmeter
1、分別下載windows版本和linux版本的jdk,jdk版本1.8。windows點擊安裝包一路下一步即可。linux將tar.gz包上傳linux解壓縮並配置環境變量即可,參見 https://www.cnblogs.com/rslai/p/7859542.html
2、從 http://jmeter.apache.org/download_jmeter.cgi 下載最新jmeter安裝包。windows系統的是zip壓縮i文件,linux系統的是tar.gz壓縮包。也是簡單的解壓縮即可。
四、配置controller
本文檔使用1.10機器作為控制端,1.11作為代理,ip地址需要根據你的實際情況加以修改,如下圖:
1、修改 jmeter.properties 配置文件
打開 C:\apache-jmeter-5.1.1\bin\jmeter.properties 配置文件(這是我的jmter解壓位置,根據你的位置打開相應文件)
a)找到 server.rmi.ssl.disable 配置,將行首的注釋刪掉並改為true
server.rmi.ssl.disable=true
如果沒有配置運行腳本的時候會報如下圖錯誤
b)配置代理地址,找到 remote_hosts 並配置如下
其中1.11就是一台代理ip地址1099是在代理上啟動的jmeter-server的監聽端口。每台代理以“,”號分割
remote_hosts=127.0.0.1,192.168.1.11:1099,192.168.1.12:1099,192.168.1.13:1099,192.168.1.10:1099
c)配置代理連接控制端ip地址
打開 C:\apache-jmeter-5.1.1\bin\jmeter-server.bat 文件,添加如下內容,添加位置無所謂只要在 set ARGS= 前即可,其中 192.168.1.10就是你的控制端的ip地址
set rmi_host=-Djava.rmi.server.hostname=192.168.1.10
修改 set ARGS= 配置,原來配置信息如下
set ARGS=%JAVA9_OPTS% %DUMP% %HEAP% %VERBOSE_GC% %GC_ALGO% %DDRAW% %SYSTEM_PROPS% %JMETER_LANGUAGE% %RUN_IN_DOCKER%
在最后添加 %rmi_host%,添加后如下
set ARGS=%JAVA9_OPTS% %DUMP% %HEAP% %VERBOSE_GC% %GC_ALGO% %DDRAW% %SYSTEM_PROPS% %JMETER_LANGUAGE% %RUN_IN_DOCKER% %rmi_host%
以上配置非必須。如果你的控制端只有一塊網卡並且沒有安裝虛擬機等軟件就可以不用配置。
因為在控制端連接代理后會通知代理控制端的ip地址,然后代理會在測試完成后主動連接控制端,以便將測試結果回傳給控制端。此時如果有多塊網卡就有可能連接失敗,錯誤現象如下。
另外一個解決方式是將虛擬網卡或第二塊網卡禁用,這樣就不會出現連接不上控制端的問題但如果不小心啟用的網卡還會出現此問題。
五、配置agent
1、修改 jmeter.properties 配置文件
根據你安裝的目錄修改 vi /home/apache-jmeter-5.1.1/bin/jmeter.properties 1、將原來的 #server_port=1099 前邊的注釋去掉改為 server_port=1099 2、將原來的 #server.rmi.localport=4000 前邊的注釋去掉改為 server.rmi.localport=1099
這里的端口號如果不改也可以,但jmter每次啟動都會換一個端口,這樣每次都要修改controller的remote_hosts配置信息比較麻煩。不配置如下圖端口每次啟動都改變
找到 server.rmi.ssl.disable 配置,將行首的注釋刪掉並改為true
server.rmi.ssl.disable=true
如果沒有配置運行腳本的時候會報如下圖錯誤
2、修改 jmeter-server 啟動腳本
vi jmeter-server 將 #RMI_HOST_DEF=-Djava.rmi.server.hostname=xxx.xxx.xxx.xxx 改為 RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.1.11
改后如下圖,同樣如果linux只有一塊網卡也無需設置。
另外一個方法是啟動時候指定ip地址如下
./jmeter-server -D java.rmi.server.hostname=192.168.1.11
2、啟動 jmeter-server
linux上執行 ./jmeter-server 命令windows上雙擊 jmeter-server.bat 即可,啟動成功后如下
[root@bj-zd2f-vm-ceshi-test-loadrunner1 bin]# ./jmeter-server Using local port: 1099 Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.1.11:1099](local),objID:[258e0404:16db9c33fc1:-7fff, -5488498502529841046]]]
使用上面命令啟動 jmeter-server雖然可以使用但只要關閉xshell后就不能用了,可以使用如下命令運行在后台
nohup ./jmeter-server &
如果重新啟動服務器那還要每台服務器重新運行 jmeter-server,可以直接將啟動命令放到profile文件中這樣jmeter-server會跟隨系統啟動而運行
打開profile文件 vi /etc/profile 在profile最后添加運行jmeter-server命令 cd /home/apache-jmeter-5.1.1/bin nohup /home/apache-jmeter-5.1.1/bin/jmeter-server & 保存profile在命令行執行如下命令,使profile配置生效 source /etc/profile
六、分布式壓測
1、在控器器中打開腳本
2、點擊 run->Remote Start 下的agent壓測
壓測完成后就可以看到報告了。
七、分布式壓測中的參數文件問題
1、當腳本引用csv參數文件后不要使用絕對路徑
2、將此csv文件上傳到所有agent
csv文件需要上傳到啟動 jmeter-server時候的目錄下,由於在profile文件中添加了 cd /home/apache-jmeter-5.1.1/bin 命令,所以將csv文件傳到此目錄 /home/apache-jmeter-5.1.1/bin 即可
參考文檔:
https://blog.csdn.net/lt326030434/article/details/81065848
https://www.cnblogs.com/insane-Mr-Li/p/10713147.html
https://blog.csdn.net/weixin_38208401/article/details/78850157
https://www.cnblogs.com/bf-blackfish/p/11078411.html
https://www.cnblogs.com/insane-Mr-Li/p/10712155.html
https://blog.csdn.net/qq_35304570/article/details/81485799