JMeter 分布式壓測

說明

jmeter 分布式壓測:將需要模擬的大量并發(fā)用戶數(shù)分發(fā)到多臺壓力機兄墅,使 jmeter 擁有更大的負載量左腔,滿足真實業(yè)務場景(高并發(fā)場景)。 一臺壓力機(用來跑腳本的電腦)的 jmeter 默認最大支持 1000 左右的并發(fā)用戶數(shù)(線程數(shù))吼驶,再大的話董虱,容易造成卡頓、無響應等情況获讳,這是受限于 jmeter 其本身的機制和硬件配置(內存阴颖、CPU等); 由于 jmeter 是 java 應用赔嚎,對 CPU 和內存的消耗較大膘盖,在需要模擬大量并發(fā)用戶數(shù)時,單機很容易出現(xiàn) java 內存溢出尤误,導致測試腳本本身就有瓶頸侠畔。 場景: 測試 5000 并發(fā)的場景,如果只用一臺電腦跑壓測腳本损晤,無法達到 5000 并發(fā)(因為單機只能支持1000并發(fā))软棺。此時就需要通過分布式模擬5000并發(fā)(5臺機器起)。 通過一個 Jmeter 控制臺來遠程控制多個 Jmeter 引擎完成測試尤勋。

Apache Jmeter 官網地址:https://jmeter.apache.org/
Apache Jmeter 下載地址:https://jmeter.apache.org/download_jmeter.cgi
Apache Jmeter 分布式壓測官方文檔:https://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html
Apache Jmeter 插件庫:https://jmeter-plugins.org/

原理

jmeter 分布式原理:由控制機發(fā)壓測腳本到每臺遠程執(zhí)行機(壓力機)喘落,然后由控制機收集執(zhí)行機結果。 注意:控制機主要用于控制整個壓測機器集群并收集執(zhí)行數(shù)據(jù)最冰,匯總結果瘦棋。控制機也可以當做壓力機暖哨。 壓力機系統(tǒng)類型無限制:win赌朋、mac、linux 都可以篇裁。

Jmeter 分布式壓測架構圖

image.png

本文采用一臺控制機沛慢,三臺壓力機進行實驗。

壓測環(huán)境搭建

集群環(huán)境

四臺機器的相關配置如下表达布。

機器 環(huán)境 IP 地址 端口(server_port)
控制機 Windows 10 192.168.56.1 10950
壓力機01 CentOS 8 192.168.56.21 10955
壓力機02 CentOS 8 192.168.56.22 10955
壓力機03 CentOS 8 192.168.56.23 10955

軟件環(huán)境

JDK:Java 8(理論上团甲,大版本一致即可) Apache Jmeter:5.5 將 Apache Jmeter 上傳到壓力機上,并解壓到 /usr/local/jmeter 目錄中黍聂。

[root@localhost tmp]# mkdir /usr/local/jmeter
[root@localhost tmp]# unzip apache-jmeter-5.5.zip -d /usr/local/jmeter/
image.png
image.png

目標服務

創(chuàng)建一個 web 服務作為壓測的目標服務躺苦。

編寫服務

此處采用 nodejs 編寫一個簡單的服務身腻。 創(chuàng)建 web-api.js 文件,內部代碼如下:

var http = require('http');
var times = 0;
const server = http.createServer(function (req, res) {
 res.end("HelloWorld - " + Date.now());
 console.log("請求來自" + req.connection.remoteAddress + "圾另,當前請求次數(shù): " + times++);
})
server.listen(12345);
console.log('Server running at port: 12345 ...');

啟動服務

需要安裝 node 環(huán)境霸株。 進入該文件所在目錄,執(zhí)行下面的命令集乔,啟動服務。

node web-api.js
image.png
image.png

服務啟動成功后坡椒,會監(jiān)聽 12345 端口扰路。 使用瀏覽器,訪問服務所在主機的該端口倔叼,就可以請求服務了汗唱。 該服務所在主機 IP 為:192.168.56.1,因此可以請求:http://192.168.56.1:12345丈攒。

image.png
image.png

訪問成功哩罪,結果圖上圖所示。

image.png
image.png

