Apache JMeter是Apache組織開(kāi)發(fā)的基于Java的壓力測(cè)試工具。用于對(duì)軟件做壓力測(cè)試,它最初被設(shè)計(jì)用于Web應(yīng)用測(cè)試茴厉,但后來(lái)擴(kuò)展到其他測(cè)試領(lǐng)域掏缎。
JMeter是一個(gè)圖形化軟件喇完,用戶設(shè)置好test plan之后執(zhí)行,就可以測(cè)試服務(wù)器了。
由于我的阿里云不能圖形化,所以我在Linux以及本地windows上分別裝了JMeter:先用自己電腦設(shè)置好test plan千元,再上傳到阿里云服務(wù)器上運(yùn)行。
?JMeter安裝步驟
(JMeter是java寫的颤绕,所以安裝JMeter前要確保JDK是最新的幸海,我的JDK是1.8)
去官網(wǎng)下載二進(jìn)制文件壓縮包(不要下源代碼):Apache JMeter - Download Apache JMeter
注:關(guān)于binary和source,tgz和zip的區(qū)別:JMeter安裝時(shí)Binarys與Source奥务,tgz與zip如何選擇物独? - 五尐毛 - 博客園
不過(guò)其實(shí)windows下也能解壓tgz,Linux也能解壓zip氯葬。挡篓。。linux和windows用相同壓縮包的就行溢谤。
windows下JMeter安裝
建議對(duì)windows熟的(應(yīng)該大部分人都是操作windows比較熟練吧)先裝windows的瞻凤。裝好之后憨攒,Linux那邊直接重復(fù)相同步驟就可以世杀。
1. 解壓apache-jmeter-5.1.1.tgz
2. 下載JMeter中支持MQTT的插件
jmeter原生中沒(méi)有測(cè)試MQTT,因此必須加相關(guān)的插件jar包肝集。
在 GitHub - emqx/mqtt-jmeter: MQTT JMeter Plugin瞻坝,將Download/v1.0.1目錄下的mqtt-xmeter-1.0.1-jar-with-dependencies.jar下載下來(lái),然后放在你的jmeter文件夾lib/ext下。
3. 試試bin/jmeter.bat能不能正常打開(kāi)~
JMeter.bat的位置如圖
能正常打開(kāi)所刀、顯示圖形界面的話就OK了衙荐。
注:我有看到一些兩三年前的博客寫到,需要把JMeter加到系統(tǒng)環(huán)境變量浮创,但是我并沒(méi)有加也可以正常使用忧吟,現(xiàn)在應(yīng)該是不用更改環(huán)境變量了。
linux下JMeter安裝
1. 解壓apache-jmeter-5.1.1.tgz
tgz格式的壓縮包不能用unzip哦斩披。用 tar zxvf? apache-jmeter-5.1.1.tgz -C ./? 解壓到當(dāng)前目錄
(關(guān)于tgz解壓縮:在linux中如何解壓.tgz - 存錢罐 - 博客園)
2. 同windows下安裝的第二步
圖方便的話溜族,直接把本地windows的lib/ext文件夾里mqtt-xmeter-1.0.1-jar-with-dependencies.jar上傳到Linux端的lib/ext即可。
3. 配置環(huán)境變量
vim etc/profile
增加如下內(nèi)容:
export PATH=/root/apache-jmeter-5.1.1/bin:$PATH
就像下面這張圖這樣:
改的時(shí)候要仔細(xì)垦沉,PATH寫錯(cuò)了補(bǔ)救可是很麻煩的哦
改完了別忘了執(zhí)行source /etc/profile
JMeter的安裝到這里就完成了煌抒。(真是比emqtt_benchmark簡(jiǎn)單多了)
?添加test plan
打開(kāi)windows的JMeter.bat,設(shè)置一個(gè)test plan
1. 添加線程組
2. 添加MQTT connect 測(cè)試
3. 相關(guān)設(shè)置
number of threads 線程數(shù):我設(shè)置了50000厕倍。因?yàn)榭吹接胁┛驼f(shuō)“1G內(nèi)存對(duì)應(yīng)6W設(shè)備連接”寡壮。
然鵝我最后線程數(shù)只達(dá)到了1W多(阿里云輕量服務(wù)器,1核CPU讹弯,2GB內(nèi)存)
1.?Server name or IP:?指向被測(cè)MQTT服務(wù)器地址况既。我也不太懂為什么127.0.0.1都可以
2.?Port number: TCP連接的端口是1883;SSL連接:8883闸婴。
3. MQTT vesion: EMQ X官網(wǎng)說(shuō)支持V3.1/V3.1.1坏挠。所以這里選3.1或者3.1.1都可以。
后面那個(gè)user name 和 password寫登陸emqx dashboard的那個(gè)
4.?
ClientId prefix:?標(biāo)識(shí)客戶端的固定前綴邪乍,每個(gè)連接(虛擬用戶)再添加一個(gè)uuid串降狠,整個(gè)作為客戶標(biāo)識(shí)。
Keep alive(s):?心跳信號(hào)發(fā)送間隔庇楞。例如榜配,300表示客戶端每隔300秒向服務(wù)器發(fā)出ping請(qǐng)求,以保持連接活躍吕晌。
Connection keep time(s):?連接建立后蛋褥,保持該連接的時(shí)長(zhǎng)。例如睛驳,1800表示1800秒之后連接將被關(guān)閉烙心,即使一直發(fā)送心跳信號(hào)。
Connect attempt max:?第一次連接過(guò)程中乏沸,嘗試重連的最大次數(shù)淫茵。超過(guò)該次數(shù)則認(rèn)為連接失敗。
Reconnect attempt max:?后繼連接過(guò)程中蹬跃,嘗試重連的最大次數(shù)匙瘪。超過(guò)該次數(shù)則認(rèn)為連接失敗。
(參考:https://blog.csdn.net/vicky_lov/article/details/84584334)
設(shè)置完,保存為jmx格式即可丹喻。
?運(yùn)行test plan
jmeter -n -t /root/apache-jmeter-5.1.1/bin/test.jmx?
我最開(kāi)始報(bào)了這樣的錯(cuò):
Unable to get local host IP address.; nested exception is:
java.net.UnknownHostException: iZwz95j86y235aroi85ht0Z: iZwz95j86y235aroi85ht0Z: Name or service not known
解決方法:
vim /etc/hosts
#添加你的IP地址 以及剛剛報(bào)錯(cuò)信息里提到的這個(gè)用戶
例如? 123.456.789 iZwz95j86y235aroi85ht0Z
參考:JMeter接口壓力測(cè)試課程入門到高級(jí)實(shí)戰(zhàn)教程(詳情)-wx5ab8aabd3e73c的博客-51CTO博客
然后就可以運(yùn)行了薄货。
運(yùn)行的時(shí)候可以打開(kāi)dashboard查看,可以看到連接的client數(shù)量在噌噌噌的往上漲碍论。
如下圖所示谅猾,可以看到連接的峰值為11581,內(nèi)存為340M鳍悠。這個(gè)內(nèi)存好像是emq的節(jié)點(diǎn)根據(jù)當(dāng)前的線程數(shù)分配的赊瞬,線程增多,分配的內(nèi)存(圖中的total)就會(huì)相應(yīng)地增加(不過(guò)贼涩,免費(fèi)版emqx的內(nèi)存是有上限的)
但是我不太懂那個(gè)(used/available)巧涧,為啥是19111。
可以看到這個(gè)clientid和我們?cè)趖est plan中設(shè)置的一樣遥倦。這些client都是測(cè)試產(chǎn)生的谤绳。