菜鳥的性能測(cè)試之路(一)——Apache Bench

在公司業(yè)務(wù)高速增長(zhǎng)的大前提下,我重新開始關(guān)注專項(xiàng)測(cè)試。在和架構(gòu)師討論過后,接下來會(huì)優(yōu)先關(guān)注性能測(cè)試,其中包括兩個(gè)核心工具:Apache Jmeter和Apache Bench。在此前的工作中,我只用過LR(Loadrunner)工具來進(jìn)行性能測(cè)試,但是這個(gè)工具我個(gè)人感覺并不輕量,使用起來要花費(fèi)大量人力物力。相對(duì)而言,Jmeter和Bench這兩種工具輕量化,更適合中小企業(yè)使用。Apache Jmeter在以前的接口測(cè)試時(shí)候使用過,在現(xiàn)業(yè)務(wù)里應(yīng)該也會(huì)作為壓測(cè)工具。但畢竟是對(duì)Jmeter有過接觸,所以我決定先了解Apache Bench。


初識(shí)Apache Bench

Apache Bench 是 Apache 服務(wù)器的一個(gè)web壓力測(cè)試工具,簡(jiǎn)稱ab(是的,你沒有聽錯(cuò),我當(dāng)初也以為是Angelababy來著)。ab也是一個(gè)命令行工具,對(duì)發(fā)起負(fù)載的本機(jī)要求很低,根據(jù)ab命令可以創(chuàng)建很多的并發(fā)訪問線程,模擬多個(gè)訪問者同時(shí)對(duì)某一個(gè)URL地址進(jìn)行訪問,因此可以用來測(cè)試目標(biāo)服務(wù)器的負(fù)載壓力??傮w來說,ab工具小巧簡(jiǎn)單,上手學(xué)習(xí)較快,可以提供需要的基本性能指標(biāo);但是缺點(diǎn)就是沒有圖形化結(jié)果,不能監(jiān)控。


安裝Apache Bench

要使用ab,首先要下載Apache服務(wù)器,從Apache官網(wǎng)首頁(yè)可以找到下載的頁(yè)面。但是目前網(wǎng)上大都是針對(duì)linux下ab的使用,我這里需要在Windows環(huán)境下進(jìn)行ab的安裝與使用。但是Apache官方只提供Apache的源碼版,也就是source版,而不提供二進(jìn)制版(Binaries)。一般來說各個(gè)平臺(tái)下的Binaries版本都是一些社區(qū)或其它網(wǎng)站提供的,我們?cè)赪indows上使用ab,肯定要用已經(jīng)編譯好的版本。想獲取二進(jìn)制版本,可以在ApacheHaus、Apache Lounge、BitNami WAMP Stack、WampServer、XAMPP選擇一個(gè)網(wǎng)站來下載,我個(gè)人親測(cè)Apache Lounge可用,具體地址如下:Apache Lounge下載地址 。


Apache Lounge下載頁(yè)面


進(jìn)入頁(yè)面之后,根據(jù)自己需要下載32位和64位版本。這里要注意的是,要正常運(yùn)行Apache 2.4 的話,需要先安裝最新版C++ Redistributable Visual Studio 2017組件,也可以在這個(gè)頁(yè)面進(jìn)行下載。組件安裝完成之后,把下載好的Apache解壓,會(huì)發(fā)現(xiàn)里面有個(gè)ReadMe的文檔,一定要好好看一下,涉及到安裝環(huán)境和注意事項(xiàng)。


ReadMe文檔


從文檔中可以看到,Apache需要解壓在一個(gè)盤符的根目錄下,這就是所謂的“ServerRoot”,默認(rèn)是配置在:{Apache24}\conf\httpd.conf這個(gè)文件中的。


httpd.conf


但是從httpd.conf可以看出,默認(rèn)配置的ServerRoot是放在了C盤(C:/Apache24),所以我把文件解壓放到C盤(如果放到D盤還是無法運(yùn)行的)。這些步驟準(zhǔn)備好了之后,就可以運(yùn)行bin目錄下的httpd.exe文件,運(yùn)行之后后臺(tái)服務(wù)就啟動(dòng)了,這時(shí)候在瀏覽器中輸入:http://localhost/,如果能夠看到測(cè)試頁(yè)面,就說明服務(wù)啟動(dòng)成功了。


