項(xiàng)目名稱(chēng)有創(chuàng)意大全搜索引擎優(yōu)化是什么
目錄
前言
wrk
優(yōu)點(diǎn)
缺點(diǎn)
jmeter
優(yōu)點(diǎn)
缺點(diǎn)
locust
優(yōu)點(diǎn)
缺點(diǎn)
總結(jié)
資料獲取方法
前言
當(dāng)你想做性能測(cè)試的時(shí)候,你會(huì)選擇什么樣的測(cè)試工具呢?是會(huì)選擇wrk?jmeter?locust?還是loadrunner呢?
今天,筆者將根據(jù)自己使用經(jīng)驗(yàn),針對(duì)jmeter、locust、wrk和loadrunner常用的性能測(cè)試工具進(jìn)行簡(jiǎn)單介紹和對(duì)比。首先,四者基本對(duì)比圖:
. | loadrunner | jmeter | locust | wrk |
---|---|---|---|---|
分布式壓力 | 支持 | 支持 | 支持 | 不支持 |
單機(jī)并發(fā)能力 | 低 | 低 | 高 | 低 |
并發(fā)機(jī)制 | 進(jìn)程/線程 | 線程 | 協(xié)程 | 線程 |
開(kāi)發(fā)語(yǔ)言 | C/Java | Java | Python | C |
報(bào)告與分析 | 完善 | 簡(jiǎn)單圖標(biāo) | 簡(jiǎn)單圖表 | 簡(jiǎn)單結(jié)果 |
授權(quán)方式 | 商業(yè)收費(fèi) | 開(kāi)源免費(fèi) | 開(kāi)源免費(fèi) | 開(kāi)源免費(fèi) |
測(cè)試腳本形式 | C/Java | GUI | Python | C |
資源監(jiān)控 | 支持 | 不支持 | 不支持 | 不支持 |
由于loadrunner為商業(yè)收費(fèi)模式,對(duì)于公司級(jí)測(cè)試使用而言涉及到授權(quán)問(wèn)題,因此,本文暫不對(duì)loadrunner進(jìn)行詳細(xì)討論。
wrk
wrk是輕量化的http性能測(cè)試工具,采用線程+網(wǎng)絡(luò)異步IO模型,網(wǎng)絡(luò)異步IO可以使得系統(tǒng)使用很少的線程模擬大量的網(wǎng)絡(luò)連接以增大并發(fā)量、提高壓力。
優(yōu)點(diǎn)
- 操作簡(jiǎn)單、易于使用,
使用方式例如:
./wrk -c 1000 -t 8 -d 10s http://www.baidu.com
主要包括以下參數(shù):
- -t(--thread) 需要模擬的線程數(shù);
- -c(connection) 需要模擬的連接數(shù);
- --timeout 超時(shí)的時(shí)間;-d(--duration) 測(cè)試的持續(xù)時(shí)間
缺點(diǎn)
①wrk只支持http協(xié)議類(lèi)型請(qǐng)求(如get、post等),但若是需要執(zhí)行g(shù)et之外的http類(lèi)型請(qǐng)求需要使用者自行編寫(xiě)lua腳本;
②只允許單機(jī)測(cè)試,不支持多機(jī)分布式壓力測(cè)試,因此wrk適合性能基準(zhǔn)測(cè)試,對(duì)于模擬上萬(wàn)的用戶并發(fā)測(cè)試顯得有點(diǎn)力不從心;
③測(cè)試結(jié)果簡(jiǎn)單,無(wú)詳細(xì)圖表解析,舉例如下;
wrk測(cè)試結(jié)果輸出:
jmeter
jmeter同樣采用線程并發(fā)機(jī)制,但其主要依靠增加線程數(shù)提高并發(fā)量,當(dāng)單機(jī)模擬數(shù)以千計(jì)的并發(fā)用戶時(shí),對(duì)于CPU和內(nèi)存的消耗比較大。與上述wrk相比,jmeter本身具有以下優(yōu)點(diǎn)和缺點(diǎn):
優(yōu)點(diǎn)
①界面可視化操作,可以使用錄制腳本方式對(duì)較為復(fù)雜的用戶流建模,還可以創(chuàng)建斷言來(lái)驗(yàn)證測(cè)試行為是否通過(guò);
②表格、圖形、結(jié)果樹(shù)等多類(lèi)可視化數(shù)據(jù)分析和報(bào)告輸出,舉例如下;
jmeter聚合報(bào)告及表格查看結(jié)果:
③支持http、ftp、tcp等多種協(xié)議類(lèi)型測(cè)試;
④支持分布式壓力測(cè)試,但對(duì)于上萬(wàn)的用戶并發(fā)測(cè)試需要多臺(tái)測(cè)試機(jī)支持,資源要求比較大;
⑤可以用于測(cè)試固定吞吐量下的系統(tǒng)性能,例如在100QPS(QPS:每秒查詢(xún)率)下系統(tǒng)的響應(yīng)時(shí)間和資源消耗;
缺點(diǎn)
jmeter的GUI模式消耗資源較大,當(dāng)需要測(cè)試高負(fù)載時(shí),需要先使用GUI工具來(lái)生成XML測(cè)試計(jì)劃,然后在非GUI模式下導(dǎo)入測(cè)試計(jì)劃運(yùn)行測(cè)試,并且關(guān)閉不需要的偵聽(tīng)器(收集數(shù)據(jù)與展示測(cè)量的組件),因?yàn)閭陕?tīng)器也會(huì)消耗掉本用于生成負(fù)載的大量資源。測(cè)試結(jié)束后后,需要將原始結(jié)果數(shù)據(jù)導(dǎo)入GUI以才能查看結(jié)果。
locust
locust是一個(gè)的簡(jiǎn)單易用的分布式負(fù)載測(cè)試工具,主要用來(lái)對(duì)網(wǎng)站進(jìn)行負(fù)載壓力測(cè)試。locust使用python語(yǔ)言開(kāi)發(fā),測(cè)試資源消耗遠(yuǎn)遠(yuǎn)小于java語(yǔ)言開(kāi)發(fā)的jmeter。且其支持分布式部署測(cè)試,能夠輕松模擬百萬(wàn)級(jí)用戶并發(fā)測(cè)試。
與jmeter和wrk相比,locust具有以下優(yōu)缺點(diǎn):
優(yōu)點(diǎn)
①不同與wrk和jmeter使用線程數(shù)提高并發(fā)量,locust借助于協(xié)程實(shí)現(xiàn)對(duì)用戶的模擬,相同物理資源(機(jī)器cpu、內(nèi)存等)配置下locust能支持的并發(fā)用戶數(shù)相比jmeter可以提升一個(gè)數(shù)量級(jí);
②相比wrk對(duì)復(fù)雜場(chǎng)景測(cè)試的捉襟見(jiàn)肘和jmeter需要界面點(diǎn)擊錄制復(fù)雜場(chǎng)景的麻煩,locust只需用戶使用python編寫(xiě)用戶場(chǎng)景完成測(cè)試;
③不同與jmeter復(fù)雜的用戶使用界面,locust的界面干凈整潔,可以實(shí)時(shí)顯示測(cè)試的相關(guān)細(xì)節(jié)(如發(fā)送請(qǐng)求數(shù)、失敗數(shù)和當(dāng)前發(fā)送請(qǐng)求速度等);
④locust雖然是面向web應(yīng)用測(cè)試的,但是它可以用來(lái)測(cè)試幾乎所有系統(tǒng)。給locust編寫(xiě)一個(gè)客戶端,可以滿足你所有的測(cè)試要求;
缺點(diǎn)
同wrk一樣,locust測(cè)試結(jié)果輸出不如jmeter的測(cè)試結(jié)果展示類(lèi)型多;
locust測(cè)試結(jié)果:
總結(jié)
本文簡(jiǎn)單介紹和對(duì)比了wrk、jmeter及l(fā)ocust三種性能測(cè)試工具,希望能給大家?guī)?lái)基礎(chǔ)的認(rèn)識(shí)。此外讓我們最后一起來(lái)看看面臨以下測(cè)試需求,我們應(yīng)該如何在三者中進(jìn)行選擇:
我想使用界面操作的形式對(duì)我的系統(tǒng)做性能測(cè)試,并且希望我的測(cè)試數(shù)據(jù)有個(gè)良好的可視化展示方式;
建議使用jmeter工具
我想要對(duì)我系統(tǒng)的http rest接口進(jìn)行性能測(cè)試,但是我之前沒(méi)有進(jìn)行過(guò)任何測(cè)試,我不知道我的系統(tǒng)QPS是個(gè)什么樣的水平;
建議使用wrk工具
我想對(duì)我的系統(tǒng)模擬用戶操作進(jìn)行復(fù)雜場(chǎng)景的性能測(cè)試;
建議使用locust工具
我想測(cè)試我的系統(tǒng)在一定QPS情況下,一段時(shí)間內(nèi)的性能指標(biāo)(cpu消耗、內(nèi)存消耗等);
建議使用jmeter工具
我想使用勻速請(qǐng)求的方式,對(duì)我的系統(tǒng)進(jìn)行性能測(cè)試;
建議使用jmeter或locust工具
我想體驗(yàn)編程的樂(lè)趣,自己編寫(xiě)腳本進(jìn)行性能測(cè)試;
http請(qǐng)求:wrk,使用lua語(yǔ)言編寫(xiě)腳本;
locust,使用python語(yǔ)言編寫(xiě)腳本;
或者,just do it by yourself,自己選擇編程語(yǔ)言編寫(xiě)性能測(cè)試腳本。
附錄
wrk 使用參數(shù)說(shuō)明
①參數(shù)-c(connection,線鏈接數(shù))與操作系統(tǒng)文件句柄數(shù)相關(guān),-c不能超過(guò)文件句柄數(shù)設(shè)置,開(kāi)始測(cè)試前應(yīng)保證系統(tǒng)可用端口數(shù)大于-c設(shè)置;
②參數(shù)-t(--thread,線程數(shù))與操作系統(tǒng)cpu核數(shù)有關(guān),-t不宜設(shè)置過(guò)大,過(guò)大的線程數(shù)設(shè)置反而會(huì)因線程調(diào)度反而使性能降低。如下圖所示,操作系統(tǒng)為8核cpu:相同連接數(shù)和測(cè)試時(shí)長(zhǎng)條件下,不同線程數(shù)對(duì)同一系統(tǒng)REST接口測(cè)試,從測(cè)試結(jié)果可以看出當(dāng)thread=8(與cpu核數(shù)一致)時(shí)系統(tǒng)性能測(cè)試結(jié)果最佳,性能波動(dòng)最小;
8核cpu:相同連接數(shù)和測(cè)試時(shí)長(zhǎng)條件下,不同線程數(shù)對(duì)同一系統(tǒng)REST接口測(cè)試結(jié)果對(duì)比圖
資料獲取方法
【留言777】
各位想獲取源碼等教程資料的朋友請(qǐng)點(diǎn)贊 + 評(píng)論 + 收藏,三連!
三連之后我會(huì)在評(píng)論區(qū)挨個(gè)私信發(fā)給你們~