十六、jmeter分布式壓測


 

一、jmeter為什么要做分布式壓測

jmeter本身的局限性

  • 一台壓力機的 Jmeter 支持的線程數受限於 Jmeter 其本身的機制和硬件配置(內存、CPU等)是有限的
  • 由於 Jmeter 是 Java 應用,對 CPU 和內存的消耗較大,在需要模擬大量並發用戶數時,單機很容易出現 JAVA 內存溢出的錯誤,導致測試腳本本身就有瓶頸

JVM 堆內存的局限性

Java 應用的 jvm 堆內存 heap 受壓力機硬件限制,雖然我們可以調整堆內存大小

cmd 啟用 Jmeter GUI 時,也會有提示

increase Java Heap to meet your test requirements: Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file

翻譯:增加 Java 堆內存來滿足測試的要求

但是單機無法支撐數以萬計大並發,此時,需要多個壓力機進行分布式壓力測試,這樣性能瓶頸就不會是我們的壓力機了

聯想場景

  • 測試 1000 線程並發的場景,但單機只能支持 200 並發無法達到1000
  • 通過分布式(5 台機器起)可以模擬 1000 並發

分布式壓測

Jmeter 支持分布式壓測,將需要模擬的大量並發用戶數分發到多台壓力機,使 Jmeter 擁有更大的負載量,滿足真實業務場景(高並發場景)

分布式的最終目的

  • 確保壓力機不會出現性能瓶頸
  • 在后面進行性能分析時,不需要考慮壓力機是否會導致性能瓶頸的主要原因之一

二、分布式原理

 

把上面的動圖完整看完,就懂了,原理如下:

  1. Cnotroller 是控制機,Slaves 是多個壓力機
  2. 分布式測試中,Cnotroller 通過命令行將測試腳本分發給所有 Slave
  3. Slave 不需要啟動 Jmeter GUI,通過 CLI 模式執行測試
  4. Slave 執行完后,會把結果回傳給 Master
  5. Master 收集所有 Slave 的結果並匯總成一個結果集

注意

  • 壓力機也可以叫:負載機、代理機、執行機、肉雞....各種各樣的名字,但他們都是 Slave
  • Master 也可以執行測試腳本,可以不執行只負責管理

三、分布式壓測的前提條件已經配置

注意事項

1、保持Contorller和Slave機器的JDK、jmeter以及插件等配置版本一致;
2、如果測試數據有用到CSV或者其他方式進行參數化,需要將data在每台Slave上復制一份,且讀取路徑必須保持一致;
3、確保Contorller和Salve機器在同一個子網里面;
4、檢查防火牆是否被關閉,端口是否被占用(防火牆會影響腳本執行和測試結構收集,端口占用會導致Slave機報錯);
5、分布式測試中,通過遠程啟動代理服務器,默認查看結果樹中的響應數據為空,只有錯誤信息會被報回;
6、如果並發較高,建議將Contorller機設置為只啟動測試腳本和收集匯總測試結果,在配置文件里去掉Contorller機的IP;

1、修改Contorller配置

打開Contorller機下jmeter安裝文件下的bin目錄:jmeter.properties文件,搜索remote_hosts=127.0.0.1,將Slave機的IP和端口寫在后面,比如:

remote_hosts=127.0.0.1:1099,172.16.6.90:1099,172.16.6.91:1099

其中172.16.6.90和172.16.6.90為Slave機的IP,每個Agent機之間用英文半角逗號隔開,修改保存。注意默認端口都為1099

切記不論從主機器都要修改:server.rmi.ssl.disable=true,並且去掉#,否則會報錯誤

2、負載機

  1. 首先安裝好jdk和jmeter環境,具體見我的上一篇文章。然后打開配置文件 /bin/jmeter.properties 找到並取消這段配置的注釋 server.rmi.ssl.disable=false ,false改成true。

# Password of Trust store
#server.rmi.ssl.truststore.password=changeit
#
# Set this if you don't want to use SSL for RMI
server.rmi.ssl.disable=true      # 改成true
  1. 輸入命令:jmeter-server -Djava.rmi.server.hostname=172.16.2.114 ,啟動 anget 節點。jmeter-server 后面的參數指定 agent 的 IP

  

3、啟動jemter

啟動jmeter后,設置線程組、配置元件、取樣器、監聽器等原件,點擊“運行-遠程啟動”:

可以選擇遠程啟動一個Slave機,或者選擇遠程全部啟動,即可進行分布式測試了。


免責聲明!

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



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