Apache壓力測試方法之ab命令
1、性能測試工具ab簡介
ab(Apache Bench)命令是apache免費自帶的性能測試工具,默認在apache的bin目錄下,它能模擬多個並發請求,主要是用來測試apache、Nginx等網站服務器單位時間內能處理請求的個數。
ab命令會創建多個並發訪問線程,模擬多個訪問者同時對某一個URL地址進行訪問。它的測試目標是基於URL的,因此,它既可以用來測試apache的負載壓力,也可以測試nginx、lighthttp、tomcat、IIS等其它Web服務器的壓力。
ab命令對發出負載的計算機要求很低,既不會占用很多CPU,也不會占用太多的內存,但卻會給目標服務器造成巨大的負載,其原理類似CC攻擊。自己使用也須謹慎。否則一次上太多的負載,造成目標服務器直接因內存耗光死機,而不得不硬重啟,得不償失。
在帶寬不足的情況下,最好是本機進行測試,建議使用內網的另一臺或者多臺服務器通過內網進行測試,這樣得出的數據,準確度會高很多。遠程對web服務器進行壓力測試,往往效果不理想(因為網絡延時過大或帶寬不足)
2、安裝ab命令
默認情況下,只要安裝了Apache,ab命令就會自動安裝上,當然有時候我們只想單獨安裝ab命令,那麽就需要使用下面的方法。
方法1:直接使用yum安裝apache的工具包httpd-tools安裝ab命令
[root@localhost ~]# yum -y install httpd-tools
[root@localhost ~]# ab -V 檢查ab命令是否安裝成功
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/
方法2:yum安裝或編譯安裝Apache即可安裝ab命令(這裏不進行演示)
源碼安裝apache的話。apache安裝完畢後ab命令存放在apache安裝目錄的bin目錄下,例如:/usr/local/apache2/bin
如果apache 是通過yum的RPM包方式安裝的話,ab命令默認存放在/usr/bin目錄下。
3、ab命令重要常用參數說明
-c 數值 | 單次發送的請求數量,也稱並發量 |
-n 數值 | 總共的請求次數 |
-t 數值(秒) | 設置請求的時間長短,單位默認秒,其內部隱含值是-n 50000 |
-v | 設置詳細模式等級 |
-V | 顯示版本號並退出 |
-h | 顯示幫助信息 |
-H | 為請求追加一個額外的頭 |
-A | 指定連接服務器的基本的認證憑據 |
-C | 添加cookie |
-g | 將測試結果輸出為“gnuolot”文件 |
-i | 使用“head”請求方式 |
-k | 激活HTTP中的“keepAlive”特性 |
-p | 指定包含數據的文件 |
-q | 不顯示進度百分比 |
-T | 使用POST數據時,設置內容類型頭 |
-w | 以HTML表格方式打印結果 |
-x | 以表格方式輸出時,設置表格的屬性 |
-X | 使用指定的代理服務器發送請求 |
-y | 以表格方式輸出時,設置表格屬性 |
4、使用ab命令進行壓力測試
[root@localhost ~]# ab -c 30 -n 100 http://192.168.115.120/
#說明:指定的並發量為30每秒,總共請求100次
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 192.168.115.120 (be patient).....done
Server Software: Apache/2.4.7 被測試的Web服務器軟件名稱
Server Hostname: 192.168.115.120 請求的URL主機名
Server Port: 80 請求端口號
Document Path: / 請求的URL文件路徑
Document Length: 152 bytes 頁面字節數
Concurrency Level: 30 並發用戶數
Time taken for tests: 0.085 seconds 總訪問時間
Complete requests: 100 完成的請求數
Failed requests: 0 失敗請求數
Write errors: 0
Total transferred: 39600 bytes 請求總數據大小(包括header頭信息)
HTML transferred: 15200 bytes html頁面實際總字節數
Requests per second: 1170.93 [#/sec] (mean) 吞吐量-每秒請求數
Time per request: 25.621 [ms] (mean) 用戶平均請求等待時間
Time per request: 0.854 [ms] (mean, across all concurrent requests) 並發的每個請求平均消耗時間
Transfer rate: 452.82 [Kbytes/sec] received 每秒獲取的數據長度
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 3 3.8 1 10
Processing: 8 18 5.5 16 30
Waiting: 0 17 5.7 16 29
Total: 12 21 7.3 18 37
Percentage of the requests served within a certain time (ms)
50% 18 50%用戶請求在18ms內返回
66% 23 66%用戶請求在23ms內返回
75% 27 75%用戶請求在27ms內返回
80% 29 80%用戶請求在29ms內返回
90% 33 90%用戶請求在33ms內返回
95% 35 95%用戶請求在35ms內返回
98% 36 98%用戶請求在36ms內返回
99% 37 99%用戶請求在37ms內返回
100% 37 (longest request)
由於對於並發請求,cpu實際上並不是同時處理的,而是按照每個請求獲得的時間片逐個輪轉處理的,所以基本上第一個Time per request時間約等於第二個Time per request時間乘以並發請求數
5、關於需要用戶名密碼登錄的問題
有時候進行壓力測試需要用戶登錄,可以先用賬戶和密碼登錄後,用開發者工具找到標識這個會話的Cookie值(Session ID)記下來.
如果只用到一個Cookie,那麽只需鍵入命令:
ab -n 100 -C key=value http://test.com/
如果需要多個Cookie,就直接設Header:
ab -n 100 -H “Cookie: Key1=Value1; Key2=Value2” http://test.com/
總的來說ab工具ab小巧簡單,上手學習較快,可以提供需要的基本性能指標,但是沒有圖形化結果,不能監控。因此ab工具可以用作臨時緊急任務和簡單測試。同類型的壓力測試工具還有:webbench、siege、http_load等
6、ab命令使用的一些問題
ab命令在一般系統上面做測試時候,一般並發不能超過1024個,其實是因為系統限制每個進程打開的最大文件數為1024,可以用ulimit -a來查看
-n 可以指定最大請求數,但是不能超過50000個
-v n 當n>=2 時,可以顯示發送的http請求頭,和響應的http頭及內容,壓力測試時不要這麽做。在做壓力測試的時候,一般情況下壓力測試客戶端接收到的數據量一定會遠大於發送出去的數據量
7、ab命令的性能指標
(1)吞吐率(Requests per second)
概念:服務器並發處理能力的量化描述,單位是reqs/s,指的是某個並發用戶數下單位時間內處理的請求數。某個並發用戶數下單位時間內能處理的最大請求數,稱之為最大吞吐率。計算公式:總請求數 / 處理完成這些請求數所花費的時間,即Request per second = Complete requests / Time taken for tests
(2)並發連接數(The number of concurrent connections)
概念:某個時刻服務器所接受的請求數目,簡單的講,就是一個會話。
(3)並發用戶數(The number of concurrent users,Concurrency Level)
概念:要註意區分這個概念和並發連接數之間的區別,一個用戶可能同時會產生多個會話,也即連接數。
(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
Apache壓力測試方法之ab命令