1. 程式人生 > >壓測工具http_load與Ab

壓測工具http_load與Ab

http_load

簡介

http_load以並行複用的方式執行,用以測試Web伺服器的吞吐量與負載。但是它不同於大多數壓力測試工具,其可以以一個單一的程序執行,這樣就不會把客戶機搞死,還可以測試HTTPS類的網站請求。關於http_load的詳細資訊參見這裡,點選這裡下載。

安裝

# tar xzvf http_load-09Mar2016.tar.gz
# cd http_load-09Mar2016
# make && make install
  • 1
  • 2
  • 3

測試

http_load的命令引數比較簡單,直接在命令列下執行http_load就能看到,具體如下:

-parallel簡寫-p:併發的使用者程序數。 
-fetches簡寫-f:總計的訪問次數 
-rate簡寫-r:每秒的訪問頻率 
-seconds簡寫-s:總計的訪問時間

http_load的命令格式也比較簡單,各引數可以自由組合,常用格式如下:

$ http_load -p 併發訪問程序數 -f 訪問總數 需要訪問的URL檔案
$ http_load -r 每秒訪問頻率 -s 訪問時間 需要訪問的URL檔案
  • 1
  • 2

通常:引數pf一起使用,引數rs一起使用。

這裡以某網頁測試為例說明之:

$ vi test.url
http://www.xxxxx.com
  • 1
  • 2

當然上面存放請求URL的檔案中,可以存放多個URL,每行一個。

$ http_load -p 5 -s 300 test.url
11694 fetches, 5 max parallel, 5.6872e+08 bytes, in
300 seconds 48633.5 mean bytes/connection 38.98 fetches/sec, 1.89573e+06 bytes/sec msecs/connect: 10.476 mean, 9008.81 max, 5.002 min msecs/first-response: 36.5928 mean, 5383.94 max, 16.614 min 7 timeouts 10428 bad byte counts HTTP response codes: code 200 -- 7552
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

上面命令表示:5個併發程序,持續300秒請求某網頁。

#http_load -r 5 -s 300 test.url
1499 fetches, 5 max parallel, 9.49031e+07 bytes, in 300.017 seconds 63310.9 mean bytes/connection 4.99638 fetches/sec, 316326 bytes/sec msecs/connect: 21.5961 mean, 3020.17 max, 16.782 min msecs/first-response: 36.6554 mean, 61.907 max, 17.919 min 1261 bad byte counts HTTP response codes: code 200 -- 1261
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

上面命令表示:每秒頻率為5條請求,持續300秒請求某網頁。 
結果分析如下: 
(1)1499 fetches, 5 max parallel, 9.49031e+07 bytes, in 300.017 seconds 
說明在上面的測試中運行了1499個請求,最大的併發程序數是5,總計傳輸的資料是9.49031e+07 bytes,執行的時間是300.017秒 
(2)63310.9 mean bytes/connection 
說明每個連線平均傳輸的資料量63310.9/1499=42.24 
(3)4.99638 fetches/sec, 316326 bytes/sec 
說明每秒的響應請求為4.99638,每秒傳遞的資料為316326 bytes/sec 
(4)msecs/connect: 21.5961 mean, 3020.17 max, 16.782 min 
說明每個連線的平均響應時間是21.5961 msecs,最大的響應時間3020.17 msecs,最小的響應時間16.782 msecs 
(5)HTTP response codes: code 200 — 1261 
說明開啟響應頁面的型別,如果403的型別過多,那可能要注意是否系統遇到了瓶頸 
特殊說明:測試結果中主要的指標是fetches/sec和msecs/connect,即伺服器每秒能夠響應的請求次數和每個連線的平均響應時間。當然僅有這兩個指標並不能完成對效能的分析,這兩個指標主要反映的是QPS和RT。此外,還需要對伺服器的CPU(idle和load)、Mem進行分析,才能得出結論。 
需要注意的是:http_load請求方式預設為GET方式,不支援POST方式。

apache ab

簡介

