linux 下ab壓力測試

1.ab的簡介

   ab是apachebench命令的縮寫。php

   ab是apache自帶的壓力測試工具。ab很是實用,它不只能夠對apache服務器進行網站訪問壓力測試,也能夠對或其它類型的服務器進行壓力測試。好比nginx、tomcat、IIS等html

2.ab的原理

   ab的原理:ab命令會建立多個併發訪問線程,模擬多個訪問者同時對某一URL地址進行訪問。它的測試目標是基於URL的,所以,它既能夠用來測試apache的負載壓力,也能夠測試nginx、lighthttp、tomcat、IIS等其它Web服務器的壓力。nginx

   ab命令對發出負載的計算機要求很低,它既不會佔用很高CPU,也不會佔用不少內存。但卻會給目標服務器形成巨大的負載,其原理相似CC攻擊。本身測試使用也須要注意,不然一次上太多的負載。可能形成目標服務器資源耗完,嚴重時甚至致使死機。web

3.ab的安裝

   yum -y install httpd-toolsapache

測試安裝是否成功:
[root@vic html]# ab -V This is ApacheBench, Version 2.3 <$Revision: 655654 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/

4.ab的參數說明

[root@vic html]# ab --help
ab: wrong number of arguments
Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
    -n requests     Number of requests to perform
    -c concurrency  Number of multiple requests to make
    -t timelimit    Seconds to max. wait for responses
    -b windowsize   Size of TCP send/receive buffer, in bytes
    -p postfile     File containing data to POST. Remember also to set -T
    -u putfile      File containing data to PUT. Remember also to set -T
    -T content-type Content-type header for POSTing, eg.
                    'application/x-www-form-urlencoded'
                    Default is 'text/plain'
    -v verbosity    How much troubleshooting info to print
    -w              Print out results in HTML tables
    -i              Use HEAD instead of GET
    -x attributes   String to insert as table attributes
    -y attributes   String to insert as tr attributes
    -z attributes   String to insert as td or th attributes
    -C attribute    Add cookie, eg. 'Apache=1234. (repeatable)
    -H attribute    Add Arbitrary header line, eg. 'Accept-Encoding: gzip'
                    Inserted after all normal header lines. (repeatable)
    -A attribute    Add Basic WWW Authentication, the attributes
                    are a colon separated username and password.
    -P attribute    Add Basic Proxy Authentication, the attributes
                    are a colon separated username and password.
    -X proxy:port   Proxyserver and port number to use
    -V              Print version number and exit
    -k              Use HTTP KeepAlive feature
    -d              Do not show percentiles served table.
    -S              Do not show confidence estimators and warnings.
    -g filename     Output collected data to gnuplot format file.
    -e filename     Output CSV file with percentages served
    -r              Don't exit on socket receive errors.
    -h              Display usage information (this message)
    -Z ciphersuite  Specify SSL/TLS cipher suite (See openssl ciphers)
    -f protocol     Specify SSL/TLS protocol (SSL2, SSL3, TLS1, or ALL)

詳情說明:windows

-n在測試會話中所執行的請求個數。默認時,僅執行一個請求。請求的總數量tomcat

-c一次產生的請求個數。默認是一次一個。請求的用戶量服務器

-t測試所進行的最大秒數。其內部隱含值是-n 50000,它可使對服務器的測試限制在一個固定的總時間之內。默認時,沒有時間限制。cookie

-V顯示版本號並退出。併發

5.性能指標

5.1吞吐量(Requests per second)

服務器併發處理能力的量化描述,單位是reqs/s,指的是在某個併發用戶數下單位時間內處理的請求數。某個併發用戶數下單位時間內能處理的最大請求數,稱之爲最大吞吐率。
記住:吞吐率是基於併發用戶數的。這句話表明了兩個含義:
a、吞吐率和併發用戶數相關
b、不一樣的併發用戶數下,吞吐率通常是不一樣的
計算公式:總請求數/處理完成這些請求數所花費的時間,即
Request per second=Complete requests/Time taken for tests
必需要說明的是,這個數值表示當前機器的總體性能,值越大越好。

