之前做性能除錯的時候一直用的JMeter壓測,最近發現一款簡單易用的壓力測驗工具, ab(Apache benchmark)是一款常用的壓力測驗工具,是Apache附帶的一個小工具 , 專門用于HTTP Server的benchmark testing,可以同時模擬多個并發請求,
v基礎知識
ab的原理:ab命令會創建多個并發訪問執行緒,模擬多個訪問者同時對某一URL地址進行訪問,它的測驗目標是基于URL的,因此,它既可以用來測驗apache的負載壓力,也可以測驗nginx、lighthttp、tomcat、IIS等其它Web服務器的壓力,ab命令對發出負載的計算機要求很低,它既不會占用很高CPU,也不會占用很多記憶體,但卻會給目標服務器造成巨大的負載,其原理類似CC攻擊,自己測驗使用也需要注意,否則一次上太多的負載,可能造成目標服務器資源耗完,嚴重時甚至導致死機,
先介紹幾個性能指標,
吞吐率:服務器并發處理能力的量化描述,單位是reqs/s,指的是某個并發用戶數下單位時間內處理的請求數,某個并發用戶數下單位時間內能處理的最大請求數,稱之為最大吞吐率,
并發連接數:某一時刻服務器所接受的請求數(會話數),
并發用戶數:某一時刻服務器所接受的連接數,一個用戶可能同時產生多個連接,
用戶平均請求等待時間:總請求數 / 并發用戶數,
服務器平均請求等待時間:處理完成所有請求數所花費的時間 / 總請求數,
PV: 即page view,頁面瀏覽量,用戶每一次對網站中的每個頁面訪問均被記錄1次,用戶對同一頁面的多次重繪,訪問量累計,
UV:即Unique visitor,獨立訪客,通過客戶端的cookies實作,即同一頁面,客戶端多次點擊只計算一次,訪問量不累計,
IP: 即Internet Protocol,本意本是指網路協議,在資料統計這塊指通過ip的訪問量,即同一頁面,客戶端使用同一個IP訪問多次只計算一次,訪問量不累計,
TPS:即Transactions Per Second的縮寫,每秒處理的事務數目,一個事務是指一個客戶機向服務器發送請求然后服務器做出反應的程序,客戶機在發送請求時開始計時,收到服務器回應后結束計時,以此來計算使用的時間和完成的事務個數,最終利用這些資訊作出的評估分,
QPS:即Queries Per Second的縮寫,每秒能處理查詢數目,是一臺服務器每秒能夠相應的查詢次數,是對一個特定的查詢服務器在規定時間內所處理流量多少的衡量標準,QPS=并發量 / 平均回應時間
RPS:即Requests Per Second的縮寫,每秒能處理的請求數目,等效于QPS
vWindows安裝ab test
1.1 下載地址
https://www.apachehaus.com/cgi-bin/download.plx

1.2 解壓

用CMD命令列打開解壓后的bin目錄路徑,

1.3 測驗
ab -n 100 -c 10 http://toutou.com:8301/user/get?uid=1
-n 表示請求數,-c 表示并發數. -t 表示多少s內并發和請求
上面的命令測驗總次數為100,并發數為10(相當于10個用戶同時訪問,他們總共訪問100次),

在決議回傳結果之前,我們先來看看如果宿主機由Windows換成Linux后,如何在Linux上使用ab test,
vLinux安裝ab test
2.1 安裝ab test
yum -y install httpd-tools
ab -V

2.2 測驗