ab即ApacheBench,是apache自帶的一款功能強大的測試工具,安裝了apache一般就自帶了,即httpd(在bin目錄下)。 
ab可以同時模擬多個併發請求,專門用於HTTP Server的benchmark testing。 
ab命令格式如下: 
ab [options] [http[s]://]hostname[:port]/path 
ab的引數比較多,直接在命令列下執行ab就能看到,常用引數如下: 
-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每次只能測試一個URL,適合做重複壓力測試,支援POST方式。

測試

(1)如果要測試POST請求,可以使用如下命令:

$ ab -n 1000000 -c 100 -p data.txt -T 'application/x-protobuf'  'http://www.xxxxx.com/'
  • 1

上面命令表示模擬100個併發使用者,傳送1000000個POST請求到http://www.xxxxx.com/,POST資料從檔案data.txt讀取,Content-type為application/x-protobuf。

$ ab -t 300 -c 100 -p data.txt -T 'application/x-protobuf' 'http://www.xxxxx.com/'
  • 1

上面命令表示模擬100個併發使用者,持續300秒傳送POST請求到http://www.xxxxx.com/,POST資料從檔案data.txt讀取,Content-type為application/x-protobuf。

需要注意的是:如果在傳送請求完後,出現如下錯誤:

apr_poll: The timeout specified has expired (70007)
  • 1

使用-k引數指定傳送keep-alive指令到伺服器端,可以解決上面問題:

#ab -t 300 -c 100 -k -p data.txt -T 'application/x-protobuf' 'http://www.xxxxx.com/'
  • 1

(2)如果要測試GET請求,可以使用如下命令(這裡以搜狗首頁測試為例說明之):

$ ab -t 300 -c 5 -k http://www.sogou.com
  • 1

執行上面命令會出現如下錯誤:

ab: invalid URL
Usage: ab [options] [http[s]://]hostname[:port]/path
  • 1
  • 2

上面錯誤的意思是URL後面要加/path,從提示也能看出來,可以改成如下即可:

$ ab -t 300 -c 5 -k http://www.sogou.com/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.sogou.com (be patient)
Completed 5000 requests
Finished 5211 requests

Server Software:        nginx                   #被測試服務名稱
Server Hostname:        www.sogou.com           #請求地址
Server Port:            80                      #請求埠號

Document Path:          /                       #請求頁面
Document Length:        15785 bytes             #頁面長度

Concurrency Level:      5                       #併發數
Time taken for tests:   300.011 seconds         #整個測試持續的時間  
Complete requests:      5211                    #完成的請求數
Failed requests:        0                       #失敗的請求數
Write errors:           0                                        
Keep-Alive requests:    0
Total transferred:      86136965 bytes          #總共傳輸位元組數,包含http的頭資訊等
HTML transferred:       82258493 bytes          #html位元組數,實際的頁面傳遞位元組數
Requests per second:    17.37 [#/sec] (mean)    #每秒請求數(這是一個非常重要的指標,即伺服器的吞吐量)
Time per request:       287.863 [ms] (mean)     #使用者平均請求等待時間(這也是一個非常重要的指標,即請求延遲)
Time per request:       57.573 [ms] (mean, across all concurrent requests)    #伺服器平均處理時間,即伺服器吞吐量的倒數
Transfer rate:          280.38 [Kbytes/sec] received    #每秒網路上的流量(可以幫助排除是否存在網路流量過大導致響應時間延長的問題)

Connection Times (ms)
                  min     mean[+/-sd]  median     max
Connect:           28       42 215.8     34      9034
Processing:        86      233 2009.8   108     93465
Waiting:           29       71 547.5     37     21034
Total:            114      275 2031.9   143     93493

Percentage of the requests served within a certain time (ms)
  50%    143        #50%的請求在143ms內返回
  66%    148        #60%的請求在148ms內返回
  75%    154
  80%    160
  90%    179
  95%    195
  98%    469
  99%   3158
 100%  93493 (longest request)    #最大響應時間小於93493ms
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

特殊說明:測試結果中主要的指標是Requests per second和Time per request(第一個),即每秒請求數和使用者平均請求等待時間,這兩個指標主要反映的是QPS和RT。