1. 程式人生 > >壓力測試工具ab

壓力測試工具ab

常用工具:ab

Ab是Apache伺服器自帶的一個壓力測試工具。Apache的ab命令模擬多執行緒併發請求,測試伺服器負載壓力,也可以測試nginx、lighthttp、IIS等其它Web伺服器的壓力。 
ab命令對發出負載的計算機要求很低,既不會佔用很多CPU,也不會佔用太多的記憶體,但卻會給目標伺服器造成巨大的負載。

在頻寬不足的情況下,最好是本機進行測試,建議使用內網的另一臺或者多臺伺服器通過內網進行測試,這樣得出的資料,準確度會高很多。遠端對web伺服器進行壓力測試,往往效果不理想(因為網路延時過大或頻寬不足)

 1.安裝

進入http://httpd.apache.org/download.cgi

選擇Files For Microsoft Windows

 

點選ApacheHaus

 

2.配置

下載檔案,並解壓,這裡我們假設解壓到D盤。開啟Apache檔案裡的conf資料夾中的httpd.conf檔案,修改Define SRVROOT "D:/Program Files/Apache24",Listen(監聽埠)  Listen 8088,ServerName(服務地址的埠號)  ServerName localhost:8088,DocumentRoot (測試檔案存放地) DocumentRoot "D:/Program Files/Apache24/Test"。

       接著調出cmd,輸入:執行 httpd.exe -k install安裝服務,開啟服務httpd.exe -k start。報錯,提示“(OS 10048)通常每個套接字地址(協議/網路地址/埠)只允許使用一次 443”,將配置檔案中的Include conf/extra/httpd-ahssl.conf註釋掉,或修改這個檔案中的Listen 442 https。

3. 使用

       好了,可以開始使用ab來測試了在終端輸入 ab -n 1000 -c 100 URL

地址。彈出以下內容

 

通過上面的用法介紹可以得知,ab的使用方法就是輸入如下DOS命令:

ab [可選的引數選項] 需要進行壓力測試的url

此外,我們再根據上面的用法介紹介面來詳細瞭解每個引數選項的作用。

引數選項

詳細解釋

-n

即requests,用於指定壓力測試總共的執行次數。

-c

即concurrency,用於指定壓力測試的併發數。

-t

即timelimit,等待響應的最大時間(單位:秒)。

-b

即windowsize,TCP傳送/接收的緩衝大小(單位:位元組)。

-p

即postfile,傳送POST請求時需要上傳的檔案,此外還必須設定-T引數。

-u

即putfile,傳送PUT請求時需要上傳的檔案,此外還必須設定-T引數。

-T

即content-type,用於設定Content-Type請求頭資訊,例如:application/x-www-form-urlencoded,預設值為text/plain

-v

即verbosity,指定列印幫助資訊的冗餘級別。

-w

以HTML表格形式列印結果。

-i

使用HEAD請求代替GET請求。

-x

插入字串作為table標籤的屬性。

-y

插入字串作為tr標籤的屬性。

-z

插入字串作為td標籤的屬性。

-C

新增cookie資訊,例如:"Apache=1234"(可以重複該引數選項以新增多個)。

-H

新增任意的請求頭,例如:"Accept-Encoding: gzip",請求頭將會新增在現有的多個請求頭之後(可以重複該引數選項以新增多個)。

-A

新增一個基本的網路認證資訊,使用者名稱和密碼之間用英文冒號隔開。

-P

新增一個基本的代理認證資訊,使用者名稱和密碼之間用英文冒號隔開。

-X

指定使用的代理伺服器和埠號,例如:"126.10.10.3:88"。

-V

列印版本號並退出。

-k

使用HTTP的KeepAlive特性。

-d

不顯示百分比。

-S

不顯示預估和警告資訊。

-g

輸出結果資訊到gnuplot格式的檔案中。

-r

指定接收到錯誤資訊時不退出程式。

-e

輸出結果資訊到CSV格式的檔案中。

-h

顯示用法資訊,其實就是ab -help

雖然ab可以配置的引數選項比較多,但是,一般情況下我們只需要使用形如ab -n 數字 -c 數字 url路徑的命令即可。譬如,我們對位於本地Apache伺服器上、URL為http://localhost:6356/Pages/redis/Login.aspx

