一,Jmeter分布式部署測試--遠程連接多台電腦做性能測試
什么是分布式測試:分布式測試是指通過局域網和Internet,把分布於不同地點、獨立完成特定功能的測試計算機連接起來,以達到測試資源共享、分散操作、集中管理、協同工作、負載均衡、測試過程監控等目的的計算機網絡測試
在使用Jmeter進行接口的性能測試時候,由於JMeter是java應用,對CPU和內存消耗比較大,所以當需要模擬數以萬計的並發用戶時,使用單台機器模擬所有的並發用戶就會出現電腦卡死等現象,或者會引起java內存溢出的錯誤。為了Jmeter工具提供了更大的負載能力,這個時候就可以使用Jmeter提供分布式來控制多台電腦進行壓力測試
二,分布式的原理
1,jmeter分布式測試時,選擇其中一台為控制機(Controller),一般都是我們自己的電腦,其他機器作為代理機器(Agent),一般可以用服務器做代理
2,執行時,Controller會把腳本發送到每台Agent上,Agent拿到腳本后開始執行,Agent執行時不需要啟動jmeter,只需要把jmete-server文件打開就行,他是通過命令行來執行的
3,執行后,Agent會把結果回傳給Controller,Controller會收集所有Agent的信息並匯總
其他的原理解釋:
- 選擇其中一台作為Master機(調度機),其他機器作為Slave機(執行機)
- 執行時,Master機會把腳本發送到每台Slave機上,Slave機拿到腳本后就開始執行,不需要啟動GUI
- 執行完成后,Slave機會把結果回傳給Master機,Master機會收集所有Slave機的信息,並匯總
三、分布式配置
前提條件:
- Slave機器的jdk版本需要跟Master機器的jdk版本保持一致
- Slave機器的Jmeter版本以及插件需要跟Master機器保持一致,操作方法是直接將Master的Jmeter安裝目錄打包后解壓到Slave機器上
- Slave機器的網絡需要跟Master機器的網絡保持在同一個局域網,可以ping通
1.Master機器配置
在Jmeter的%JMETER_HOME%\bin目錄下,使用文本編輯工具打開jmeter.properties配置文件,配置以下參數
第一個ip是本地的ip,第二個ip是slave機器上的ip
配置完成后重啟Jmeter
2.Slave機器配置
在Jmeter的%JMETER_HOME%/bin目錄下,使用文本編輯工具打開jmeter.properties配置文件,配置以下參數
如果是linux機器上,則要給bin目錄賦予執行的權限:chmod +x -R bin/,還要注意防火前是否開放了1099端口
3,啟動salve的jmeter, ./jmeter-server
解決辦法:./jmeter-server -Djava.rmi.server.hostname=192.168.3.180(這是我的ip)
提示缺少jsk文件
不管是負載機還是控制機(如果控制機也作為負載機),執行jmeter-server.bat(linux下執行jmeter-server,另外:linux下檢查是否啟動成功:ps -ef | grep jmeter-server),報錯,
是因為從JMeter 4.0開始,RMI的默認傳輸機制將使用ssl。SSL需要密鑰和證書才能工作,不使用ssl將存在安全漏洞
解決辦法:在控制機bin目錄下,點擊:create-rmi-keystore.bat
根據提示一直填下去,遇到Yes與No就直接填y,然后回車就ok了
回車后會在bin目錄生成文件:rmi_keystore.jks
點擊:點擊jmeter-server.bat, 啟動RMI注冊表
復制控制機生成的rmi_keystore.jks到每一台負載機jmeter的bin目錄下
再次啟動就正常了:
./jmeter-server -Djava.rmi.server.hostname=192.168.3.180(這是我的ip)
四,運行
在控制機查看是否配置成功,需要查重新啟動jmeter
我就只使用了一個savle(192.168.3.180)
啟動以后從slave上可以看到兩行日志:
注意:如果客戶端提示找不到系統文件之類的或者提示java.rmi.ConnectIOException: non-JRMP server at remote endpoint,就需要在master和salve的jmete.properies中打開找到#server.rmi.ssl.disable=false,給變更成server.rmi.ssl.disable=true(注意是控制器和壓力機都要更改)。每次變更后都要重新打開jmeter
我本地的機器沒有作為負載機,所有沒有消耗任何的資源
這里要注意的是:
1,控制機和負載機的jdk,jmeter版本都必須一致
2,控制機用的插件,負載機上也必須有(可以去ext目錄下對比)
3,腳本不需要傳遞到負載機,但是如果有csv等數據文件,就必須傳到負載機上,而且路徑要寫負載機的路徑
4,負載機只能是一種,要么是windowins要么是liunx,我這里是linux