使用apache的ab命令進行壓測

1. 背景:互聯網發達的今天,大大小小的網站如雨後春筍,不斷出現,可是想要作出一個網站很簡單,可是想要作好一個網站,很是很是難,首先:網站作好以後的功能怎麼樣這都是次要的,主要的是你的網站能承受怎麼樣的訪問量,一個在高壓訪問下,能承受很高峯值的訪問併發才能稱得上是一個好的網站,那麼做爲一個程序員,當你搭建好你的網站以後,你應該怎麼測試你的網站併發訪問量呢?php

 

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

2.在學習使用ab命令以前,首先要了解壓力測試的幾個概念:(本身能夠上網查下具體的概念)nginx

  1. 吞吐率(Requests per second)
    概念:服務器併發處理能力的量化描述,單位是reqs/s,指的是某個併發用戶數下單位時間內處理的請求數。某個併發用戶數下單位時間內能處理的最大請求數,稱之爲最大吞吐率。
    計算公式:總請求數 / 處理完成這些請求數所花費的時間,即
    Request per second = Complete requests / Time taken for tests程序員

  2. 併發鏈接數(The number of concurrent connections)
    概念:某個時刻服務器所接受的請求數目,簡單的講,就是一個會話。sql

  3. 併發用戶數(The number of concurrent users,Concurrency Level)
    概念:要注意區分這個概念和併發鏈接數之間的區別,一個用戶可能同時會產生多個會話,也即鏈接數。數據庫

  4. 用戶平均請求等待時間(Time per request)
    計算公式:處理完成全部請求數所花費的時間/ (總請求數 / 併發用戶數),即
    Time per request = Time taken for tests /( Complete requests / Concurrency Level)apache

  5. 服務器平均請求等待時間(Time per request: across all concurrent requests)
    計算公式:處理完成全部請求數所花費的時間 / 總請求數,即
    Time taken for / testsComplete requests
    能夠看到,它是吞吐率的倒數。
    同時,它也=用戶平均請求等待時間/併發用戶數,即
    Time per request / Concurrency Levelwindows

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.分析上面的壓測結果:api

Server Software: Apache/2.2.25 (服務器軟件名稱及版本信息)tomcat

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頭。

相關文章
相關標籤/搜索