html5營銷網(wǎng)站建設app推廣注冊接單平臺
在性能測試中,當面對海量用戶請求的壓力測試時,單機模式的JMeter往往力不從心。如何通過分布式集群環(huán)境,充分發(fā)揮JMeter的性能測試能力?這正是許多測試工程師在面臨高并發(fā)、海量數(shù)據(jù)時最關注的問題。那么,如何輕松搭建JMeter分布式集群環(huán)境,實現(xiàn)性能測試的最大化呢?
你是否也曾為測試負載過大而不知所措?你是否對JMeter的分布式集群功能充滿好奇?今天,我們將詳細講解如何通過搭建JMeter分布式集群環(huán)境,幫助你輕松應對高并發(fā)、高負載的性能測試需求!
-
分布式測試的優(yōu)勢
在分布式測試環(huán)境中,多個負載機(Slave)協(xié)同工作,可以生成更高的并發(fā)量,突破單機的資源限制。 -
真實案例
某大型電商平臺曾通過JMeter分布式集群測試,模擬上百萬用戶訪問場景,精準定位系統(tǒng)瓶頸,成功避免了購物節(jié)期間的崩潰事故。
前提條件
在開始之前,請確保滿足以下前提條件:
·確保 JMeter 能夠訪問待測試的服務器(可以通過虛擬機上的 curl 命令來檢查連通性),如果無法訪問,你可能需要調(diào)研當前環(huán)境是否能夠用來作為壓力源;
·?確保所有系統(tǒng)上使用相同版本的 JMeter(我們當前使用的是 5.6.3)?;煊貌煌姹究赡軣o法正常工作;
·?確保系統(tǒng)上的防火墻已禁用或正確打開了相關端口;
概念
控制節(jié)點:運行 jmeter-client 的系統(tǒng),它控制測試。該系統(tǒng)可以是你的筆記本電腦(需要先打開防火墻)或虛擬機。
工作節(jié)點:運行 jmeter-server 的系統(tǒng),它接收來自 jmeter-client 的指令并向目標系統(tǒng)發(fā)送請求,通常是虛擬機。
目標:我們計劃進行壓力測試的 Web 服務器。
安裝
對于 MacOS
使用 Homebrew 安裝 JMeter,并通過 jmeter --version 命令驗證安裝:
brew install jmeterjmeter --version
在我編寫本文時,使用的版本是 5.6.3。
對于 Ubuntu20
不要 使用 apt install jmeter 命令安裝 JMeter,因為 apt 安裝的版本已過時(2.13),加載 .jmx 文件將會報錯從而無法正常工作。
手動安裝:
1. 在 VM 上安裝 JDK:
sudo apt install openjdk-11-jre-headless`
2. 從 https://jmeter.apache.org/download_jmeter.cgi 下載壓縮包文件(通過你的 筆記本電腦),然后將其上傳至 VM。
3. 使用 scp/rsync 上傳至虛擬機,然后解壓最新的 JMeter 壓縮包。在筆記本電腦上輸入以下命令(請記得修改目標目錄):
rsync -avz apache-jmeter-5.6.3/ <remote-host>:/path/to/place
4. 將文件移動至正確位置并修改 PATH 環(huán)境變量:
# 移動至合適的目錄,比如 /opt/jmeter sudo mv /path/to/place /opt/ # 將其添加到 PATH,你可以將其寫入 ~/.bashrc 文件以持久化配置 vim ~/.bashrcexport PATH=/opt/jmeter/bin:$PATH # 退出 vim 并使用 source 命令生效 source ~/.bashrc
5. 檢查版本,確保一切就緒:
jmeter --version? ??
輸出結(jié)果應如下所示:
_ ____ _ ____ _ _ _____ _ __ __ _____ _____ _____ ____
/ \ | _ \ / \ / ___| | | | ____| | | \/ | ____|_ _| ____| _ \
/ _ \ | |_) / _ \| | | |_| | _| _ | | |\/| | _| | | | _| | |_) |
/ ___ \| __/ ___ \ |___| _ | |___ | |_| | | | | |___ | | | |___| _ <
/_/ \_\_| /_/ \_\____|_| |_|_____| \___/|_| |_|_____| |_| |_____|_| \_\ 5.6.3
Copyright (c) 1999-2024 The Apache Software Foundation
配置
在運行分布式模式之前,需要完成以下配置:
在控制節(jié)點
將服務器 IP 添加到客戶端的 Properties 文件中
在 $JMETER_HOME/bin/jmeter.properties 文件中(本文的路徑是 /opt/jmeter/bin/jmeter.properties),找到名為 "remote_hosts" 的單元,添加正在運行的 JMeter 服務器的 IP 地址??梢蕴砑佣鄠€服務器,用逗號分隔,例如:
# Edit the line: remote_hosts=127.0.0.1 and configure as below:remote_hosts=10.0.0.1,10.0.0.2,10.0.0.3
通過更改值并取消注釋來禁用 rmi.ssl:
server.rmi.ssl.disable=true
同時,強烈建議將默認的 jmeter.reportgenerator.overall_granularity 值從 60 秒更改為 5 秒,以獲得更好的報告體驗!
jmeter.reportgenerator.overall_granularity=5000
否則,你的報告可能就會長成這樣:
更改此值后,上述的報告將更易讀:
在工作節(jié)點
通過更改值并取消注釋來禁用 rmi.ssl:
server.rmi.ssl.disable=true
然后啟動 jmeter-server 以監(jiān)聽來自控制節(jié)點的命令:
jmeter-server
你應看到如下輸出:
$ jmeter-server
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release Created remote object: UnicastServerRef2 [liveRef: [endpoint:[10.0.0.1:38803](local),objID:[-7d9e7ab6:1916e54ddb2:-7fff, -6565134591293374723]]]
???????
使用方式
單節(jié)點模式
使用單節(jié)點模式進行調(diào)試,命令如下:
jmeter -n -t <script_path> -l <results-file>
選項 -n:以非 GUI 模式運行 JMeter
選項 -t:要運行的 JMeter 測試(.jmx)文件
選項 -l:指定結(jié)果日志文件
分布式模式
注意:
所有服務器將運行相同的測試計劃。JMeter 不會在服務器之間分配負載,每臺服務器都會運行完整的測試計劃。因此,如果你設置 1000 個線程并有 6 臺 JMeter 服務器,你最終將注入 6000 個線程。
如果 jmeter.properties 文件配置正確,只需在執(zhí)行命令時添加 -r 選項,例如:
jmeter -n -t <script_path> -l <results-file> -r
選項 -r:使用 remote_hosts 屬性中指定的所有節(jié)點。
你還可以使用 -R 選項指定希望使用的節(jié)點,例如:
jmeter -n -t <script_path> -l <results-file> -R 10.0.0.1,10.0.0.2
此時只有 10.0.0.1 和 10.0.0.2 會參與測試,輸出將如下所示:???????
$ jmeter -n -t demo.jmx -l result.csv -r
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
WARN StatusConsoleListener The use of package scanning to locate plugins is deprecated and will be removed in a future release
Creating summariser <summary>
Created the tree successfully using demo.jmx
Configuring remote engine: 10.0.0.1
Configuring remote engine: 10.0.0.2
Starting distributed test with remote engines: [10.0.0.1, 10.0.0.2] @ 2024 Aug 20 14:11:02 CST (1724134262441)
Warning: Nashorn engine is planned to be removed from a future JDK release
Remote engines have been started:[10.0.0.1, 10.0.0.2]
Waiting for possible Shutdown/StopTestNow/HeapDump/ThreadDump message on port 4445
summary + 1 in 00:00:00 = 17.2/s Avg: 1 Min: 1 Max: 1 Err: 0 (0.00%) Active: 2 Started: 2 Finished: 0
summary + 5999 in 00:00:10 = 605.8/s Avg: 0 Min: 0 Max: 3 Err: 0 (0.00%) Active: 0 Started: 200 Finished: 200
summary = 6000 in 00:00:10 = 602.2/s Avg: 0 Min: 0 Max: 3 Err: 0 (0.00%)
Tidying up remote @ 2024 Aug 20 14:11:12 CST (1724134272743)
… end of run
HTML 報告生成
要從現(xiàn)有結(jié)果文件生成報告,使用以下命令:
jmeter -g <result-file> -o <Path to output folder>
或者在負載測試完成后立即生成報告,使用以下命令:
jmeter -n -t <script_path> -l <result-file> -r -e -o <Path to output folder>
假設你運行以下命令:
jmeter -n -t demo.jmx -l result.csv -r -e -o report
然后你將看到如下輸出:???????
$ ll ./report/total 32drwxr-xr-x 4 dohong users 4096 Aug 20 14:44 ./drwx------ 10 dohong users 4096 Aug 20 14:44 ../drwxr-xr-x 5 dohong users 4096 Aug 20 14:44 content/-rw-r--r-- 1 dohong users 9669 Aug 20 14:44 index.htmldrwxr-xr-x 5 dohong users 4096 Aug 20 14:44 sbadmin2-1.0.7/-rw-r--r-- 1 dohong users 890 Aug 20 14:44 statistics.json
雙擊打開 index.html 文件你就會得到類似如下的報告:
左側(cè)導航欄可以切換不同的頁面查看不同的統(tǒng)計數(shù)據(jù)和圖表,至此,分布式壓測的環(huán)境搭建就全部大功告成了。
注意事項
·將 jmeter.reportgenerator.overall_granularity 的值從 60000 改為 5000 強烈建議,這可以帶來更好的報告體驗。
·?無需手動同步測試腳本到工作節(jié)點,JMeter 會為你完成同步,但仍需要將本地腳本同步到控制節(jié)點;
·?使用 CLI 模式 而非 GUI 模式,避免性能下降;
·?使用盡可能少的監(jiān)聽器;如果使用 -l 標志記錄結(jié)果,監(jiān)聽器可以刪除或禁用。
·?在負載測試過程中不要使用 "查看結(jié)果樹" 或 "查看表格中的結(jié)果" 監(jiān)聽器,它們應僅在腳本調(diào)試階段使用,否則性能可能會下降 3 倍!
·?如果測試需要大量數(shù)據(jù),尤其是隨機化或加密/解密數(shù)據(jù),請將測試數(shù)據(jù)提前生成并通過 CSV 數(shù)據(jù)集讀取文件,這可以避免運行時浪費資源。
在當前的技術趨勢中,微服務架構(gòu)和云原生的普及,使得系統(tǒng)規(guī)模更龐大、模塊更多,性能測試的重要性更加突出。JMeter分布式測試成為企業(yè)應對復雜性能測試需求的首選方案。
搭建JMeter分布式集群不僅提升了性能測試的能力,也為系統(tǒng)性能優(yōu)化提供了更加全面的數(shù)據(jù)支撐。掌握這項技能,讓你的性能測試如虎添翼
“高并發(fā)不是系統(tǒng)的敵人,而是推動性能優(yōu)化的良師益友——關鍵在于你是否具備掌控它的能力!”
?