localhost頁(yè)面


使用Apache bench


這時(shí)候我要開始使用Apache Bench的功能了,在命令行下跳轉(zhuǎn)到bin目錄下,運(yùn)行ab.exe就能夠看到提示信息了:


ab第一次使用


這里可以注意到一個(gè)用法說明:Usage: ab.exe [options] [http://]hostname[:port]/path。也就是說,一定要在需要測(cè)試的url末尾加一個(gè)path,否則測(cè)試時(shí)會(huì)認(rèn)為url非法。

這里我先嘗試一下對(duì)百度首頁(yè)進(jìn)行一個(gè)請(qǐng)求總數(shù)為1000,本次請(qǐng)求并發(fā)數(shù)為500的測(cè)試,測(cè)試結(jié)果如下:


1
2

可以看到,如圖列出了“請(qǐng)求命令”、“測(cè)試結(jié)果主體”、“所測(cè)試數(shù)據(jù)返回時(shí)間的百分比”,其中,“測(cè)試結(jié)果主體”里面,具體的參數(shù)為:

Concurrency Level: 并發(fā)量。(500)

Time taken for tests: 整個(gè)測(cè)試所用的時(shí)間。(34.809 s)

Complete requests: 完成的請(qǐng)求數(shù)。(1000)

Failed requests: 失敗的請(qǐng)求數(shù)。(0)

Non-2xx responses: 如果接收到的HTTP響應(yīng)數(shù)據(jù)的頭信息中含有2XX以外的狀態(tài)碼,則會(huì)在測(cè)試結(jié)果中顯示另一個(gè)名為“Non-2xx responses”的統(tǒng)計(jì)項(xiàng),用于統(tǒng)計(jì)這部分請(qǐng)求數(shù)(這些請(qǐng)求并不算在失敗的請(qǐng)求中)。(1000)

Total transferred: 表示所有請(qǐng)求的響應(yīng)數(shù)據(jù)長(zhǎng)度總和,包括每個(gè)HTTP響應(yīng)數(shù)據(jù)的頭信息和正文數(shù)據(jù)的長(zhǎng)度。(502000 bytes)

HTML transferred: 表示所有請(qǐng)求的響應(yīng)數(shù)據(jù)中正文數(shù)據(jù)的總和,也就是減去了Total transferred中HTTP響應(yīng)數(shù)據(jù)中的頭信息的長(zhǎng)度。(222000 bytes)

Requests per second(RPS): 吞吐率。要清楚吞吐率是與并發(fā)數(shù)相關(guān)的,即使請(qǐng)求總數(shù)相同,但如果并發(fā)數(shù)不一樣,吞吐率還是很可能有很大差異的。 (28.73【#/second】)

計(jì)算公式:Complete requests/Time taken for tests

Time per request(mean): 用戶平均請(qǐng)求等待時(shí)間。也就是一次并發(fā)總的時(shí)間。 (17404.500 ms)

計(jì)算公式:Time token for tests/(Complete requests/Concurrency Level)。

Time per request(mean, across all concurrent requests): 服務(wù)器平均請(qǐng)求等待時(shí)間。也就是一次請(qǐng)求(在本例中也就是500中的平均每一次)所需時(shí)間。 (34.809 ms)

計(jì)算公式:Time taken for tests/Complete requests? ; 也可以這么統(tǒng)計(jì):Time per request/Concurrency Level。

Transfer rate: 表示這些請(qǐng)求在單位時(shí)間內(nèi)從服務(wù)器獲取的數(shù)據(jù)長(zhǎng)度。 (14.08 Kbytes/sec)

計(jì)算公式:Total trnasferred/ Time taken for tests?

這個(gè)統(tǒng)計(jì)很好的說明服務(wù)器的處理能力達(dá)到極限時(shí),其出口寬帶的需求量。

Percentage of requests served within a certain time (ms) : 這部分?jǐn)?shù)據(jù)用于描述每個(gè)請(qǐng)求處理時(shí)間的分布情況,比如以上測(cè)試,80%的請(qǐng)求處理時(shí)間都不超過6ms,這個(gè)處理時(shí)間是指前面的Time per request,即對(duì)于單個(gè)用戶而言,平均每個(gè)請(qǐng)求的處理時(shí)間。