v引數/回傳結果
3.1 引數
用法:ab [選項] 地址
Usage: ab [options] [http[s]://]hostname[:port]/path
-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)
3.2 回傳結果
以上文中Linux ab test的結果集為例:
[root@localhost ~]# ab -n 100 -c 10 http://toutou.com:8301/user/get?uid=1 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 toutou.com (be patient).....done #測驗服務器的名字 Server Software: #請求的URL主機名 Server Hostname: toutou.com #web服務器監聽的埠 Server Port: 8301 #請求的URL中的根絕對路徑 Document Path: /user/get?uid=1 #HTTP回應資料的正文長度 Document Length: 131 bytes # 并發用戶數,這是ab命令中設定的-c引數 Concurrency Level: 10 #所有這些請求被處理完成所花費的總時間 Time taken for tests: 1.274 seconds # 總請求數量,這是ab命令中設定的-n引數 Complete requests: 100 # 失敗的請求數,這里的失敗是指請求的連接服務器、發送資料、接收資料等環節發生例外,以及無回應后超時的情況,對于超時時間的設定可以用ab的-t引數,如果接受到的http回應資料的頭資訊中含有2xx以外的狀態碼,則會在測驗結果顯示另一個名為“Non-2xx responses”的統計項,用于統計這部分請求數,這些請求并不算是失敗的請求, Failed requests: 0 #寫入錯誤 Write errors: 0 # 總的網路傳輸量(位元組數),包含http的頭資訊等,使用ab的-v引數即可查看詳細的http頭資訊, Total transferred: 25000 bytes # HTML內容傳輸量,實際的頁面傳遞位元組數,也就是減去了Total transferred中http回應資料中頭資訊的長度, HTML transferred: 13100 bytes # 每秒處理的請求數,服務器的吞吐量,等于:Complete requests / Time taken for tests(QPS) Requests per second: 78.48 [#/sec] (mean) # 用戶平均請求等待時間 Time per request: 127.425 [ms] (mean) # 服務器平均處理時間 Time per request: 12.743 [ms] (mean, across all concurrent requests) # 平均每秒網路上的流量,即每秒收到的速率 Transfer rate: 19.16 [Kbytes/sec] received # 壓力測驗時的連接處理時間,-- min最小值、mean平均值、[+/-sd]方差、median中位數、maxz最大值 Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 0.3 0 1 # socket鏈路建立消耗,代表網路狀況好 Processing: 20 121 54.9 119 281 # 寫入緩沖區消耗+鏈路消耗+服務器消耗 Waiting: 13 99 48.7 93 234 # 寫入緩沖區消耗+鏈路消耗+服務器消耗+讀取資料消耗 Total: 21 122 54.8 119 281 # 單個事務總時間 ERROR: The median and mean for the initial connection time are more than twice the standard deviation apart. These results are NOT reliable. Percentage of the requests served within a certain time (ms) 50% 119 66% 141 75% 148 80% 159 90% 201 95% 232 98% 268 99% 281 100% 281 (longest request) # 整個場景中所有請求的回應情況,在場景中每個請求都有一個回應時間,其中50%的用戶回應時間小于119毫秒,66%的用戶回應時間小于141毫秒,最大的回應時間小于281毫秒
3.3 從上面的回傳結果可以得出以下資料:
1.整個測驗持續的時間:1.274s
2.完成的請求數:1000
3.失敗的請求數:0
4.總的網路傳輸量(位元組數):25000 bytes
5.HTML內容傳輸量:13100 bytes
6.服務器的吞吐量:78.48 (QPS的穩定值應取決于失敗請求為0時支持的最高并發)
7.用戶平均請求等待時間:127.425ms
8.服務器平均處理時間:12.743ms
9.平均每秒網路上的流量: 19.16kb
10.99%的用戶回應時間小于181ms
v遇到的問題
4.1.1: 錯誤描述
apr_socket_recv: Connection reset by peer (104)
Total of 2513 requests completed
4.1.2: 解決方案
這個引數的意思是當出現“receive error”,即接收資料錯誤時是否退出,默認是退出的,所以會出現上述的問題,在引數中加入 -r 引數即可,
4.2.1: 錯誤描述
Benchmarking toutou.com (be patient)
socket: Too many open files (24)
4.2.2: 解決方案
調整可以打開的檔案數: ulimit -n 65535
v博客總結
1.ab判斷成功與否知識判斷
2xx回應碼,不接收服務器的回傳值,所以同樣的回應ab測驗支持的并發數大于LR和Jemter,TPS的回應值也會比較大2.ab運行的測驗并發數與ab所運行的機器的cpu的顆粒度有很大的關系,cpu顆粒度越大,測驗結果支持的并發數越大
3.ab不像LR或Jemter那么強大,但是它足夠輕便,如果只是在開發程序中想檢查一下某個模塊的回應情況,或者做一些場景比較簡單的測驗,ab還是一個不錯的選擇,
其他參考/學習資料:
- ab - Apache HTTP server benchmarking tool - Apache HTTP Server Version 2.4
- ab load testing
- Using Apache AB tool to test service performance in MAC environment
v原始碼地址
https://github.com/toutouge/javademosecond/tree/master/hellospringboot
作 者:請叫我頭頭哥
出 處:http://www.cnblogs.com/toutou/
關于作者:專注于基礎平臺的專案開發,如有問題或建議,請多多賜教!
著作權宣告:本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文鏈接,
特此宣告:所有評論和私信都會在第一時間回復,也歡迎園子的大大們指正錯誤,共同進步,或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角【推薦】一下,您的鼓勵是作者堅持原創和持續寫作的最大動力!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/234138.html
標籤:其他
