1. 程式人生 > >ab命令壓力測試

ab命令壓力測試

網站效能壓力測試是伺服器網站效能調優過程中必不可缺少的一環。只有讓伺服器處在高壓情況下,才能真正體現出軟體、硬體等各種設定不當所暴露出的問題。

效能測試工具目前最常見的有以下幾種:ab、http_load、webbench、siege。今天我們專門來介紹ab。

ab是apache自帶的壓力測試工具。ab非常實用,它不僅可以對apache伺服器進行網站訪問壓力測試,也可以對或其它型別的伺服器進行壓力測試。比如nginx、tomcat、IIS等。
官方引數文件

一、ab的原理

ab是apachebench命令的縮寫。

ab的原理:ab命令會建立多個併發訪問執行緒,模擬多個訪問者同時對某一URL地址進行訪問。它的測試目標是基於URL的,因此,它既可以用來測試apache的負載壓力,也可以測試nginx、lighthttp、tomcat、IIS等其它Web伺服器的壓力。

ab命令對發出負載的計算機要求很低,它既不會佔用很高CPU,也不會佔用很多記憶體。但卻會給目標伺服器造成巨大的負載,其原理類似CC攻擊。自己測試使用也需要注意,否則一次上太多的負載。可能造成目標伺服器資源耗完,嚴重時甚至導致宕機。

二、ab的安裝

ab的安裝非常簡單,如果是原始碼安裝apache的話,那就更簡單了。apache安裝完畢後ab命令存放在apache安裝目錄的bin目錄下。如下:

/usr/local/apache2/bin

如果apache 是通過yum的RPM包方式安裝的話,ab命令預設存放在/usr/bin目錄下。如下:

which ab

注意:如果不想安裝apache但是又想使用ab命令的話,我們可以直接安裝apache的工具包httpd-tools。如下:

yum -y install httpd-tools

檢視ab是否安裝成功,可以切換到上述目錄下,使用ab –V命令進行檢測。如下:

ab -V

如果ab安裝成功,通過ab –V命令則會顯示ab的相迎版本,如上圖示。

注意以上是在linux平臺下進行安裝的,如果是windows平臺下,我們也可以下載對應的apache版本進行安裝。

目前apache最新版2.4.10,apache官網已經沒有windows下載的版本。

三、ab引數說明

有關ab命令的使用,我們可以通過幫助命令進行檢視。如下:

ab --help

下面我們對這些引數,進行相關說明。如下:

-n  在測試會話中所執行的請求個數。預設時,僅執行一個請求。
-c 一次產生的請求個數。預設是一次一個。 -t 測試所進行的最大秒數。其內部隱含值是-n 50000,它可以使對伺服器的測試限制在一個固定的總時間以內。預設時,沒有時間限制。 -p 包含了需要POST的資料的檔案。 -P 對一箇中轉代理提供BASIC認證信任。使用者名稱和密碼由一個:隔開,並以base64編碼形式傳送。無論伺服器是否需要(即, 是否傳送了401認證需求程式碼),此字串都會被髮送。 -T POST資料所使用的Content-type頭資訊。 -v 設定顯示資訊的詳細程度-4或更大值會顯示頭資訊,3或更大值可以顯示響應程式碼(404,200等),2或更大值可以顯示警告和其他資訊。 -V 顯示版本號並退出。 -w 以HTML表的格式輸出結果。預設時,它是白色背景的兩列寬度的一張表。 -i 執行HEAD請求,而不是GET -x 設定<table>屬性的字串。 -X 對請求使用代理伺服器。 -y 設定<tr>屬性的字串。 -z 設定<td>屬性的字串。 -C 對請求附加一個Cookie:行。其典型形式是name=value的一個引數對,此引數可以重複。 -H 對請求附加額外的頭資訊。此引數的典型形式是一個有效的頭資訊行,其中包含了以冒號分隔的欄位和值的對(如,"Accept-Encoding:zip/zop;8bit")。 -A 對伺服器提供BASIC認證信任。使用者名稱和密碼由一個:隔開,並以base64編碼形式傳送。無論伺服器是否需要(即,是否傳送了401認證需求程式碼),此字串都會被髮送。 -h 顯示使用方法。 -d 不顯示"percentage served within XX [ms] table"的訊息(為以前的版本提供支援)。 -e 產生一個以逗號分隔的(CSV)檔案,其中包含了處理每個相應百分比的請求所需要(從1%到100%)的相應百分比的(以微妙為單位)時間。由於這種格式已經“二進位制化”,所以比'gnuplot'格式更有用。 -g 把所有測試結果寫入一個'gnuplot'或者TSV(以Tab分隔的)檔案。此檔案可以方便地匯入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行為標題。 -i 執行HEAD請求,而不是GET -k 啟用HTTP KeepAlive功能,即在一個HTTP會話中執行多個請求。預設時,不啟用KeepAlive功能。 -q 如果處理的請求數大於150,ab每處理大約10%或者100個請求時,會在stderr輸出一個進度計數。此-q標記可以抑制這些資訊。

