ab 介紹
- apache ab(Apache Bench)性能測(cè)試工具,這是[apache]免費(fèi)自帶的性能測(cè)試工具,就在apache的bin目錄下,它能模擬多個(gè)并發(fā)請(qǐng)求,也就是說它主要是用來測(cè)試你的apache每秒能處理多少請(qǐng)求的。

Paste_Image.png
- 格式:ab [options] [http://]hostname[:port]/path
參數(shù)介紹
- -A auth-username:password
- 對(duì)服務(wù)器提供BASIC認(rèn)證信任。 用戶名和密碼由一個(gè):隔開,并以base64編碼形式發(fā)送。 無論服務(wù)器是否需要(即, 是否發(fā)送了401認(rèn)證需求代碼),此字符串都會(huì)被發(fā)送。
- -c concurrency
- 一次產(chǎn)生的請(qǐng)求個(gè)數(shù)。默認(rèn)是一次一個(gè)。
- -C cookie-name=value
- 對(duì)請(qǐng)求附加一個(gè)Cookie:行。 其典型形式是name=value的一個(gè)參數(shù)對(duì)。 此參數(shù)可以重復(fù)。
- -d
- 不顯示"percentage served within XX [ms] table"的消息(為以前的版本提供支持)。
- -e csv-file
- 產(chǎn)生一個(gè)以逗號(hào)分隔的(CSV)文件, 其中包含了處理每個(gè)相應(yīng)百分比的請(qǐng)求所需要(從1%到100%)的相應(yīng)百分比的(以微妙為單位)時(shí)間。 由于這種格式已經(jīng)“二進(jìn)制化”,所以比'gnuplot'格式更有用。
- -g gnuplot-file
- 把所有測(cè)試結(jié)果寫入一個(gè)'gnuplot'或者TSV (以Tab分隔的)文件。 此文件可以方便地導(dǎo)入到Gnuplot, IDL, Mathematica, Igor甚至Excel中。 其中的第一行為標(biāo)題。
- -h 顯示使用方法。
- -H custom-header 對(duì)請(qǐng)求附加額外的頭信息。
- 此參數(shù)的典型形式是一個(gè)有效的頭信息行,其中包含了以冒號(hào)分隔的字段和值的對(duì) (如, "Accept-Encoding: zip/zop;8bit").
- -i 執(zhí)行HEAD請(qǐng)求,而不是GET。
- -k 啟用HTTP KeepAlive功能
- 在一個(gè)HTTP會(huì)話中執(zhí)行多個(gè)請(qǐng)求。 默認(rèn)時(shí),不啟用KeepAlive功能. -n requests 在測(cè)試會(huì)話中所執(zhí)行的請(qǐng)求個(gè)數(shù)。 默認(rèn)時(shí),僅執(zhí)行一個(gè)請(qǐng)求,但通常其結(jié)果不具有代表意義。
- -p POST-file包含了需要POST的數(shù)據(jù)的文件.
- -P proxy-auth-username:password
- 對(duì)一個(gè)中轉(zhuǎn)代理提供BASIC認(rèn)證信任。 用戶名和密碼由一個(gè):隔開,并以base64編碼形式發(fā)送。 無論服務(wù)器是否需要(即, 是否發(fā)送了401認(rèn)證需求代碼),此字符串都會(huì)被發(fā)送。
- -q
- 如果處理的請(qǐng)求數(shù)大于150, ab每處理大約10%或者100個(gè)請(qǐng)求時(shí),會(huì)在stderr輸出一個(gè)進(jìn)度計(jì)數(shù)。 此-q標(biāo)記可以抑制這些信息。
- -s
- 用于編譯中(ab -h會(huì)顯示相關(guān)信息)使用了SSL的受保護(hù)的https, 而不是http協(xié)議的時(shí)候。此功能是實(shí)驗(yàn)性的,也是很簡(jiǎn)陋的。最好不要用。
- -S 不顯示中值和標(biāo)準(zhǔn)背離值
- 而且在均值和中值為標(biāo)準(zhǔn)背離值的1到2倍時(shí),也不顯示警告或出錯(cuò)信息。 默認(rèn)時(shí),會(huì)顯示 最小值/均值/最大值等數(shù)值。(為以前的版本提供支持).
- -t timelimit 測(cè)試所進(jìn)行的最大秒數(shù)。
- 其內(nèi)部隱含值是-n 50000。 它可以使對(duì)服務(wù)器的測(cè)試限制在一個(gè)固定的總時(shí)間以內(nèi)。默認(rèn)時(shí),沒有時(shí)間限制。
- -T content-type POST數(shù)據(jù)所使用的Content-type頭信息。
- -v verbosity 設(shè)置顯示信息的詳細(xì)程度
- 4或更大值會(huì)顯示頭信息, 3或更大值可以顯示響應(yīng)代碼(404, 200等), 2或更大值可以顯示警告和其他信息。
- -V 顯示版本號(hào)并退出。
- -w 以HTML表的格式輸出結(jié)果。默認(rèn)時(shí),它是白色背景的兩列寬度的一張表。
- -x <table>-attributes 設(shè)置<table>屬性的字符串。 此屬性被填入<table 這里 >.
- -X proxy[:port] 對(duì)請(qǐng)求使用代理服務(wù)器。
- -y <tr>-attributes 設(shè)置<tr>屬性的字符串.
- -z <td>-attributes 設(shè)置<td>屬性的字符串
- 這么多參數(shù),其實(shí)你大可不必?fù)?dān)心,最基本的關(guān)心兩個(gè)選項(xiàng) -c -n
實(shí)例
- ab -n 3000 -c 3000 http://www.test.com/
- c 100 即:每次并發(fā)3000 個(gè)
- n 10000 即: 共發(fā)送3000 個(gè)請(qǐng)求
- ab -t 60 -c 100 http://192.168.0.10/
- 在60秒內(nèi)發(fā)請(qǐng)求,一次100個(gè)請(qǐng)求。
帶參數(shù)的的請(qǐng)求
-
ab -t 60 -c 100 -T "application/x-www-form-urlencoded" p p.txt http://192.168.0.10/hello.html
- p.txt 是和ab.exe在一個(gè)目錄 p.txt 中可以寫參數(shù),如 p=wdp&fq=78 要注意編碼問題
-
參數(shù)中的三種形式
- application/x-www-form-urlencoded (默認(rèn)值)
- 就是設(shè)置表單傳輸?shù)木幋a,典型的post請(qǐng)求
- multipart/form-data.
- 用來指定傳輸數(shù)據(jù)的特殊類型的,主要就是我們上傳的非文本的內(nèi)容,比如圖片,mp3,文件等等
- text/plain . 是純文本傳輸?shù)囊馑?/li>
- application/x-www-form-urlencoded (默認(rèn)值)
結(jié)果分析

