ab壓力測試

2021-09-20 22:51:45 字數 4039 閱讀 8537

apache

附帶的ab,它非常容易使用,ab可以直接在web伺服器本地發起測試請求。這至關重要,因為我們希望測試的伺服器的處理時間,而不包含資料的網路傳輸時間以及使用者pc本地的計算時間。

需要清楚的是,ab進行一切測試的本質都是基於http,所以可以說它是對於web伺服器軟體的黑盒效能測試,它獲得的一切資料和計算結果,都可以通過http來解釋。

另有一些壓力測試軟體,包括loadrnner、jmeter等,則是不同程度上包含了伺服器處理之外的時間,比如loadrunner執行在使用者pc上,可以錄製瀏覽器行為,這種測試的結果玩玩側重於站點使用者的角度,有另外一些層面的參考意義。

接下來,將使用ab來進行一次壓力測試,在本書中我們使用apache

2.3中附帶的ab,其版本資訊如下所示:

請看下面的命令列資訊:

serversoftware:apache/2.2.19serverhostname:        localhostserverport:80documentpath:/index.htmldocumentlength:45 bytes 

concurrencylevel:10time taken for tests:0.454 secondscomplete requests:1000failed requests:0write errors:0total transferred:322644 bytes

html transferred:45090 bytesrequests per second:2204.64[#/sec] (mean)time per request:4.536[ms](mean)time per request:0.454[ms](mean, across all concurrent requests)transfer rate:694.64[kbytes/sec] received 

connectiontimes(ms)

min  mean[+/-sd] median   maxconnect:010.515processing:135.6262waiting:035.6262total:145.6363percentage of the requests served within a certain time (ms)50%366%475%480%490%695%1298%2699%33100%63(longest request)

server hostname

表示請求的url中的主機部分名稱,它來自於http請求資料的頭資訊,這裡我們請求的url是http://localhost/index.html,所以主機名為localhost,說明我們的請求是從web伺服器端發起的。

server port

表示被測試的web伺服器軟體的監聽埠,為了方便測試,我們後面會對多個不同的web伺服器軟體使用不同的監聽埠。

document path

表示請求的url中根絕對路徑,它同樣來自於http請求資料的頭資訊,通過它的字尾名,我們一般可以理解該請求的型別。

document length

表示http響應資料的正文長度。

concurrency level

表示併發使用者數,這是我們設定的引數。

time taken for tests

表示所有這些請求被處理完成花費的總時間。順便提一下,某些apache版本如2.2.4附帶的ab,對於這一統計項存在一些計算上的bug,當總請求數較少時,其統計的總時間會無法小於0.1s。

complete requests

表示總請求數,這是我們設定的相應引數。

failed requests

表示失敗的請求數,這裡的失敗是指請求的連線伺服器、傳送資料、接收資料等環節發生異常,以及無響應後超時的情況。對於超時時間的設定可以用ab的-t引數。

而如果接受到的http響應資料的頭資訊中含有2xx以外的狀態碼,則會在測試結果顯示另乙個名為「non-2xx responses」的統計項,用於統計這部分請求數,這些請求並不算是失敗的請求。

total transferred

表示所有請求的響應資料長度總和,包括每個http響應資料的頭資訊和正文資料的長度。注意這裡不包括http請求資料的長度,所以total

transferred代表了從web伺服器流向使用者pc的應用層資料總長度。通過使用ab的-v引數即可檢視詳細的http頭資訊。

html transferred

表示所有請求的響應資料中正文資料的總和,也就是減去了total transferred中http響應資料中頭資訊的長度。

requests per second

這便是我們重點關注的吞吐率,它等於:

complete requests / time taken for tests

time per request

這便是前面提到的使用者平均請求等待時間,它等於:

time taken for tests / (complete requests /concurrency level)

time per request?(across all concurrent requests)

這便是前面提到的伺服器平均請求處理時間,它等於:

time taken for tests / complete requests

這正是吞吐率的倒數。同時,它也等於:

time per request / concurrency level

transfer rate

表示這些請求在單位時間內從伺服器獲取的資料長度,它等於:

total transferred / time taken for tests

這個統計項可以很好的說明伺服器在處理能力達到限制時,其出口頻寬的需求量。

利用前面介紹的有關頻寬的知識,不難計算出結果。

percentage of the requests served within a certain time(ms)

這部分資料用於描述每個請求處理時間的分布情況,比如在以上測試結果中,80%請求的處理時間都不超過1ms,而99%的請求都不超過2ms。注意這裡的處理時間,是指前面的time per request,即對於單個使用者而言,平均每個請求處理的時間。

繼續壓力測試

下面,我們再來進行一次壓力測試,此時併發使用者數為100,其他條件不變,測試結果如下所示:

serversoftware:apache/2.2.19serverhostname:        localhostserverport:80documentpath:/index.htmldocumentlength:45 bytes 

concurrencylevel:100time taken for tests:0.369 secondscomplete requests:1000failed requests:0write errors:0total transferred:283648 bytes

html transferred:46080 bytesrequests per second:2711.45[#/sec] (mean)time per request:36.881[ms](mean)time per request:0.369[ms](mean, across all concurrent requests)transfer rate:751.07[kbytes/sec] received 

connectiontimes(ms)

min  mean[+/-sd] median   maxconnect:0123.41219processing:112318.917122waiting:61918.313114total:203517.130128percentage of the requests served within a certain time (ms)50%3066%3275%3480%3590%5395%7598%9999%114100%128(longest request)

和前一次的測試結果相比,可以看出,當併發使用者資料從原來的10變為100後,吞吐率從原來的2204.64增長到了2711.45,伺服器平均請求處理

時間從原來的0.454ms降到了0.369ms,而使用者評價請求等待時間從原來的4.536ms增加到了36.881ms.

可見,隨著併發使用者數的變化,吞吐率、使用者平均請求等待時間、伺服器配件請求處理時間都發生了相應的變化。

ab 壓力測試

apache自帶的ab的壓力測試 以前安裝好apache總是不知道該如何測試apache的效能,現在總算找到乙個測試工具了。就是apache自帶的測試工具ab apache benchmark 在apache的bin目錄下。格式 ab options http hostname port path ...

ab壓力測試

1.我的環境是windows下的phpstudy,進入到apache bin目錄裡面有個ab.exe,壓力測試命令如下 ab.exe c 200 n 1000 2.mysql.php 如下 正常的邏輯思維,壓力增大後,導致資料庫num欄位成為負數,將下面 貼上到自己 下測試即可。在test資料庫下,...

ab壓力測試

ab命令會建立多個併發訪問執行緒,模擬多個訪問者同時對某一url位址進行訪問。它的測試目標是基於url的,因此,它既可以用來測試apache的負載壓力,也可以測試nginx lighthttp tomcat iis等其它web伺服器的壓力。ab命令對發出負載的計算機要求很低,它既不會占用很高cpu,...