四、ab效能指標

在進行效能測試過程中有幾個指標比較重要:

1、吞吐率(Requests per second)

伺服器併發處理能力的量化描述,單位是reqs/s,指的是在某個併發使用者數下單位時間內處理的請求數。某個併發使用者數下單位時間內能處理的最大請求數,稱之為最大吞吐率。

記住:吞吐率是基於併發使用者數的。這句話代表了兩個含義:

  • a、吞吐率和併發使用者數相關

  • b、不同的併發使用者數下,吞吐率一般是不同的

計算公式:總請求數/處理完成這些請求數所花費的時間,即

Request per second=Complete requests/Time taken for tests

必須要說明的是,這個數值表示當前機器的整體效能,值越大越好。

2、併發連線數(The number of concurrent connections)

併發連線數指的是某個時刻伺服器所接受的請求數目,簡單的講,就是一個會話。

3、併發使用者數(Concurrency Level)

要注意區分這個概念和併發連線數之間的區別,一個使用者可能同時會產生多個會話,也即連線數。在HTTP/1.1下,IE7支援兩個併發連線,IE8支援6個併發連線,FireFox3支援4個併發連線,所以相應的,我們的併發使用者數就得除以這個基數。

4、使用者平均請求等待時間(Time per request)

計算公式:處理完成所有請求數所花費的時間/(總請求數/併發使用者數),即:

Time per request=Time taken for tests/(Complete requests/Concurrency Level)

5、伺服器平均請求等待時間(Time per request:across all concurrent requests)

計算公式:處理完成所有請求數所花費的時間/總請求數,即:

Time taken for/testsComplete requests

可以看到,它是吞吐率的倒數。

同時,它也等於使用者平均請求等待時間/併發使用者數,即

Time per request/Concurrency Level

五、ab實際使用

[[email protected] ~]#ab -c 10 -n 100 http://a.ilanni.com/index.php
    -c    10表示併發使用者數為10
    -n    100表示請求總數為100
    http://a.ilanni.com/index.php表示請求的目標URL
    這行表示同時處理100個請求並執行10次index.php檔案。

[[email protected] ~]#ab -c 10 -n 100 http://a.ilanni.com/index.php
Benchmarking 47.93.96.25 (be patient).....done

Server Software:        Apache/2.4.29  ##apache版本 
Server Hostname:        ip地址   ##請求的機子 
Server Port:            80  ##請求埠

Document Path:          index.php
Document Length:        18483 bytes  ##頁面長度

Concurrency Level:      10  ##併發數
Time taken for tests:   25.343 seconds  ##共使用了多少時間
Complete requests:      100  ##請求數
Failed requests:        11  ##失敗請求
   (Connect: 0, Receive: 0, Length: 11, Exceptions: 0)
Total transferred:      1873511 bytes  ##總共傳輸位元組數,包含http的頭資訊等
HTML transferred:       1848311 bytes  ##html位元組數,實際的頁面傳遞位元組數
Requests per second:    3.95 [#/sec] (mean)  ##每秒多少請求,這個是非常重要的引數數值,伺服器的吞吐量
Time per request:       2534.265 [ms] (mean)  ##使用者平均請求等待時間
Time per request:       253.426 [ms] (mean, across all concurrent requests)  ##伺服器平均處理時間,
Transfer rate:          72.19 [Kbytes/sec] received  ##每秒獲取的資料長度

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    8   3.9     10      13
Processing:  1222 2453 322.6   2520    3436
Waiting:     1175 2385 320.4   2452    3372
Total:       1222 2461 322.5   2528    3444

Percentage of the requests served within a certain time (ms)
  50%   2528  ## 50%的請求在25ms內返回 
  66%   2534  ## 60%的請求在26ms內返回 
  75%   2538
  80%   2539
  90%   2545
  95%   2556
  98%   3395
  99%   3444
 100%   3444 (longest request)

apache的ab工具也算是一種ddos攻擊工具
nginx吞吐率就是要比apache高。
根據前面我們提到的效能指標Requests per second吞吐率越高,伺服器效能越好。