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

下面提示缺少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了

回車后生成文件:rmi_keystore.jks

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

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

搜索jmeter-server

默認端口1099

端口號修改為2099

執行jmeter-server

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

telnet通了,

控制機配置文件 

配置負載機

測試腳本

關於下面的監聽器:查看結果樹,主要是用於調試腳本的時候用,調試好后,把這個監聽器禁用掉

壓測過程中,可以看聚合報告,如果有失敗的請求,可以馬上遠程連接服務器查看錯誤日志

但是,如果沒有遠程服務器的權限,就可以不禁用這個監聽器,但是要勾選“僅錯誤日志”

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

遠程啟動linux負載機

取樣器結果

請求

響應數據為空

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

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

負載機控制台輸出的信息

 

之前有群友問:響應為空,加了斷言,那是如何斷言的呢?

雖然我們在查看結果樹中看不到響應,生成的jtl文件,打開也沒有結果,但是,jmeter發了請求后,服務器會把響應結果返給jmeter,jmeter會根據返回自動化進行斷言,和我們能否看到響應沒有關系。

可以遠程運行腳本:運行--遠程啟動--壓力機

響應結果為空

響應頭

改一個不會返回的斷言

遠程運行

查看結果

雖然上面沒有返回結果,但是下圖表示依然做了正確的斷言

僅windows控制機作為負載機

控制機ip

修改配置文件,遠程主機加入本機,默認端口1099

執行jmeter-server.bat

telnet本機1099端口

端口不通

上面執行jmeter-server.bat,顯示的是下面192.168.56.1這個地址(因為我本機只連了無線,沒有本地連接)

telnet1099端口

 

可以通

修改配置文件

保存后重啟jmeter-server.bat、jmeter.bat

只遠程啟動windows負載機

聚合報告

控制台信息

windows和linux同時作為負載機

遠程啟動所有

聚合報告,總樣本數 = 線程數 * 循環次數 * 執行機總數

30 = 3 * 5 * 2

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

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

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

單負載機

jmeter -n -t 腳本絕對路徑名.jmx -l  要保存的結果絕對路徑名.jtl -H 192.168.116.128 -P 2099

生成jtl結果文件

查看結果樹

聚合報告

 

多負載機

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

其實,在實際壓測的時候是有時還是不使用命令行方式的,因為看不到tps波動情況(當然,可以用其它的監控,比如:Jmeter+Influxdb+Grafana監控平台搭建

一般來說,如果有大的波動,是需要立即連接服務器查看各個資源的情況的,比如線程池、連接池,

雖然命令行執行完后會生成jtl結果文件,但是壓測完,壓測過程中創建的各種連接都釋放了,也就無法定位到問題了,

如果有失敗的請求還好點,這樣可以根據錯誤日志來分析定位問題

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

 

性能測試:從0到實戰

https://www.cnblogs.com/uncleyong/p/12311432.html


免責聲明!

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



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