上一篇文章我們說到了jmeter命令行運行但是是單節點下的, jmeter底層用java開發,耗內存、cpu,如果項目要求大並發去壓測服務端的話,jmeter單節點難以完成大並發的請求,這時就需要對jmeter進行分布式測試:
1:先說說分布式測試原理
處理過程:
一:調度機master啟動以后,會拷貝本地的jmx文件分發到遠程的slave機器上;
二:slave機器拿到腳本以后啟動命令行模式去執行腳本,對於每台slave機器拿到的腳本都是一樣的,所以如果jmx腳本為50個線程跑3分鍾,那么實際並發就是50*3=150個線程並發跑3分鍾;
三:執行時,slave會把執行獲得的數據結果傳給master機器,master機器會收集所有slave機器的信息並匯總,這樣master機器上就存在一份所有slave機器匯總的數據結果。
注意事項:
一:我們注意到master機器啟動后會拷貝jmx文件到slave機器,所以我們不需要在每台slave機器上也上傳一份jmx,只需要在master機器上上傳一份jmx腳本即可。
二:參數化文件:如果使用csv進行參數化,那么需要把參數文件在每台slave上拷一份且路徑需要設置成一樣的。
三:調度機(master)和執行機(slave)最好分開,由於master需要發送信息給slave並且會接收slave回傳回來的測試數據,所以mater自身會有消耗,所以建議單獨用一台機器作為master。
四:保證每台機器的jmeter版本和插件版本相同,避免造成一些意外問題。
五:分布式測試總樣本數 = 線程數 * 循環次數 * 執行機總數, 樣本計數邏輯為:執行機slave執行的測試腳本是由調度機master分發的,故每台執行機執行的測試腳本都是相同的,故而性能測試總樣本數 = 測試腳本樣本數 * 執行機總數,而測試腳本樣本數為線程數 * 循環次數
2:說完了原理,現在我們來說如何做jmeter分布式測試
- 在所有需要做分布式的機器上部署java和jmeter,要求需要保證每台機器上部署的jmeter版本相同插件版本也相同,最好部署在同一路徑下(這樣如果有csv參數化比較方便)
部署jmeter很簡單,只需從官網下載相應版本然后傳到服務器上進行解壓縮就可以了這里給出我的雲盤地址:http://pan.baidu.com/s/1bI3r2I 密碼:f5ll。
比如我部署在134.64.14.95、134.64.14.96、134.64.14.97、134.64.14.98四台機器上,每台機器部署路徑為:/home/tester
- 修改slave機器bin目錄下的jmeter.properties配置,我的3台slave機器為:134.64.14.96、134.64.14.97、134.64.14.98
修改3台slave機器jmeter/bin目錄下的jmeter.properties中server_port端口號為機器未被占用的端口號,一般默認為1099,此處我修改為7899(可以使用默認端口或者改成其他端口,只要未被占用就行),remote_hosts為127.0.0.1不需要修改
修改完成保存,我配置的3台機器為:
134.64.14.96機器(remote_hosts:127.0.0.1、server_port:7899)
134.64.14.97機器(remote_hosts:127.0.0.1、server_port:7899)
134.64.14.98機器(remote_hosts:127.0.0.1、server_port:7899)
- 完成slave機器的配置后,此時配置master機器,我的1台master機器為134.64.14.95
注意到由於master機器作為調度機本身會有一定的性能消耗所以我們配置遠程執行機的時候並沒有把master機器配置進去,只配置了3台執行機
修改完成保存,我配置的1台機器為:
134.64.14.95機器(remote_hosts:134.64.14.96:7899,134.64.14.97:7899,134.64.14.98:7899、server_port:注釋掉不用打開)
- 完成了所有機器配置后,我們需要上傳測試腳本,測試時只需要上傳jmx文件到master機器即134.64.14.95機器的jmeter對應目錄即可,其他執行機不需要上傳jmx文件,因為master啟動后會拷貝本地jmx到遠程執行機上
- 現在我們來啟動分布式測試,啟動分布式測試分兩步:
一:首先啟動執行機即slave機器134.64.14.96、134.64.14.97、134.64.14.98,每台slave機器都需要執行以下命令來啟動jmeter-server
命令為:./jmeter-server
二:確認3台slave執行機都啟動正確完成后,在啟動master機器134.64.14.95,執行如下命令開啟分布式測試
命令為:./jmeter -n -t baidu_requests_results.jmx -r -l baidu_requests_results.jtl
3:測試命令說明
./jmeter -n -t baidu_requests_results.jmx -r -l baidu_requests_results.jtl
4:測試結果說明
注意到上面控制台打印的信息中
summary + 1224043 in 00:00:30 = 40802.8/s Avg: 0 Min: 0 Max: 188 Err: 1224043 (100.00%) Active: 60 Started: 59 Finished: 0