1. 程式人生 > >ab命令做壓測測試

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.實際測試:

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/lol;
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的併發量的。