ab(Apache Bench)命令詳解以及壓力測試模擬
阿新 • • 發佈:2018-12-04
簡介
ApacheBench 是 Apache伺服器自帶的一個web壓力測試工具,簡稱ab。ab又是一個命令列工具,對發起負載的本機要求很低,根據ab命令可以建立很多的併發訪問執行緒,模擬多個訪問者同時對某一URL地址進行訪問,因此可以用來測試目標伺服器的負載壓力。總的來說ab工具小巧簡單,上手學習較快,可以提供需要的基本效能指標,但是沒有圖形化結果,不能監控。
語法及引數
Usage: ab [options] [http[s]://]hostname[:port]/path 用法:ab [選項] 地址 選項: Options are: -n requests #執行的請求數,即一共發起多少請求。 -c concurrency #請求併發數。 -t timelimit #測試所進行的最大秒數。其內部隱含值是-n 50000,它可以使對伺服器的測試限制在一個固定的總時間以內。預設時,沒有時間限制。 -s timeout #指定每個請求的超時時間,預設是30秒。 -b windowsize #指定tcp視窗的大小,單位是位元組。 -B address #指定在發起連線時繫結的ip地址是什麼。 -p postfile #指定要POST的檔案,同時要設定-T引數。 -u putfile #指定要PUT的檔案,同時要設定-T引數。 -T content-type #指定使用POST或PUT上傳文字時的文字型別,預設是'text/plain'。 -v verbosity #設定詳細模式等級。 -w #將結果輸出到html的表中。 -i #使用HEAD方式代替GET發起請求。 -y attributes #以表格方式輸出時,設定html表格tr屬性。 -z attributes #以表格方式輸出時,設定html表格th或td屬性。 -C attribute #新增cookie,比如'Apache=1234'。(可重複) -H attribute #為請求追加一個額外的頭部,比如'Accept-Encoding: gzip'。(可重複) -A attribute #對伺服器提供BASIC認證信任。使用者名稱和密碼由一個:隔開,並以base64編碼形式傳送。無論伺服器是否需要(即,是否傳送了401認證需求程式碼),此字串都會被髮送。 -P attribute #對一箇中轉代理提供BASIC認證信任。使用者名稱和密碼由一個:隔開,並以base64編碼形式傳送。無論伺服器是否需要(即, 是否傳送了401認證需求程式碼),此字串都會被髮送。 -X proxy:port #指定代理伺服器的IP和埠。 -V #列印版本資訊。 -k #啟用HTTP KeepAlive功能,即在一個HTTP會話中執行多個請求。預設時,不啟用KeepAlive功能。 -d #不顯示"percentage served within XX [ms] table"的訊息(為以前的版本提供支援)。 -q #如果處理的請求數大於150,ab每處理大約10%或者100個請求時,會在stderr輸出一個進度計數。此-q標記可以抑制這些資訊。 -g filename #把所有測試結果寫入一個'gnuplot'或者TSV(以Tab分隔的)檔案。此檔案可以方便地匯入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行為標題。 -e filename #產生一個以逗號分隔的(CSV)檔案,其中包含了處理每個相應百分比的請求所需要(從1%到100%)的相應百分比的(以微妙為單位)時間。由於這種格式已經“二進位制化”,所以比'gnuplot'格式更有用。 -r #當收到錯誤時不要退出。 -h #輸出幫助資訊 -Z ciphersuite 指定SSL/TLS密碼套件 -f protocol 指定SSL/TLS協議(SSL3, TLS1, TLS1.1, TLS1.2 or ALL)
示例以及結果分析
發起併發為10,總量為100的請求www.baidu.com,如下:
[[email protected] ~]# ab -n 100 -c 10 http://www.baidu.com/ This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking www.baidu.com (be patient).....done Server Software: BWS/1.1 Server Hostname: www.baidu.com Server Port: 80 Document Path: / #測試頁面 Document Length: 112439 bytes #測試頁面大小 Concurrency Level: 10 #併發數 Time taken for tests: 1.256 seconds #整個測試話費的時間 Complete requests: 100 #完成請求的總量 Failed requests: 96 #失敗的請求次數 (Connect: 0, Receive: 0, Length: 96, Exceptions: 0) Write errors: 0 Total transferred: 11348660 bytes #傳輸資料總大小 HTML transferred: 11253726 bytes #傳輸頁面總大小 Requests per second: 79.62 [#/sec] (mean) #平均每秒請求數 Time per request: 125.593 [ms] (mean) #平均每次併發10個請求的處理時間 Time per request: 12.559 [ms] (mean, across all concurrent requests) #平均每個請求處理時間,所有併發的請求加一起 Transfer rate: 8824.29 [Kbytes/sec] received #平均每秒網路流量 Connection Times (ms) min mean[+/-sd] median max Connect: 4 20 7.7 18 38 Processing: 18 90 50.5 82 356 Waiting: 4 22 7.9 22 41 Total: 22 111 50.7 101 384 #花費在連線Connect,處理Processing,等待Waiting的時間的最小min,平均值mean,標準差[+/-sd],中值median,最大表max的一個表。 Percentage of the requests served within a certain time (ms) 50% 101 #50%請求的響應時間在101ms內 66% 103 #66%請求的響應時間在103ms內 75% 104 #...以此類推 80% 105 90% 111 95% 267 98% 311 99% 384 100% 384 (longest request)
可以看到用www.baidu.com測試,錯誤率很高。這應該和www.baidu.com有關係。正常情況下,不會錯誤率這麼高。
不過了解了具體怎麼分析即可。
補充個測試www.sina.com的資料,總數100併發為20.失敗為0.如下
還有就是ab屬於一個輕量級的壓測工具,結果不會特別準確,可以用作參考。
追求準確的話,推薦使用jmeter或者LoadRunner。