更多命令參數(shù)參考:

-n requests Number of requests to perform //本次測(cè)試發(fā)起的總請(qǐng)求數(shù)

-c concurrency Number of multiple requests to make   //一次產(chǎn)生的請(qǐng)求數(shù)(或并發(fā)數(shù))

-t timelimit Seconds to max. wait for responses    //測(cè)試所進(jìn)行的最大秒數(shù),默認(rèn)沒有時(shí)間限制。

-r Don't exit on socket receive errors.? ? // 拋出異常繼續(xù)執(zhí)行測(cè)試任務(wù)

-p postfile File containing data to POST  //包含了需要POST的數(shù)據(jù)的文件,文件格式如“p1=1&p2=2”.使用方法是 -p 111.txt

-T content-type Content-type header for POSTing

//POST數(shù)據(jù)所使用的Content-type頭信息,如 -T “application/x-www-form-urlencoded” 。 (配合-p)

-v verbosity How much troubleshooting info to print

//設(shè)置顯示信息的詳細(xì)程度 – 4或更大值會(huì)顯示頭信息, 3或更大值可以顯示響應(yīng)代碼(404, 200等), 2或更大值可以顯示警告和其他信息。 -V 顯示版本號(hào)并退出。

-C attribute Add cookie, eg. -C “c1=1234,c2=2,c3=3” (repeatable)

//-C cookie-name=value 對(duì)請(qǐng)求附加一個(gè)Cookie:行。 其典型形式是name=value的一個(gè)參數(shù)對(duì)。此參數(shù)可以重復(fù),用逗號(hào)分割。

提示:可以借助session實(shí)現(xiàn)原理傳遞 JSESSIONID參數(shù), 實(shí)現(xiàn)保持會(huì)話的功能,如-C ” c1=1234,c2=2,c3=3, JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8″ 。

-w Print out results in HTML tables  //以HTML表的格式輸出結(jié)果。默認(rèn)時(shí),它是白色背景的兩列寬度的一張表。



總體體驗(yàn)下來,具有輕量化特點(diǎn)的bench還是很適合中小企業(yè)使用,尤其在于模擬訪問頁(yè)面的多機(jī)測(cè)試。最后,希望更多行業(yè)大??梢远喽嘟o我指教和交流,助我一起成長(zhǎng)。


讀更多的好書,拍更美的照片,寫更酷的代碼,遇見更有趣的人,愿望是實(shí)現(xiàn)從IT菜鳥到全棧工程師的蛻變。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,641評(píng)論 19 139
  • 網(wǎng)站性能壓力測(cè)試是服務(wù)器網(wǎng)站性能調(diào)優(yōu)過程中必不可缺少的一環(huán)。只有讓服務(wù)器處在高壓情況下,才能真正體現(xiàn)出軟件、硬件等...
    mode1943閱讀 1,837評(píng)論 1 2
  • 很多Node.js初學(xué)者都會(huì)有這樣的疑惑,Node.js到底是單線程的還是多線程的?通過本章的學(xué)習(xí),能夠讓讀者較為...
    越努力越幸運(yùn)_952c閱讀 3,818評(píng)論 4 36
  • 把我剝開咬一口把我縫起來親一口 你無需擔(dān)憂反正你是在做夢(mèng)
    陳果_周綠閱讀 192評(píng)論 0 1
  • 如果感覺身上的西服不是很筆挺,首先應(yīng)該懷疑西服的尺寸不合身。是否覺得寬松,西服尺寸偏大等。上世紀(jì)80年代,曾經(jīng)流行...
    凱絢門閱讀 742評(píng)論 0 1

友情鏈接更多精彩內(nèi)容