此處訪問兩次的原因是巡验,瀏覽器默認會請求一次 favicon.ico际插。

image.png
image.png

Apache Jmeter 配置

壓力機配置(以壓力機01為例)

壓力機主要是 Linux 系統(tǒng)。

hostname

確保 hostname 不是 localhost.localdomain显设。 查看 hostname

[root@localhost bin]# hostname
localhost.localdomain
image.png
image.png

修改 hostname 為 machine01框弛,重啟計算機生效。

hostnamectl set-hostname machine01

修改 /etc/hosts捕捂,將 machine01 指向本機的 IP 地址瑟枫,該地址不能是回環(huán)地址(127.0.0.1)。

vim /etc/hosts
image.png
image.png

jmeter.properties

修改服務監(jiān)聽的端口指攒,關閉 SSL 認證慷妙。

server_port=10955
server.rmi.ssl.disable=true
image.png
image.png

其他的壓力機配置方法與當前機器的配置類似,具體參數(shù)根據(jù)實際情況配置允悦。

系統(tǒng)參數(shù)調整

linux系統(tǒng)參數(shù)優(yōu)化膝擂。linux默認最大連接數(shù)1024,在壓測過程中經常會出現(xiàn)連接數(shù)不足導致的異常澡屡,需要先調整系統(tǒng)參數(shù)再做測試猿挚。 修改 /etc/sysctl.conf 配置文件

vm.max_map_count=655360
vm.swappiness=1

fs.file-max=655356000
fs.nr_open=104857600

net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000

讓 sysctl 配置生效

sysctl -p

修改 /etc/security/limits.conf

root    soft    nofile    1048576
root    hard    nofile    67108864
root    soft    nproc     102400
root    hard    nproc     655360
*       soft    memlock   unlimited
*       hard    memlock   unlimited

啟動壓力機服務

在 jmeter 安裝目錄中的 bin 目錄下,啟動 jmeter-server 服務驶鹉。

[root@machine01 bin]# ./jmeter-server 
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.56.21:32971](local),objID:[-3568d989:184ef374e05:-7fff, 7836004259729148648]]]
image.png
image.png

控制機配置

控制機為 Windows 系統(tǒng)绩蜻。

jmeter.properties

配置控制機的遠程控制地址和端口,關閉 SSL 認證室埋。

remote_hosts=192.168.56.21:10955,192.168.56.22:10955,192.168.56.23:10955
server_port=10950
server.rmi.ssl.disable=true
image.png
image.png

壓力測試

啟動控制機 jmeter 界面

在控制機的 jmeter 目錄下的 bin 目錄中办绝,啟動 jmeter 應用程序伊约。

jmeter.bat

jmeter 啟動后,界面如下圖所示孕蝉。

image.png
image.png

添加一個壓測計劃屡律,使用 10 個線程(用戶),發(fā)送 HTTP 請求降淮。

image.png
image.png

定義 HTTP 采樣器超埋,并配置要訪問的服務器地址,端口等信息佳鳖。

image.png
image.png

再添加結果樹霍殴、聚合報告,用于查看壓測結果系吩。

檢查壓力機服務是否運行正常

點擊控制機上面菜單中的 Run来庭,選擇 Remote Start,分別測試每一臺壓力機是否運行正常穿挨。 在這個過程中月弛,可以先將線程組配置小一點。

image.png
image.png

分別測試各個壓力機科盛,在目標服務器控制臺上帽衙,看到下面的結果,表示壓力機運行正常土涝。

image.png
image.png

啟動分布式壓測

jmeter 的運行方式有兩種模式:GUI 模式佛寿、CLI 模式。因此分布式壓測有就有兩種方式但壮。

GUI 模式

啟動控制機的 jmeter 的安裝目錄下的 bin 目錄中的 jmeter.bat冀泻,啟動 jmeter 界面。 此時蜡饵,可以修改好線程組的數(shù)量弹渔,在控制機中配置的線程數(shù)以及運行次數(shù)等信息,會分發(fā)給所有的壓測機執(zhí)行溯祸,即:每臺壓測機都會執(zhí)行該配置下的壓測肢专。 配置好線程組信息后,啟動所有壓力機焦辅。 點擊控制機上面菜單中的 Run博杖,選擇 Remote Start All,即同時啟動所有壓力機筷登。

