jmeter5.1分佈式壓測

爲何要用分佈式

你們在使用jmeter壓測過程當中,可能會度遇到內存溢出的錯誤,這是爲何呢?html

由於jmeter是java寫的應用,java應用jvm堆內存heap受負載機硬件限制,雖然咱們能夠調整堆內存大小,java

可是單機沒法支撐數以萬計大併發,此時,須要多個負載機進行分壓測試,這樣性能瓶頸就不會是咱們的負載機了。linux

分佈式的原理

jmeter分佈式壓測時,選擇其中一臺做爲控制機,其他的機器作爲負載機,apache

執行時,控制機會把腳本發送到每一個負載機上,負載機獲取到腳本就執行腳本(負載機只須要啓動jmeter-server.bat或者jmeter-server),windows

執行後,負載機回傳執行結果給控制機,控制機會進行彙總。值得注意的是:若是請求執行成功,不會回傳請求的響應信息,因此在查看結果樹中, 響應結果看到是空的。安全

http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html服務器

原理圖(截圖自官網)併發

分佈式壓測注意事項

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

看不懂英文的本身翻譯哦,看懂了,少踩坑。分佈式

保證控制機和負載機上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+Grafana搭建可視化實時性能測試數據監控

通常來講,若是有大的波動,是須要當即鏈接服務器查看各個資源的狀況的,好比線程池、鏈接池,

雖然命令行執行完後會生成jtl結果文件,可是壓測完,壓測過程當中建立的各類鏈接都釋放了,也就沒法定位到問題了,

若是有失敗的請求還好點,這樣能夠根據錯誤日誌來分析定位問題

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

相關文章
相關標籤/搜索