5.2 併發鏈接數(The number of concurrent connections)

    併發鏈接數指的是某個時刻服務器所接受的請求數目,簡單的講,就是一個會話。

5.3 併發用戶數(Concurrency Level)

   要注意區分這個概念和併發鏈接數之間的區別,一個用戶可能同時會產生多個會話,也即鏈接數。在HTTP/1.1下,IE7支持兩個併發鏈接,IE8支持6個併發鏈接,FireFox3支持4個併發鏈接,因此相應的,咱們的併發用戶數就得除以這個基數。

5.4 用戶平均請求等待時間(Time per request)

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

5.5 服務器平均請求等待時間(Time per request:across all concurrent requests)

計算公式:處理完成全部請求數所花費的時間/總請求數,即:
Time taken for/testsComplete requests
能夠看到,它是吞吐率的倒數。
同時,它也等於用戶平均請求等待時間/併發用戶數,即
Time per request/Concurrency Level

6.ab的應用

   ab的命令參數比較多,咱們常常使用的是-c和-n參數。

   ab -c 10 -n 100 http://www.myvick.cn/index.php :同時處理100個請求並運行10次index.php

  -c10表示併發用戶數爲10

  -n100表示請求總數爲100

[root@vic html]# ab -c 10 -n 100 http://www.myvick.cn/index.php
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.myvick.cn (be patient).....done


Server Software:        nginx/1.13.6   #測試服務器的名字
Server Hostname:        www.myvick.cn  #請求的URL主機名
Server Port:            80             #web服務器監聽的端口

Document Path:          /index.php    #請求的URL中的根絕對路徑,經過該文件的後綴名,咱們通常能夠了解該請求的類型
Document Length:        799 bytes       #HTTP響應數據的正文長度

Concurrency Level:      10        # 併發用戶數,這是咱們設置的參數之一
Time taken for tests:   0.668 seconds   #全部這些請求被處理完成所花費的總時間 單位秒
Complete requests:      100         # 總請求數量,這是咱們設置的參數之一
Failed requests:        0          # 表示失敗的請求數量,這裏的失敗是指請求在鏈接服務器、發送數據等環節發生異常,以及無響應後超時的狀況
Write errors:           0
Total transferred:      96200 bytes    #全部請求的響應數據長度總和。包括每一個HTTP響應數據的頭信息和正文數據的長度
HTML transferred:       79900 bytes    # 全部請求的響應數據中正文數據的總和,也就是減去了Total transferred中HTTP響應數據中的頭信息的長度
Requests per second:    149.71 [#/sec] (mean) #吞吐率,計算公式:Complete requests/Time taken for tests  總請求數/處理完成這些請求數所花費的時間
Time per request:       66.797 [ms] (mean)   # 用戶平均請求等待時間,計算公式:Time token for tests/(Complete requests/Concurrency Level)。處理完成全部請求數所花費的時間/(總請求數/併發用戶數)
Time per request:       6.680 [ms] (mean, across all concurrent requests) #服務器平均請求等待時間,計算公式:Time taken for tests/Complete requests,正好是吞吐率的倒數。也能夠這麼統計:Time per request/Concurrency Level
Transfer rate:          140.64 [Kbytes/sec] received  #表示這些請求在單位時間內從服務器獲取的數據長度,計算公式:Total trnasferred/ Time taken for tests,這個統計很好的說明服務器的處理能力達到極限時,其出口寬帶的需求量。

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        1    2   0.7      2       5
Processing:     2   26  81.3      3     615
Waiting:        1   26  81.3      3     615
Total:          3   28  81.3      6     618

Percentage of the requests served within a certain time (ms)
  50%      6
  66%      6
  75%      7
  80%      7
  90%     10
  95%    209
  98%    209
  99%    618
 100%    618 (longest request)

#Percentage of requests served within a certain time(ms)這部分數據用於描述每一個請求處理時間的分佈狀況,好比以上測試,80%的請求處理時間都不超過7ms,這個處理時間是指前面的Time per request,即對於單個用戶而言,平均每一個請求的處理時間

 7 nginx和apache對比

  nginx性能確實比apache性能高。nginx的吞吐量大於apache的,吞吐量越大越好

相關文章
相關標籤/搜索