基準測試工具ab
HTTP請求生命週期 依次要經過使用者的主路由器(如果有的話),ISP閘道器和域名伺服器(DNS),並在DNS中會查詢與請求的域名相關聯的IP,然後到達指定IP的web伺服器,最終請求web應用程式生成響應內容 web伺服器將資料打包成多個數據包,並以相反的順序沿著使用者請求的相同路徑將資料包返回給使用者,瀏覽器呈現結果到網頁
ab(Apache Benchmark)
Apache的一個工具
#安裝ab
yum install apr-util
yum install yum-utils
cd /usr/local/src/
mkdir ab
cd ab/
yum install yum-utils.noarch
yumdownloader httpd-tools*
rpm2cpio httpd-tools*.rpm | cpio -idmv
cp ./usr/bin/ab /usr/bin/
ab -help
命令 ab [ options(可選引數) ] [ full path to web document(測試路徑) ] options 有 -n : 要執行的請求數 eg:
-A < username >:< pwd > :用於提供伺服器身份驗證資訊,使用者和密碼用”:”分割.傳送的字串用base64編碼 eg: user和pwd通過$
_SERVER[‘PHP_AUTH_USER’]和$_SERVER[‘PHP_AUTH_PW’]獲得-c 數量 : 一次模擬的請求數,數量不能大於”-n”.
-C cookie的key=cookie的value :傳cookie資訊 ab -C “cookie1_name=cookie1_value;cookie2_name=cookie2_value” https://xxx/test/index
-d : 隱藏”Percentage of the requests served within a certain time (ms)”
-e 檔案
: 該檔案包含執行的基準測試結果儲存到.csv檔案.建議用”gnuplog”檔案就是-g-g 檔案: 儲存測試結果到該檔案中
-H custom-header : 採用欄位值對形式傳送有效標頭和請求
-i : 執行HEAD請求
-k : 啟用keep-alive功能,預設是禁用
-p 包含post資料的檔案路徑 : 傳送$_POST請求
-P username:pwd :採用base64編碼的字串.字串包含基本身份驗證,以及由”:”分隔的使用者名稱和密碼
-q : 執行多餘100個請求時隱藏進度輸出
-t 時間(秒) : 測試時間最大值,預設是無時間限制
-v verbosity-level : verbosity-level:2及以上列印警告和資訊;3:列印HTTP響應程式碼;4及以上列印頭部資訊
最常用的兩個 -n -c
//下面的意思是總共發4個請求,併發數是2
ab -n 4 -c 2 https://test.easypaynet.cn/test/index
-p 傳送POST請求
ab -p post.text -T application/x-www-form-urlencoded https://test.easypaynet.cn/test/index
//其中post.text的內容是data=1&data2=test,程式碼中對應$_POST['data']和$_POST['data2']
-H
ab -H "Cookie: cookie1_name=cookie1_value; cookie2_name=cookie2_value" https://xxxxx/test/index
//在$_COOKIE中就能看到這些值
//自定義瀏覽器標頭資訊
ab -n 100 -c 5 -H "Mozilla/5.9 (Windows; U; Windows NT 5.1; en-US) AppleWeb/Kit/534.2 (KHTML, like Gecko) Chrome/6.0.447.0 Safari/534.2" http://xxxx/test/index
-g 測試結果儲存到tsv檔案
ab -n 1 -g ./ab.tsv https://xxxxx/test/index
-e 測試結果儲存到csv檔案中
ab -n 1 -e ./ab.csv https://xxxxx/test/index
結果分析
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 //比如還有nginx
Server Hostname: www.baidu.com //請求的域名
Server Port: 443 //埠
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128 //ssl協議
//文件資訊
Document Path: / //請求的文件,如果你的地址是:/test/index?a=1,展示的就是這個
Document Length: 227 bytes //包含所有HTML,影象,css,js及響應中任何內容的位元組數總和
//連線資訊
Concurrency Level: 1 //所進行的併發請求總數
Time taken for tests: 0.028 seconds //執行所話費的總時間
Complete requests: 1 //模擬的請求總數中已完成的請求總數
Failed requests: 0 //請求中失敗的請求總數
Write errors: 0 //使用寫入資料時遇到的錯誤總數
//Non-2xx responses //為收到HTTP成功響應的請求總數(這個沒有顯示出來.是我自己加的)
Total transferred: 893 bytes //整個模擬的響應中傳輸的總資料,大小包括標頭資料
HTML transferred: 227 bytes //整個模擬傳輸的內容正文的總數大小,越小越好
Requests per second: 35.37 [#/sec] (mean) //每秒支援的請求總數(平均數),越大越好
Time per request: 28.271 [ms] (mean) //滿足一個請求需要的總時間(毫秒)
Time per request: 28.271 [ms] (mean, across all concurrent requests) //滿足所有併發請求中的一個請求需要的總時間(毫秒),越小余額好
Transfer rate: 30.85 [Kbytes/sec] received //每秒收到的位元組數(KB/s)
//連線指標細目分類,告訴我們請求在每個過程狀態中所需要的時間
Connection Times (ms)
min mean[+/-sd] median max
Connect: 21 21 0.0 21 21
Processing: 7 7 0.0 7 7
Waiting: 7 7 0.0 7 7
Total: 28 28 0.0 28 28
//從Total的min和max可以知道所有請求中最少耗時是28ms,最多是28ms