Apache-AB壓力測試實例


一 AB背景介紹  

  Apache附帶的壓力測試工具apache bench--簡稱ab,非常容易使用,並且完全可以摸你各種條件對Web服務器發起測試請求。ab可以直接在Web服務器本地發起測試請求,這對於需要了解服務器的處理性能至關重要,因為它不包括數據的網絡傳輸時間以及用戶PC本地的計算時間

  ab is a tool for benchmarking your Apache Hypertext Transfer Protocol (HTTP) server. It is designed to give you an impression of how your current Apache installation performs. This especially shows you how many requests per second your Apache installation is capable of serving. - See more at: http://www.rickyzhu.com/129_quick-introduce-to-ab.html#sthash.SeO8xgfH.dpuf

支持的參數和參數的介紹如下:

ab [ -A auth-username:password ] [ -c concurrency ] [ -C cookie-name=value ] [ -d ] [ -e csv-file ] [ -g gnuplot-file ] [ -h ] [ -H custom-header ] [ -i ] [ -k ] [ -n requests ] [ -p POST-file ] [ -P proxy-auth-username:password ] [ -q ] [ -s ] [ -S ] [ -t timelimit ] [ -T content-type ] [ -v verbosity] [ -V ] [ -w ] [ -x <table>-attributes ] [ -X proxy[:port] ] [ -y <tr>-attributes ] [ -z <td>-attributes ] [http://]hostname[:port]/path

ab的參數詳細解釋

普通的測試,使用-c -n參數配合就可以完成任務
格式: ./ab [options] [http://]hostname[:port]/path
參數:
-n 測試的總請求數。默認時,僅執行一個請求
-c 一次並發請求個數。默認是一次一個。
-H 添加請求頭,例如 ‘Accept-Encoding: gzip’,以gzip方式請求。
-t 測試所進行的最大秒數。其內部隱含值是-n 50000。它可以使對服務器的測試限制在一個固定的總時間以內。默認時,沒有時間限制。
-p 包含了需要POST的數據的文件.
-T POST數據所使用的Content-type頭信息。
-v 設置顯示信息的詳細程度 – 4或更大值會顯示頭信息, 3或更大值可以顯示響應代碼(404, 200等), 2或更大值可以顯示警告和其他信息。 -V 顯示版本號並退出。
-w 以HTML表的格式輸出結果。默認時,它是白色背景的兩列寬度的一張表。
-i 執行HEAD請求,而不是GET。
-C -C cookie-name=value 對請求附加一個Cookie:行。 其典型形式是name=value的一個參數對。此參數可以重復。

本文介紹AB的獲取安裝及應用實例。

二 AB的獲取和安裝

1 系統安裝Apache,可以在/usr/bin路徑下找到ab,或者whereis ab即可發現。

2 單獨安裝ab  http://www.netingcn.com/install-ab-without-httpd.html 

ab運行需要依賴apr-util包,安裝命令為:yum install apr-util

下載apache的rpm包,可以直接去官網手動下載,當然也可以使用命令yumdownloader來完成,yumdownloader是 yum-utils包下面的,如果沒有安裝yum-utils,則需要先安裝它。因為解壓apache的rpm包時會在當前目錄下生成etc、var和 usr三個目錄,所以建議先創建一個臨時目錄,命令如下:

mkdir ~/abtmp
cd ~/abtmp
yumdownloader httpd
rpm2cpio httpd-*.rpm | cpio -idmv

上述命令成功后,可以在~/abtmp下的usr/bin中看到一個名為ab的文件,復制到系統PATH下就大功告成,例如。

cp ~/abtmp/usr/bin/ab /usr/bin

可使用系統:win7  Linux 等等

三 實例

1 web的http請求,e.g.  ab -n 100 -c 5  http://baidu.com/

#-n 請求的總執行次數; -c 並發數 "http://baidu.com/" 待測url
[work@bjdhj-118-56 ~]$ ab -n 100 -c 5 http://baidu.com/
#首先是Apache的版本信息
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright 2006 The Apache Software Foundation, http://www.apache.org/ Benchmarking baidu.com (be patient).....done Server Software: Apache Server Hostname: baidu.com #請求的服務 Server Port: 80      #請求端口 Document Path: /       # Document Length: 81 bytes   #頁面長度 Concurrency Level: 5       #並發數 Time taken for tests: 0.125373 seconds  #總耗時 Complete requests: 100          #總訪問次數 Failed requests: 0           #注1 Write errors: 0 Total transferred: 37600 bytes     #總共傳輸字節數,包含http的頭信息等 HTML transferred: 8100 bytes      #html字節數,實際的頁面傳遞字節數 Requests per second: 797.62 [#/sec] (mean)  #每秒多少請求,這個是非常重要的參數數值,服務器的吞吐量 Time per request: 6.269 [ms] (mean)     #用戶平均請求等待時間 Time per request: 1.254 [ms] (mean, across all concurrent requests)  #服務器平均處理時間,也就是服務器吞吐量的倒數 Transfer rate: 287.14 [Kbytes/sec] received    #每秒獲取的數據長度 Connection Times (ms) min mean[+/-sd] median max Connect: 1 1 0.4 1 3 Processing: 3 4 1.2 4 12 Waiting: 3 3 1.3 4 11 Total: 5 5 1.3 5 13 Percentage of the requests served within a certain time (ms) 50% 5          # 50%的請求在5ms內返回 66% 6 75% 6 80% 6 90% 6 95% 8 98% 11 99% 13 100% 13 (longest request)

四 測試過程中會出現以下這些錯誤

1)ab並發數不能大於請求數,會提示 :"ab: Cannot use concurrency level greater than total number of requests"

2)請求數默認不能超過1024個,會提示:"socket: Too many open files (24)"

