新專案快上線了,在上線前要對生產環境做一下壓力測試,看下該硬體的效能滿不滿足專案前期。市面上能做壓縮測試的軟體很多,隨便查一下都能找到數十種,在這裡給大家介紹一個很常見而且也是我常用的測壓工具,那就是apache自帶的apache-ab壓力測試模組。
在Windows系統下,開啟cmd命令列視窗,定位到apache安裝目錄的bin目錄下 \
cd C:\XXX\Apache\bin
鍵入命令:
ab -n 800 -c 800 http://www.baidu.com
c 800 即:每次併發800 個
n 800 即: 共傳送800 個請求
ab -t 60 -c 100 http://www.baidu.com
在60秒內發請求,一次100個請求。
引數的的請求
ab -t 60 -c 100 -T "application/x-www-form-urlencoded" p p.txt “http://www.baidu.com"
p.txt 是和ab.exe在一個目錄 p.txt 中可以寫引數,如 p=wdp&fq=78,要注意編碼問題
引數中的三種形式
application/x-www-form-urlencoded (預設值)
就是設定表單傳輸的編碼,典型的post請求
multipart/form-data.
用來指定傳輸資料的特殊型別的,主要就是我們上傳的非文字的內容,比如圖片,mp3,檔案等等
text/plain . 是純文字傳輸的意思
ab -n 100 -c 100 -p p.txt -T application/x-www-form-urlencoded "http://www.baidu.com"
This is ApacheBench, Version 2.3 <$Revision: 1748469 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking apiv2.aligogo.in (be patient).....done
Server Software: nginx/1.16.0
Server Hostname: apiv2.aligogo.in
Server Port: 80
Document Path: /Api/getOptimal //測試的地址
Document Length: 51 bytes //返回大小
Concurrency Level: 100 //測試的併發數
Time taken for tests: 4.076 seconds //總耗時
Complete requests: 100 //完成的請求數量
Failed requests: 0 //失敗的請求數量
Total transferred: 21400 bytes //整個過程中的網路傳輸量
Total body sent: 92400 //不清楚,沒找到相關說明
HTML transferred: 5100 bytes //測試過程中產生的HTML傳輸量
Requests per second: 24.53 [#/sec] (mean) //表示伺服器吞吐量,每秒事務數,括號中的 mean 表示這是一個平均值
Time per request: 4076.348 [ms] (mean) //表示使用者請求的平均響應時間,後面括號中的mean表示這是一個平均值
Time per request: 40.763 [ms] (mean, across all concurrent requests) //表示伺服器請求平均處理時間,即實際執行時間的平均值
Transfer rate: 5.13 [Kbytes/sec] received
22.14 kb/s sent
27.26 kb/s total
//表示這些請求在單位時間內從伺服器獲取的資料長度,可以幫助排除是否存在網路流量過大導致響應時間延長的問題
Connection Times (ms)
min mean[+/-sd] median max //min最小值、mean平均值、[+/-sd]方差、median中位數、maxz最大值
Connect: 0 31 300.0 1 3000 //socket鏈路建立消耗,代表網路狀況好
Processing: 427 1908 1191.8 3043 3086 //寫入緩衝區消耗+鏈路消耗+伺服器消耗
Waiting: 427 1908 1191.8 3042 3086 //寫入緩衝區消耗+鏈路消耗+伺服器消耗+讀取資料消耗
Total: 428 1939 1192.6 3045 3454 //單個事務總時間
Percentage of the requests served within a certain time (ms)
50% 3045
66% 3059
75% 3067
80% 3071
90% 3081
95% 3084
98% 3087
99% 3454
100% 3454 (longest request)
//整個場景中所有請求的響應情況。在場景中每個請求都有一個響應時間,其中50%的使用者響應時間小於3045毫秒,66%的使用者響應時間小於3059毫秒,最大的響應時間小於 3454 毫秒
- ab 判斷成功與否知識判斷2xx 響應碼,不接收伺服器的返回值
- ab命令在一般系統上面做測試時候,一般併發不能超過1024個,其實是因為因為系統限制每個程式開啟的最大檔案數為1024,可以用ulimit -a來檢視
- n 可以指定最大請求數,但是不能超過50000個
- Time per request是關注點
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 #輸出幫助資訊