天天看點

使用apache的ab指令進行壓測

1. 背景:網際網路發達的今天,大大小小的網站如雨後春筍,不斷出現,但是想要做出一個網站很簡單,但是想要做好一個網站,非常非常難,首先:網站做好之後的功能怎麼樣這都是次要的,主要的是你的網站能承受怎麼樣的通路量,一個在高壓通路下,能承受很高峰值的通路并發才能稱得上是一個好的網站,那麼作為一個程式員,當你搭建好你的網站之後,你應該怎麼測試你的網站并發通路量呢?

接下來要介紹的就是apache的ab指令壓測:

2.在學習使用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

3.ab工具的介紹

ab是apache自帶的壓力測試工具。ab非常實用,它不僅可以對apache伺服器進行網站通路壓力測試,也可以對或其它類型的伺服器進行壓力測試。比如nginx、tomcat、IIS等。

  安裝:

                1.公司應該有程式員吧,可以安裝一個wamp或者phpstudy,這樣apache伺服器和mysql資料庫都有了,一舉多得:

    檔案位置:打開你安裝的apache的位置:找到 bin檔案夾下面的ab.exe

    在該檔案夾下打開指令行,輸入 ab.exe -help

對上面的Options做下解釋吧:

-n即requests,用于指定壓力測試總共的執行次數。
-c即concurrency,用于指定壓力測試的并發數。
-t即timelimit,等待響應的最大時間(機關:秒)。
-b即windowsize,TCP發送/接收的緩沖大小(機關:位元組)。
-p即postfile,發送POST請求時需要上傳的檔案,此外還必須設定

-T

參數。
-u即putfile,發送PUT請求時需要上傳的檔案,此外還必須設定

-T

參數。
-T即content-type,用于設定Content-Type請求頭資訊,例如:

application/x-www-form-urlencoded

,預設值為

text/plain

-v即verbosity,指定列印幫助資訊的備援級别。
-w以HTML表格形式列印結果。
-i使用HEAD請求代替GET請求。
-x插入字元串作為table标簽的屬性。
-y插入字元串作為tr标簽的屬性。
-z插入字元串作為td标簽的屬性。
-C添加cookie資訊,例如:"Apache=1234"(可以重複該參數選項以添加多個)。
-H添加任意的請求頭,例如:"Accept-Encoding: gzip",請求頭将會添加在現有的多個請求頭之後(可以重複該參數選項以添加多個)。
-A添加一個基本的網絡認證資訊,使用者名和密碼之間用英文冒号隔開。
-P添加一個基本的代理認證資訊,使用者名和密碼之間用英文冒号隔開。
-X指定使用的代理伺服器和端口号,例如:"126.10.10.3:88"。
-V列印版本号并退出。
-k使用HTTP的KeepAlive特性。
-d不顯示百分比。
-S不顯示預估和警告資訊。
-g輸出結果資訊到gnuplot格式的檔案中。
-e輸出結果資訊到CSV格式的檔案中。
-r指定接收到錯誤資訊時不退出程式。
-h顯示用法資訊,其實就是

ab -help

4.實際測試:
使用apache的ab指令進行壓測

5.分析上面的壓測結果:

Server Software: Apache/2.2.25 (伺服器軟體名稱及版本資訊)

Server Hostname: www.xxx.com(伺服器主機名)

Server Port: 80 (伺服器端口)

Document Path: /lol (供測試的URL路徑)

Document Length: 0 bytes (供測試的URL傳回的文檔大小)

Concurrency Level: 100 (并發數)

Time taken for tests: 0.800 seconds (壓力測試消耗的總時間)

Complete requests: 100 (壓力測試的的總次數)

Failed requests: 0 (失敗的請求數)

Total transferred: 16342 bytes (傳輸的總資料量)

HTML transferred: 0 bytes (HTML文檔的總資料量)

Requests per second: 125.03 [#/sec] (mean) (平均每秒的請求數)

Time per request: 799.805 [ms] (mean) (所有并發使用者(這裡是100)都請求一次的平均時間)

Time per request: 7.998 [ms] (mean, across all concurrent requests) (單個使用者請求一次的平均時間)

Transfer rate: 19.95 [Kbytes/sec] received (傳輸速率,機關:KB/s)

在上面的測試中,我們設定的壓力測試總次數以及并發數并沒有讓伺服器感覺到什麼「壓力」,現在我們再來看一個「壓力山大」的執行指令:

     

ab -n 1000 -c 100 localhost/index.php

,這個時候apache就直接罷工——拒絕通路了:

D:\study\Apache\bin>ab -n 100 -c100 http://www.xxx.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/      

在上面的壓力測試中,Apache使用的是預設配置,并沒有經過任何優化措施處理。實際上,Apache在經過配置優化

後,隻要伺服器硬體夠用,Apache伺服器是能夠撐起1000的并發量的。

6.ab進行app接口的壓測:

 ab -n 400 -c20  "http://www.xxx.com/api.php?sig=......";

将需要壓測的接口,用 " " ;

7.ab進行post傳參的壓測

 ab -n 400 -c20  -p parm.txt -T "application/x-www-form-urlencoded" http://localhost:3000/login

将 parm.txt放在和ab.exe相同的檔案夾中,parm.txt中存放的是需要post格式傳遞的參數。

-T :post請求的head頭。

使用apache的ab指令進行壓測