image.png
image.png

遠程壓力機接收指令并執(zhí)行成功的話剃根,會看到 Starting ... 和 Finished ... 兩行信息。

[root@machine01 bin]# ./jmeter-server 
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[192.168.56.21:32971](local),objID:[-3568d989:184ef374e05:-7fff, 7836004259729148648]]]
Starting the test on host 192.168.56.21:10955 @ December 8, 2022 8:52:42 AM CST (1670460762930)
Finished the test on host 192.168.56.21:10955 @ December 8, 2022 8:52:44 AM CST (1670460764297)

在壓測的過程中前方,可以在聚合報告中狈醉,看到壓測的結果廉油。 此處配置的線程組中的線程數(shù)是 10,循環(huán)一次苗傅,共有 3 臺壓力機抒线,因此采樣數(shù)量就是 10*3=30,總共執(zhí)行了 30 次請求渣慕。

image.png
image.png

分布式壓測完成嘶炭。

CLI 模式

控制機進入 jmeter 的安裝目錄下的 bin 目錄中,打開控制臺摇庙。

# 執(zhí)行壓測腳本,-r 表示啟動所有壓力機旱物;-R:IP:PORT 啟動指定壓力機
jmeter -n -t ${jmx_file_path} -r -l ${jtl_result_path}
# 生成報告
jmeter -g ${jtl_result_path} -e -o ${output_dir_path}
說明

{jmx_file_path}:jmx 壓測線程組配置文件;{jtl_result_path}:jtl 結果存儲位置卫袒;
${output_dir_path}:測試報告的結果保存目錄;

案例
# 指定壓力機執(zhí)行壓測腳本
jmeter -n -t /home/test/test.jmx -R 192.168.56.21:10955,192.168.56.22:10955 -l /home/test/test_result.jtl
# 創(chuàng)建目錄
mkdir -p /home/test/results
# 生成報告
jmeter -g /home/test/test_result.jtl -e -o /home/test/results

常見問題

在進行分布式壓測的過程中单匣,可能會遇到一些問題夕凝。

loopback address 問題

[root@localhost bin]# ./jmeter-server 
Created remote object: UnicastServerRef2 [liveRef: [endpoint:[127.0.0.1:46787](local),objID:[-4b9cf262:184ed155baf:-7fff, -7793164881645611591]]]
Server failed to start: java.rmi.RemoteException: Cannot start. localhost.localdomain is a loopback address.
An error occurred: Cannot start. localhost.localdomain is a loopback address.
image.png
image.png

解決方法

方法一

修改 hostname,讓主機名指向本機非回環(huán)地址户秤。 例如:壓力機01 的 IP 地址為 192.168.56.21码秉,修改 hostname 為 machine01,重啟計算機生效鸡号。

hostnamectl set-hostname machine01

修改 /etc/hosts转砖,將 machine01 指向本機的 IP 地址,該地址不能是回環(huán)地址(127.0.0.1)鲸伴。

vim /etc/hosts
image.png
image.png

方法二

帶本地IP參數(shù)啟動 jmeter-server

# windows
jmeter-server.bat -Djava.rmi.server.hostname=192.168.56.21
# Linux
./jmeter-server -Djava.rmi.server.hostname=192.168.56.21

方法三

修改 jmeter-server府蔗,固定壓力機的 RMI_HOST_DEF。

RMI_HOST_DEF=-Djava.rmi.server.hostname=192.168.56.21

然后啟動 jmeter-server 服務汞窗。

SSLHandshakeException

error during JRMP connection establishment; nested exception is: 
 javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake
image.png

解決方法

修改 jmeter.properties姓赤,關閉 SSL 認證。

server.rmi.ssl.disable=true

RegCreateKeyEx(...)

WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.
image.png

解決方法

使用管理員權限啟動 jmeter-server.bat仲吏。

rmi_keystore.jdk

image.png
image.png

解決方法

出現(xiàn)該問題的原因是不铆,壓力機需要控制機提供認證文件。