的頁面進行壓力測試。測試總次數為1000,併發數為100(相當於100個使用者同時訪問,他們總共訪問1000次)。我們輸入DOS命令ab -n 1000 -c 100 http://localhost:6356/Pages/redis/Login.aspx

 

4. 分析

下面我們對結果進行分析

D:\Program Files\Apache24\bin>ab -n 1000 -c 100 http://localhost:6356/Pages/redi

s/Login.aspx

This is ApacheBench, Version 2.3 <$Revision: 1826891 $>

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/

 

Benchmarking localhost (be patient)

Completed 100 requests

Completed 200 requests

Completed 300 requests

Completed 400 requests

Completed 500 requests

Completed 600 requests

Completed 700 requests

Completed 800 requests

Completed 900 requests

Completed 1000 requests

Finished 1000 requests

 

//平臺IIS 版本10.0

Server Software:        Microsoft-IIS/10.0

//伺服器主機名

Server Hostname:        localhost

//伺服器埠

Server Port:            6356

 

//測試的頁面文件

Document Path:          /Pages/redis/Login.aspx

//文件大小

Document Length:        1287 bytes

 

//併發數

Concurrency Level:      100

//整個測試持續的時間

Time taken for tests:   1.641 seconds

//完成的請求數量

Complete requests:      1000

//失敗的請求數量

Failed requests:        0

 

//整個場景中的網路傳輸量

Total transferred:        1699000 bytes

//整個場景中的HTML內容傳輸量

HTML transferred:       1287000 bytes

//大家最關心的指標之一,相當於 LR 中的 每秒事務數 ,後面括號中的 mean 表示這是一個平均值,即最大吞吐量(QPS)

Requests per second:    609.38 [#/sec] (mean)

//大家最關心的指標之二,相當於 LR 中的 平均事務響應時間 ,後面括號中的 mean 表示這是一個平均值,每個請求所需時間

Time per request:       164.100 [ms] (mean)

 

//每個請求實際執行時間的平均值

Time per request:       1.641 [ms] (mean, across all concurrent requests)

//平均每秒網路上的流量,可以幫助排除是否存在網路流量過大導致響應時間延長的問題

Transfer rate:            1011.08 [Kbytes/sec] received

 

//網路上消耗的時間的分解,各項資料的具體演算法還不是很清楚

Connection Times (ms)

              min  mean[+/-sd] median   max

Connect:        0    0   0.6      0       8

Processing:    47  156  44.4    138     340

Waiting:       14  156  44.6    137     340

Total:         47  157  44.4    138     340

 

//整個場景中所有請求的響應情況。在場景中每個請求都有一個響應時間,其中50%的使用者響應時間小於1093 毫秒,60% 的使用者響應時間小於1247 毫秒,最大的響應時間小於7785 毫秒

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

  50%    138

  66%    162

  75%    178

  80%    185

  90%    222

  95%    250

  98%    280

  99%    296

 100%    340 (longest request)

 

 

我們可以逐漸網上增加併發數,取Request per second的最大值作為Http server的效能指標,拿到了QPS後,就可以計算PV(Page View)即頁面訪問量。這是衡量一個網站的重要指標。

單臺伺服器每天PV計算:

公式1:每天總PV=QPS * 3600 * 6

公式2:每天總PV=QPS * 3600 * 8

 

峰值QPS和機器計算:
原理:每天80%的訪問集中在20%的時間裡,這20%時間叫做峰值時間
公式:( 總PV數 * 80% ) / ( 每天秒數 * 20% ) = 峰值時間每秒請求數(QPS)
機器:峰值時間每秒QPS / 單臺機器的QPS = 需要的機器

伺服器數量計算:伺服器數量 =ceil( 每天總PV / 單臺伺服器每天總PV )

 

問:每天100w PV 的在單臺機器上,這臺機器需要多少QPS?
答:( 1000000 * 0.8 ) / (86400 * 0.2 ) = 46 (QPS)

 

問:如果一臺機器的QPS是18,需要幾臺機器來支援?
答:46/ 18 = 3