Paste_Image.png

Paste_Image.png
- 結(jié)果參數(shù)解釋:
This is ApacheBench, Version 2.3
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 192.168.80.157 (be patient)
Completed 400 requests
Completed 800 requests
Completed 1200 requests
Completed 1600 requests
Completed 2000 requests
Completed 2400 requests
Completed 2800 requests
Completed 3200 requests
Completed 3600 requests
Completed 4000 requests
Finished 4000 requests
Server Software: Apache/2.2.15
Server Hostname: 192.168.80.157
Server Port: 80
Document Path: /phpinfo.php
#測(cè)試的頁面
Document Length: 50797 bytes
#頁面大小
Concurrency Level: 1000
#測(cè)試的并發(fā)數(shù)
Time taken for tests: 11.846 seconds
#整個(gè)測(cè)試持續(xù)的時(shí)間
Complete requests: 4000
#完成的請(qǐng)求數(shù)量
Failed requests: 0
#失敗的請(qǐng)求數(shù)量
Write errors: 0
Total transferred: 204586997 bytes
#整個(gè)過程中的網(wǎng)絡(luò)傳輸量
HTML transferred: 203479961 bytes
#整個(gè)過程中的HTML內(nèi)容傳輸量
Requests per second: 337.67 [#/sec] (mean)
#最重要的指標(biāo)之一,相當(dāng)于LR中的每秒事務(wù)數(shù),后面括號(hào)中的mean表示這是一個(gè)平均值
Time per request: 2961.449 [ms] (mean)
#最重要的指標(biāo)之二,相當(dāng)于LR中的平均事務(wù)響應(yīng)時(shí)間,后面括號(hào)中的mean表示這是一個(gè)平均值
Time per request: 2.961 [ms] (mean, across all concurrent requests)
#每個(gè)連接請(qǐng)求實(shí)際運(yùn)行時(shí)間的平均值
Transfer rate: 16866.07 [Kbytes/sec] received
#平均每秒網(wǎng)絡(luò)上的流量,可以幫助排除是否存在網(wǎng)絡(luò)流量過大導(dǎo)致響應(yīng)時(shí)間延長的問題
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 483 1773.5 11 9052
Processing: 2 556 1459.1 255 11763
Waiting: 1 515 1459.8 220 11756
Total: 139 1039 2296.6 275 11843
#網(wǎng)絡(luò)上消耗的時(shí)間的分解,各項(xiàng)數(shù)據(jù)的具體算法還不是很清楚
Percentage of the requests served within a certain time (ms)
50% 275
66% 298
75% 328
80% 373
90% 3260
95% 9075
98% 9267
99% 11713
100% 11843 (longest request)
#整個(gè)場(chǎng)景中所有請(qǐng)求的響應(yīng)情況。在場(chǎng)景中每個(gè)請(qǐng)求都有一個(gè)響應(yīng)時(shí)間,其中50%的用戶響應(yīng)時(shí)間小于275毫秒,66%的用戶響應(yīng)時(shí)間小于298毫秒,最大的響應(yīng)時(shí)間小于11843毫秒。對(duì)于并發(fā)請(qǐng)求,cpu實(shí)際上并不是同時(shí)處理的,而是按照每個(gè)請(qǐng)求獲得的時(shí)間片逐個(gè)輪轉(zhuǎn)處理的,所以基本上第一個(gè)Time per request時(shí)間約等于第二個(gè)Time per request時(shí)間乘以并發(fā)請(qǐng)求數(shù)。
ab使用的一些問題
- ab命令在一般系統(tǒng)上面做測(cè)試時(shí)候,一般并發(fā)不能超過1024個(gè),其實(shí)是因?yàn)橐驗(yàn)橄到y(tǒng)限制每個(gè)進(jìn)程打開的最大文件數(shù)為1024,可以用ulimit -a來查看
- -n 可以指定最大請(qǐng)求數(shù),但是不能超過50000個(gè)
- -v n 當(dāng)n>=2 時(shí),可以顯示發(fā)送的http請(qǐng)求頭,和響應(yīng)的http頭及內(nèi)容,壓力測(cè)試時(shí)不要這么做
- 在做壓力測(cè)試的時(shí)候,一般情況下壓力測(cè)試客戶端接收到的數(shù)據(jù)量一定會(huì)遠(yuǎn)大于發(fā)送出去的數(shù)據(jù)量
- 針對(duì)一般并發(fā)不能超過1024個(gè)問題解決方案