方法一

修改 jmeter.properties 配置文件裹唆,關閉 SSL 認證誓斥。

server.rmi.ssl.disable=true

方法二

啟動 create-rmi-keystore.bat,生成一個認證文件许帐。

image.png
image.png
image.png
image.png

將該文件分發(fā)到所有壓力機的 jmeter 安裝目錄中的 bin 目錄下劳坑。 重啟壓力機 jmeter-server 服務。

機器之間 PING 不通

所有的機器最好在同一個局域網舞吭,關閉防火墻泡垃。 windows 關閉防火墻析珊。

image.png
image.png

Linux 關閉防火墻

systemctl stop firewalld

遠程服務執(zhí)行腳本后,響應數(shù)據(jù)為空

jmeter 客戶端默認是統(tǒng)計模式蔑穴,不顯示響應數(shù)據(jù)忠寻,減少開銷。 如果想要查看響應數(shù)據(jù)存和,修改 jmeter.properties 配置文件奕剃。

mode=Standard
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市捐腿,隨后出現(xiàn)的幾起案子纵朋,更是在濱河造成了極大的恐慌,老刑警劉巖茄袖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件操软,死亡現(xiàn)場離奇詭異,居然都是意外死亡宪祥,警方通過查閱死者的電腦和手機聂薪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝗羊,“玉大人藏澳,你說我怎么就攤上這事∫遥” “怎么了翔悠?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長野芒。 經常有香客問我蓄愁,道長,這世上最難降的妖魔是什么复罐? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任涝登,我火速辦了婚禮,結果婚禮上效诅,老公的妹妹穿的比我還像新娘胀滚。我一直安慰自己,他們只是感情好乱投,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布咽笼。 她就那樣靜靜地躺著,像睡著了一般戚炫。 火紅的嫁衣襯著肌膚如雪剑刑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音施掏,去河邊找鬼钮惠。 笑死,一個胖子當著我的面吹牛七芭,可吹牛的內容都是我干的素挽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼狸驳,長吁一口氣:“原來是場噩夢啊……” “哼预明!你這毒婦竟也來了?” 一聲冷哼從身側響起耙箍,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤撰糠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辩昆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阅酪,經...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年汁针,在試婚紗的時候發(fā)現(xiàn)自己被綠了遮斥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡扇丛,死狀恐怖,靈堂內的尸體忽然破棺而出尉辑,到底是詐尸還是另有隱情帆精,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布隧魄,位于F島的核電站卓练,受9級特大地震影響,放射性物質發(fā)生泄漏购啄。R本人自食惡果不足惜襟企,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狮含。 院中可真熱鬧顽悼,春花似錦、人聲如沸几迄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽映胁。三九已至木羹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘱丢,已是汗流浹背侣诺。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留糜芳,地道東北人脐瑰。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓妖枚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蚪黑。 傳聞我的和親對象是個殘疾皇子盅惜,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內容

  • 為什么要做分布式壓測? 在進行性能壓測的時候忌穿,往往需要很大的并發(fā)量抒寂。但是一臺電腦由于硬件方面的原因,支持的并發(fā)數(shù)并...
    wenshuang_he閱讀 601評論 0 2
  • 需求 現(xiàn)在項目需要對某個接口進行并發(fā)訪問掠剑,測試服務器的抗壓處理批量請求能力 現(xiàn)況 單臺機器由于配置(CPU屈芜、內存)...
    在下YM閱讀 360評論 0 0
  • 一、前言 對于運維工程師來說朴译,需要對自己維護的服務器性能瓶頸了如指掌井佑,比如我當前的架構每秒并發(fā)是多少,我服務器最大...
    Root_123閱讀 21,016評論 5 67
  • 本文只講jmeter分布式壓測怎么在Linux環(huán)境下配置:使用分布式壓測眠寿,是因為單個壓測機并發(fā)到不到系統(tǒng)要求躬翁,所以...
    hao0_0閱讀 1,049評論 0 0
  • 分布式壓測條件 1、運行相同版本的JMeter 2盯拱、使用相同的java版本 3盒发、都在一個網段 4、server.r...
    小波114207閱讀 614評論 0 0