jmeter5.1分布式壓測


在使用jmeter壓測過程中,可能會度遇到內存溢出的錯誤,這是為什么呢?因為jmeter是java寫的應用,java應用jvm堆內存heap受負載機硬件限制,雖然我們可以調整堆內存大小,但是單機無法支撐數以萬計大並發,此時,需要多個負載機進行分壓測試,這樣性能瓶頸就不會是我們的負載機了。

分布式的原理

jmeter分布式壓測時,選擇其中一台作為控制機,其余的機器做為負載機,執行時,控制機會把腳本發送到每個負載機上,負載機獲取到腳本就執行腳本(負載機只需要啟動jmeter-server.bat或者jmeter-server),執行后,負載機回傳執行結果給控制機,控制機會進行匯總。值得注意的是:如果請求執行成功,不會回傳請求的響應信息,所以在查看結果樹中, 響應結果看到是空的。

 

原理圖(截圖自官網)

http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html

 

 分布式壓測注意事項

摘抄自官網:

http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html

 

看不懂英文的自己翻譯哦,看懂了,少踩坑。

保證控制機和負載機上jdk、jmeter版本一樣,否則會出一些意外的問題;關閉防火牆:service iptables stop,可以先看防火牆狀態,如果是關閉的,就不用管了。

 

 

 分布式環境搭建說明

由於機器數量的原因,我這里演示windows既作為控制機,又作為負載機,另外一台負載機是我的linux虛擬機。但是控制機會接收負載機回傳的結果數據,所以自身有性能消耗,最好是負載機單獨一台機器。

還有這樣有個問題,如果有參數化文件,需要拷貝到每台負載機上,路徑要一樣,而windows和linux上路徑肯定是不一樣的,所以,負載機要么都是windows,要么都是linux,為了演示簡單,我的腳本就不用參數化文件了,且這里演示rmi傳輸機制使用ssl方式。

僅linux服務器作為負載機

bin目錄下執行./jmeter-server

 

 解決辦法:./jmeter-server -Djava.rmi.server.hostname=192.168.116.128

 

 不管是負載機還是控制機(如果控制機也作為負載機),執行jmeter-server.bat(linux下執行jmeter-server,另外:linux下檢查是否啟動成功:ps -ef | grep jmeter-server),報如下錯,是因為從JMeter 4.0開始,RMI的默認傳輸機制將使用ssl。SSL需要密鑰和證書才能工作,不使用ssl將存在安全漏洞。下面提示缺少jsk文件

 

 在控制機bin目錄下,點擊:create-rmi-keystore.bat

 

 根據提示一直填下去,遇到Yes與No就直接填y,然后回車就ok了

 

 回車后生成文件:rmi_keystore.jks

 

 復制控制機生成的rmi_keystore.jks到每一台負載機jmeter的bin目錄下

 

 負載機配置文件中,修改端口號

 

搜索jmeter-server

 

 默認端口1099

 

端口號修改為2099 

 

 

 執行jmeter-server

 

 控制機telnet負載機,看端口通不通

 

 telnet通了

 

 控制機配置文件

 

 配置負載機

測試腳本

關於下面的監聽器:查看結果樹,主要是用於調試腳本的時候用,調試好后,把這個監聽器禁用掉;壓測過程中,可以看聚合報告,如果有失敗的請求,可以馬上遠程連接服務器查看錯誤日志;但是,如果沒有遠程服務器的權限,就可以不禁用這個監聽器,但是要勾選“僅錯誤日志”

 

 3個線程,運行5次,總共15次

 

 遠程啟動linux負載機

 

 取樣器結果

 

 請求

 

 響應數據為空

 

 而且,哪怕勾選保存結果,查看結果樹中依舊沒有結果,這可能是jmeter本身的設置,因為如果回傳大量數據,會影響性能結果

 

 聚合報告,3個線程,運行5次,總共15次

 

 負載機控制台輸出的信息

僅windows控制機作為負載機

 

 

 

 

 

 

 

 

 windows和linux同時作為負載機

 

 

至此,jmeter5.1分布式壓測環境搭建完成。

然后就可以設置線程,跑並發了,比如並發200線程,每秒啟動20個線程,並發運行15分鍾

通過非GUI命令行方式遠程啟動

 

 

 

 

多負載機

jmeter -n -t 腳本絕對路徑名.jmx -l 要保存的結果絕對路徑名.jtl -R 192.168.116.128:2099,192.168.56.1

 

其實,在實際壓測的時候是較少使用命令行方式的,因為看不到tps波動情況,一般來說,如果有大的波動,是需要立即連接服務器查看各個資源的情況的,比如線程池、連接池,雖然命令行執行完后會生成jtl結果文件,但是壓測完,壓測過程中創建的各種連接都釋放了,也就無法定位到問題了,如果有失敗的請求還好點,這樣可以根據錯誤日志來分析定位問題。

 

總之,性能測試的重點及難點是:監控、分析、定位、調優。

PS:以上內容僅供參考,如有錯誤,歡迎指正

 轉載自:51testing群分享


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM