Web開發,少不了的就是壓力測試,它是評估一個產品是否合格上線的基本標准。
ab是一種用於測試Apache超文本傳輸協議(HTTP)服務器的工具。apache自帶ab工具,可以測試Apache、IIS、Tomcat、Nginx等Web服務器,因為apache是跨平台的,所以在Mac、Linux、Windows等系統下,只要安裝了apache就能使用ab工具。
Ubuntu系統安裝測試工具:sudo apt-get install apache2-utils
CentOS系統安裝測試工具:yum -y install httpd-tools
Windows系統Apache下載地址:https://www.apachehaus.com/cgi-bin/download.plx
mac自帶的apache中的ab是有最大並發限制的,您可以重新下載一個apache並且編譯(可以參考這篇文章),安裝之前記得卸載原來的哦。
ab是非圖形化的並發測試工具,沒有Jmeter、Loadrunner那樣有各種場景設計、各種圖形報告和監控,只需一個命令即可,有輸出描述,可以簡單的進行一些壓力測試。當然,您也可以選擇webbench、siege、http_load、Load impact、阿里雲PTS等工具進行很方便的測試。
Mac下自帶apache,查看版本:
apachectl -v
Server version: Apache/2.4.34 (Unix)
Server built: Feb 22 2019 20:20:11
查看ab版本:
ab -V
ab壓力測試工具的用法,查看:
ab --help
或者
man ab
# 按Ctrl+z組合鍵,或者按q鍵退出
例如:
ab -c 並發數 -n 請求數 URL
ab工具常用參數:
-n :總共的請求執行數,缺省是1;
-c: 並發數,缺省是1;
-t:測試所進行的總時間,秒為單位,缺省50000s
-p:POST時的數據文件
-w: 以HTML表的格式輸出結果
ab -n 100 -c 10 -w http://www.baidu.com/ >> baidu.html
# 結果界面和下面例子是一樣的,只是以html文件形式保存而已。
下面,我們以請求百度為例:
ab -n 100 -c 10 https://www.baidu.com/
下面是運行結果:
// apache版本信息
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
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
// 請求返回header類型
Server Software: BWS/1.1
// 請求ip或者域名
Server Hostname: www.baidu.com
// 請求端口,當前請求為https所以端口為443,請求https端口80
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,2048,128
TLS Server Name: www.baidu.com
Document Path: /
// 第一個成功返回的文檔的字節大小
Document Length: 227 bytes
// 並發數
Concurrency Level: 10
// 從建立連接到最后接受完成總時間
Time taken for tests: 1.407 seconds
// 完成請求數
Complete requests: 100
// 失敗請求數
Failed requests: 0
// 從服務器接收的字節總數
Total transferred: 89300 bytes
// HTML接收字節數,減去了Total transferred中HTTP響應數據中的頭信息的長度
HTML transferred: 22700 bytes
// 吞吐率:每秒請求數(總請求數/總時間,相當於LR中的每秒事務數TPS)
Requests per second: 71.07【#/sec】(mean)
// 用戶平均請求等待時間
Time per request: 140.709【ms】(mean)
// 服務器處理每個請求平均響應時間,mean表示為平均值
Time per request: 14.071 [ms] (mean, across all concurrent requests)
// 這些請求在單位時間內從服務器獲取的數據長度
// 計算公式:Total trnasferred/ Time taken for tests
Transfer rate: 61.98 [Kbytes/sec] received
// 連接消耗時間分解
Connection Times (ms)
min mean[+/-sd] median max
最小值 平均值 標准差 中間值 最大值
Connect: 60 92 16.6 93 167
Processing: 18 32 11.2 30 97
Waiting: 18 30 9.9 30 97
Total: 77 124 21.4 122 208
// 按完成請求的百分比,得出完成請求中花費時間最長的那一個請求的時間,也就是這些請求完成時間的最大值(毫秒)
Percentage of the requests served within a certain time (ms)
// 50%請求完成時間的最大值是122毫秒
50% 122
66% 130
75% 139
80% 140
// 90%請求完成時間的最大值是148毫秒
90% 148
95% 164
98% 182
99% 208
// 100%請求完成時間的最大值是208毫秒(最長請求)
100% 208 (longest request)
ab性能指標
在進行性能測試過程中有幾個指標比較重要。
1、吞吐率(Requests per second)
服務器並發處理能力的量化描述,單位是reqs/s,指的是在某個並發用戶數下單位時間內處理的請求數。某個並發用戶數下單位時間內能處理的最大請求數,稱之為最大吞吐率。
記住:吞吐率是基於並發用戶數的。這句話代表了兩個含義:
a、吞吐率和並發用戶數相關;
b、不同的並發用戶數下,吞吐率一般是不同的。
計算公式:總請求數/處理完成這些請求數所花費的時間,即:
Request per second=Complete requests/Time taken for tests
必須要說明的是,這個數值表示當前機器的整體性能,值越大越好。
2、並發連接數(The number of concurrent connections)
並發連接數指的是某個時刻服務器所接受的請求數目,簡單的講,就是一個會話。
3、並發用戶數(Concurrency Level)
要注意區分這個概念和並發連接數之間的區別,一個用戶可能同時會產生多個會話,也即連接數。在HTTP/1.1下,IE7支持兩個並發連接,IE8支持6個並發連接,FireFox3支持4個並發連接,所以相應的,我們的並發用戶數就得除以這個基數。
4、用戶平均請求等待時間(Time per request)
計算公式:處理完成所有請求數所花費的時間/(總請求數/並發用戶數),即:Time per request=Time taken for tests/(Complete requests/Concurrency Level)
5、服務器平均請求等待時間(Time per request:across all concurrent requests)
計算公式:處理完成所有請求數所花費的時間/總請求數,即:
Time taken for/testsComplete requests
可以看到,它是吞吐率的倒數。同時,它也等於用戶平均請求等待時間/並發用戶數,即:
Time per request/Concurrency Level。