可用ulimit -n命令修改,例如:ulimit -n 8192 (設置用戶可以同時打開的最大文件數)。

3)並發數默認不能大於20000個,會提示"ab: Invalid Concurrency [Range 0..20000]"

需要修改apache源代碼support目錄下ab.c文件,找到:#define MAX_CONCURRENCY 20000  將宏定義的值改大,重新編譯安裝apache。

4)提示:"apr_socket_recv: Connection reset by peer (104)"網上說是apr-util有些問題,不太穩定,多試幾次就好了。

5)問題:關於Failed Request,為什么會有失敗的請求?這個數據是什么含義?是否影響rps等測試結果。 

答:可檢查文件長度,如下,Length*complete+http頭信息≈Total,說明所有請求正確發出

Document Length:        35137 bytes

Complete requests:      100

Total transferred:      3543782 bytes

在出現Failed Request時,會給出一行要求失敗的各原因的數據統計,分別代表的意義:

 Connect      無法送出要求、目標主機連接失敗、要求的過程中連線被中斷

 Receive      無法接收要求

 Length       回應的內容長度不一致 ( 以 Content-Length 標頭值為判斷依據 )

 Exception   發生無法預期的錯誤

當第2次以后的HTTP Request所得到的HTTP Response Header得到的Content-Length與第一次不一致,就會得到Length的錯誤,並不影響測試結果。

6)問題:結果得到兩個response time,相差很大,這兩個數據自個什么意思?  

答:解釋如下。

ab有一個-c n參數,就是第一行的Concurrency Level,可以讓ab創建n個並發鏈接測試。它們關系是:Tpr1=Tpr2*n ,Tpr2=1/Rps

The first value is calculated with the formula concurrency *timetaken * 5/done while the second value is calculated with the formula timetaken * 5 

前一個衡量單個請求的延遲,cpu是分時間片輪流執行請求的,多並發的情況下,一個並發上的請求時需要等待這么長時間才能得到下一個時間片,計算方法Time per request: 60.444 [ms] (mean, across all concurrent requests)*並發數。通俗點說就是當以-c 10的並發下完成-n 1000個請求的同時,額外加入一個請求,完成這個求平均需要的時間。

后一個衡量性能的標准,它反映了完成一個請求需要的平均時間,在當前的並發情況下,增加一個請求需要的時間。計算方法Time taken for tests: 60.444 seconds/Complete requests: 1000,通俗點說就是當以-c 10的並發下完成-n 1001個請求時,比完成-n1000個請求多花的時間。

可以適當調節-c 和-n大小來測試服務器性能,借助htop指令來直觀的查看機器的負載情況。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM