jmeter5.1分佈式壓測

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結果文件,但是壓測完,壓測過程中創建的各種連接都釋放了,也就無法定位到問題了,

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

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

 


================================ END ================================
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章