使用 Apache AB 對服務(wù)器進(jìn)行壓力測試

ab

ab(Apache Bench)是apache自帶的壓力測試工具。ab非常實用,它不僅可以對apache服務(wù)器進(jìn)行網(wǎng)站訪問壓力測試,也可以對或其它類型的服務(wù)器進(jìn)行壓力測試。比如nginx、tomcat、IIS等。

安裝

我使用的環(huán)境為Ubuntu-14.04,輸入命令:
apt-get install apache2-utils

安裝成功后就可以開始進(jìn)行測試。

測試

測試命令的格式為:

ab [options] [http://]hostname[:port]/path

options為參數(shù),有以下幾種:

  • -A auth-username:password
    對服務(wù)器提供BASIC認(rèn)證信任。 用戶名和密碼由一個:隔開,并以base64編碼形式發(fā)送。 無論服務(wù)器是否需要(即, 是否發(fā)送了401認(rèn)證需求代碼),此字符串都會被發(fā)送。
  • -c concurrency
    一次產(chǎn)生的請求個數(shù)。默認(rèn)是一次一個。
  • -C cookie-name=value
    對請求附加一個Cookie:行。 其典型形式是name=value的一個參數(shù)對。 此參數(shù)可以重復(fù)。
  • -d
    不顯示"percentage served within XX [ms] table"的消息(為以前的版本提供支持)。
  • -e csv-file
    產(chǎn)生一個以逗號分隔的(CSV)文件, 其中包含了處理每個相應(yīng)百分比的請求所需要(從1%到100%)的相應(yīng)百分比的(以微妙為單位)時間。 由于這種格式已經(jīng)“二進(jìn)制化”,所以比'gnuplot'格式更有用。
  • -g gnuplot-file
    把所有測試結(jié)果寫入一個'gnuplot'或者TSV (以Tab分隔的)文件。 此文件可以方便地導(dǎo)入到Gnuplot, IDL, Mathematica, Igor甚至Excel中。 其中的第一行為標(biāo)題。
  • -h 顯示使用方法。
  • -H custom-header 對請求附加額外的頭信息。
    此參數(shù)的典型形式是一個有效的頭信息行,其中包含了以冒號分隔的字段和值的對 (如, "Accept-Encoding: zip/zop;8bit").
  • -i 執(zhí)行HEAD請求,而不是GET。
  • -k 啟用HTTP KeepAlive功能
    在一個HTTP會話中執(zhí)行多個請求。 默認(rèn)時,不啟用KeepAlive功能. -n requests 在測試會話中所執(zhí)行的請求個數(shù)。 默認(rèn)時,僅執(zhí)行一個請求,但通常其結(jié)果不具有代表意義。
  • -p POST-file包含了需要POST的數(shù)據(jù)的文件.
  • -P proxy-auth-username:password
    對一個中轉(zhuǎn)代理提供BASIC認(rèn)證信任。 用戶名和密碼由一個:隔開,并以base64編碼形式發(fā)送。 無論服務(wù)器是否需要(即, 是否發(fā)送了401認(rèn)證需求代碼),此字符串都會被發(fā)送。
  • -q 如果處理的請求數(shù)大于150, ab每處理大約10%或者100個請求時,會在stderr輸出一個進(jìn)度計數(shù)。 此-q標(biāo)記可以抑制這些信息。
  • -s 用于編譯中(ab -h會顯示相關(guān)信息)使用了SSL的受保護的https, 而不是http協(xié)議的時候。此功能是實驗性的,也是很簡陋的。最好不要用。
  • -S 不顯示中值和標(biāo)準(zhǔn)背離值。而且在均值和中值為標(biāo)準(zhǔn)背離值的1到2倍時,也不顯示警告或出錯信息。 默認(rèn)時,會顯示 最小值/均值/最大值等數(shù)值。(為以前的版本提供支持).
  • -t timelimit 測試所進(jìn)行的最大秒數(shù)。其內(nèi)部隱含值是-n 50000。 它可以使對服務(wù)器的測試限制在一個固定的總時間以內(nèi)。默認(rèn)時,沒有時間限制。
  • -T content-type POST數(shù)據(jù)所使用的Content-type頭信息。
  • -v verbosity 設(shè)置顯示信息的詳細(xì)程度
    4或更大值會顯示頭信息, 3或更大值可以顯示響應(yīng)代碼(404, 200等), 2或更大值可以顯示警告和其他信息。
  • -V 顯示版本號并退出。
  • -w 以HTML表的格式輸出結(jié)果。默認(rèn)時,它是白色背景的兩列寬度的一張表。
  • -x <table>-attributes 設(shè)置<table>屬性的字符串。 此屬性被填入<table 這里 >.
  • -X proxy[:port] 對請求使用代理服務(wù)器。
  • -y <tr>-attributes 設(shè)置<tr>屬性的字符串.
  • -z <td>-attributes 設(shè)置<td>屬性的字符串

參數(shù)很多,但我們通常使用到的是 -n-c,即總的請求數(shù)同時并發(fā)數(shù)

在命令行輸入:
ab -n 100 -c 20 http://www.test.com/
即對此域名的服務(wù)器進(jìn)行并發(fā)數(shù)20,總的請求為100的壓力測試。

實例

首先,在我本機運行一個tornado的http服務(wù)器的demo,然后輸入測試命令:

ab -n 2000 -c 100 http://localhost:9998/

然后可以看到輸出的測試結(jié)果:

Server Software:        TornadoServer/4.4.1
Server Hostname:        localhost
Server Port:            9998
//這段是服務(wù)器信息,可以看到使用的是Tornado,地址為本地,端口為9998

Document Path:          /
Document Length:        790 bytes
//測試的頁面和頁面大小

Concurrency Level:      100
//測試的并發(fā)數(shù)
Time taken for tests:   4.746 seconds
//測試持續(xù)時長
Complete requests:      2000
//測試的請求數(shù)
Failed requests:        0
//失敗的請求數(shù)
Total transferred:      1972000 bytes
//整個過程中數(shù)據(jù)量
HTML transferred:       1580000 bytes
//整個過程中HTML數(shù)據(jù)量
Requests per second:    421.43 [#/sec] (mean)
//平均每秒處理請求數(shù)
Time per request:       237.288 [ms] (mean)
//平均每個請求處理時長(并發(fā)數(shù)為一個整體,即100個并發(fā)同時請求)
Time per request:       2.373 [ms] (mean, across all concurrent requests)
//平均每個請求處理時長(對于并發(fā)請求,cpu實際上并不是同時處理的,而是按照每個請求獲得的時間片逐個輪轉(zhuǎn)處理的,所以基本上第一個Time per request時間約等于第二個Time per request時間乘以并發(fā)請求數(shù))
Transfer rate:          405.79 [Kbytes/sec] received
//平均每秒網(wǎng)絡(luò)上的流量,可以幫助排除是否存在網(wǎng)絡(luò)流量過大導(dǎo)致響應(yīng)時間延長的問題

Connection Times (ms)
            min  mean[+/-sd] median   max
Connect:        0   17  75.6      0     443
Processing:     6  209 350.2     98    1720
Waiting:        6  208 349.5     98    1716
Total:          6  226 420.4     98    2156
//網(wǎng)絡(luò)上消耗的時間的分解

Percentage of the requests served within a certain time (ms)
50%     98
66%    108
75%    114
80%    121
90%    507
95%    534
98%   2058
99%   2093
100%   2156 (longest request)
//整個場景中所有請求的響應(yīng)情況。在場景中每個請求都有一個響應(yīng)時間,其中50%的用戶響應(yīng)時間小于98毫秒,最大的響應(yīng)時間小于2156毫秒。

幾個重要指標(biāo)

  • 吞吐率(Requests per second)

    概念:服務(wù)器并發(fā)處理能力的量化描述,單位是reqs/s,指的是某個并發(fā)用戶數(shù)下單位時間內(nèi)處理的請求數(shù)。某個并發(fā)用戶數(shù)下單位時間內(nèi)能處理的最大請求數(shù),稱之為最大吞吐率。
    計算公式:總請求數(shù) / 處理完成這些請求數(shù)所花費的時間,即
    Request per second = Complete requests / Time taken for tests

  • 并發(fā)連接數(shù)(The number of concurrent connections)

    概念:某個時刻服務(wù)器所接受的請求數(shù)目,簡單的講,就是一個會話。

  • 并發(fā)用戶數(shù)(The number of concurrent users,Concurrency Level)

    概念:要注意區(qū)分這個概念和并發(fā)連接數(shù)之間的區(qū)別,一個用戶可能同時會產(chǎn)生多個會話,也即連接數(shù)。

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

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

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

    計算公式:處理完成所有請求數(shù)所花費的時間 / 總請求數(shù),即
    Time taken for / testsComplete requests
    可以看到,它是吞吐率的倒數(shù)。
    同時,它也=用戶平均請求等待時間/并發(fā)用戶數(shù),即
    Time per request / Concurrency Level


layout: post
title: "使用 Apache AB 對服務(wù)器進(jìn)行壓力測試"
subtitle: ""
date: 2017-03-01 12:00:00
author: "ZWY"
header-img: "img/in-post/3-1/banner.jpg"
catalog: true
tags:
- 壓測
- 教程
- 服務(wù)器


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容