jemeter wrk ab siege 簡(jiǎn)單安裝使用

背景

在開(kāi)發(fā)出的系統(tǒng)在交付上線時(shí)候坑夯,需要知曉整個(gè)系統(tǒng)的運(yùn)行邊界,通常情況下需要了解系統(tǒng)的性能和吞吐量酥泞。

關(guān)鍵詞解釋

  • RT(響應(yīng)時(shí)間):系統(tǒng)對(duì)請(qǐng)求從請(qǐng)求到做出的響應(yīng)時(shí)間育特。
  • TPS(吞吐量):系統(tǒng)在單位時(shí)間內(nèi)處理請(qǐng)求事務(wù)的數(shù)量。
  • QPS(每秒查詢(xún)的能力):系統(tǒng)在執(zhí)行的查詢(xún)疫萤。

壓測(cè)工具介紹

  • jmeter:apache組織開(kāi)發(fā)的基于Java的壓力測(cè)試工具颂跨。
  • ab:ab是apache自帶的壓力測(cè)試工具。
  • siege:Siege是一個(gè)開(kāi)源的壓力測(cè)試和基準(zhǔn)工具扯饶,屬于Linux系統(tǒng)下的一個(gè)測(cè)試工具恒削,完全使用C語(yǔ)言實(shí)現(xiàn),可以對(duì)HTTP和FTP服務(wù)器進(jìn)行負(fù)載和性能測(cè)試尾序,siege的設(shè)計(jì)主要用于WEB的性能測(cè)試钓丰。
  • wrk:一款針對(duì) Http 協(xié)議的基準(zhǔn)測(cè)試工具,它能夠在單機(jī)多核 CPU 的條件下每币,使用系統(tǒng)自帶的高性能 I/O 機(jī)制携丁,如 epoll,kqueue 等兰怠,通過(guò)多線程和事件模式梦鉴,對(duì)目標(biāo)機(jī)器產(chǎn)生大量的負(fù)載。
  • tcpcopy:網(wǎng)易的王斌開(kāi)發(fā)的一款痕慢。

jmeter安裝使用

Apache JMeter是Apache組織開(kāi)發(fā)的基于Java的壓力測(cè)試工具

安裝

需要提前安裝好對(duì)應(yīng)的jdk版本

windows平臺(tái)

1):下載安裝包:點(diǎn)擊鏈接 進(jìn)入下載官網(wǎng)

官網(wǎng)下載示意圖

2):解壓:解壓包后放在系統(tǒng)中自定義位置尚揣。
3):環(huán)境變量:在系統(tǒng)的全局或者某個(gè)用戶(hù)下配置環(huán)境變量。變量名稱(chēng)為 JMETER_HOME掖举,變量值為D:\soft\jmeter\apache-jmeter-xxx(步驟2中解壓后的文件目錄快骗,bin的上一層路徑)。
添加classpath變量示意圖

4):在系統(tǒng)變量中的"CLASSPATH"追加
;%JMETER_HOME%\lib\ext\ApacheJmeter_core.jar;\%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-1.2.jar"
注意:
a)分號(hào)和斜杠都為英文模式下的分號(hào)和斜杠方篮,否則會(huì)出現(xiàn)未知錯(cuò)誤名秀。
b)如果沒(méi)有logkit-xxx.jar包就需要手動(dòng)去maven倉(cāng)庫(kù)下載,不展開(kāi)詳細(xì)講述藕溅。
5):?jiǎn)?dòng):打開(kāi)相應(yīng)文件夾匕得,點(diǎn)擊jmeter.exe即可啟動(dòng)。
安裝成功啟動(dòng)示意圖

mac平臺(tái)

一般安裝

1):下載:下載mac對(duì)應(yīng)的安裝包巾表,參考windows下 下載步驟汁掠。
2):解壓:使用命令tar``或者雙擊這個(gè)安裝包。 3):運(yùn)行:進(jìn)入到相應(yīng)的文件夾下sh jemter``即可啟動(dòng)集币。

brew安裝:

1):安裝:終端使用命令brew install jmeter
2):?jiǎn)?dòng):終端使用命令jmeter即可考阱。

linux平臺(tái)

1):下載:可以同mac下載一樣的安裝包。也可使用命令wget http://archive.apache.org/dist/jmeter/binaries/apache-jmeter-3.2.zip
2):增加權(quán)限:進(jìn)入相應(yīng)的文件夾下面后chmod +x jemter鞠苟。
3):運(yùn)行腳本:進(jìn)入相應(yīng)的文件夾目錄執(zhí)行./jmeter乞榨。

使用

1): 新建一個(gè)線程組

JMeter是java實(shí)現(xiàn)的,并且使用一個(gè)java線程來(lái)模擬一個(gè)用戶(hù)当娱,因此線程組就是一組虛擬用戶(hù)的意思吃既。這些虛擬用戶(hù)是用來(lái)模擬訪問(wèn)被測(cè)系統(tǒng)。
新建線程示意圖

2): 設(shè)置線程參數(shù)
  • 線程數(shù)(用戶(hù)):想要模擬的虛擬用戶(hù)的數(shù)量跨细。
  • 循環(huán)次數(shù):設(shè)置一個(gè)虛擬用戶(hù)循環(huán)多少次測(cè)試鹦倚,默認(rèn)為1。選擇forever就永遠(yuǎn)不會(huì)停止扼鞋,自動(dòng)一直循環(huán)下去申鱼,只能手動(dòng)停止愤诱。
  • Ramp-Up Period (in seconds)(虛擬用戶(hù)增長(zhǎng)時(shí)長(zhǎng)):設(shè)置的虛擬用戶(hù)訪問(wèn)url的時(shí)長(zhǎng)云头,是在一個(gè)時(shí)間同時(shí)訪問(wèn),還是在一段時(shí)間持續(xù)訪問(wèn)淫半。

    3): 添加被測(cè)試的接口url或者頁(yè)面
    添加被測(cè)試的接口url

    4):點(diǎn)擊運(yùn)行
    點(diǎn)擊運(yùn)行

    5):查看運(yùn)行日志
    查看運(yùn)行日志

    6):新增監(jiān)聽(tīng)溃槐,輔助用以壓測(cè)結(jié)果
    增加監(jiān)聽(tīng)

wrk

wrk是一款簡(jiǎn)單的HTTP壓測(cè)工具,托管在gitHub
wrk的一個(gè)很好的特性就是能用很少的線程壓出很大的并發(fā)量. 原因是它使用了一些操作系統(tǒng)特定的高性能 io 機(jī)制, 比如 select,epoll,kqueue 等. 其實(shí)它是復(fù)用了 ````redisae異步事件驅(qū)動(dòng)框架. 確切的說(shuō)ae事件驅(qū)動(dòng)框架并不是redis發(fā)明的, 它來(lái)至于 Tcl的解釋器jim```, 這個(gè)小巧高效的框架, 因?yàn)楸?redis 采用而更多的被大家所熟知.

  • 注意:wrk只能運(yùn)行在unix環(huán)境,例如 linux,mac,solaris

安裝

linux

下載
  • 下載代碼
    git clone https://github.com/wg/wrk.git 或者進(jìn)入github直接下載科吭,或者使用wget https://github.com/wg/wrk.git命令
  • 進(jìn)入下載目錄
    cd wrk/
  • 編譯wrk文件
    make
  • 創(chuàng)建軟連接到制定目錄
    ln -s /usr/local/src/wrk/wrk /usr/local/bin

mac平臺(tái)

安裝

brew install wrk

安裝成功

在控臺(tái)臺(tái)敲命令 wrk 出現(xiàn)

安裝成功

使用

參數(shù)解析

-c, --connections <N> 跟服務(wù)器建立并保持的TCP連接數(shù)量
-d, --duration <T> 壓測(cè)時(shí)間
-t, --threads <N> 使用多少個(gè)線程進(jìn)行壓測(cè)昏滴,壓測(cè)時(shí),是有一個(gè)主線程來(lái)控制我們?cè)O(shè)置的n個(gè)子線程間調(diào)度
-s, --script <S> 指定Lua腳本路徑
-H, --header <H> 為每一個(gè)HTTP請(qǐng)求添加HTTP頭
-latency 在壓測(cè)結(jié)束后对人,打印延遲統(tǒng)計(jì)信息
--timeout <T> 超時(shí)時(shí)間
-v, --version 打印正在使用的wrk的詳細(xì)版本信息
注意:

  • <N>代表數(shù)字參數(shù)谣殊,支持國(guó)際單位 (1k, 1M, 1G)
  • <T>代表時(shí)間參數(shù),支持時(shí)間單位 (2s, 2m, 2h)

統(tǒng)計(jì)信息分析

Running 30s test @ http://xxx(壓測(cè)時(shí)間30s)
8 threads and 200 connections(共8個(gè)測(cè)試線程牺弄,200個(gè)連接)
Thread Stats Avg Stdev Max +/- Stdev
(平均值) (標(biāo)準(zhǔn)差)(最大值)(正負(fù)一個(gè)標(biāo)準(zhǔn)差所占比例)
Latency 46.67ms 215.38ms 1.67s 95.59%
(延遲)
Req/Sec 7.91k 1.15k 10.26k 70.77%
(處理中的請(qǐng)求數(shù))
Latency Distribution (延遲分布)
50% 2.93ms
75% 3.78ms
90% 4.73ms
99% 1.35s (99分位的延遲:99%的請(qǐng)求在1.35s以?xún)?nèi))
1790465 requests in 30.01s, 684.08MB read (30.01秒內(nèi)共處理完成了1790465個(gè)請(qǐng)求姻几,讀取了684.08MB數(shù)據(jù))
Requests/sec: 59658.29 (平均每秒處理完成59658.29個(gè)請(qǐng)求)
Transfer/sec: 22.79MB (平均每秒讀取數(shù)據(jù)22.79MB)

使用lua腳本定制化壓測(cè)

lua腳本共有三個(gè)階段,啟動(dòng)階段,運(yùn)行階段蛇捌,結(jié)束階段抚恒,wrk可以支持在這三個(gè)階段進(jìn)行定制化。

  • 啟動(dòng)階段
    function setup(thread)
    在腳本文件中實(shí)現(xiàn)setup方法络拌,wrk就會(huì)在測(cè)試線程已經(jīng)初始化但還沒(méi)有啟動(dòng)的時(shí)候調(diào)用該方法俭驮。wrk會(huì)為每一個(gè)測(cè)試線程調(diào)用一次setup方法,
    并傳入代表測(cè)試線程的對(duì)象thread作為參數(shù)春贸。setup方法中可操作該thread對(duì)象混萝,獲取信息、存儲(chǔ)信息萍恕、甚至關(guān)閉該線程譬圣。
  • 運(yùn)行階段
function init(args)  --由測(cè)試線程調(diào)用,只會(huì)在進(jìn)入運(yùn)行階段時(shí)雄坪,調(diào)用一次厘熟。支持從啟動(dòng)wrk的命令中,獲取命令行參數(shù)维哈;
function delay()  --在每次發(fā)送request之前調(diào)用绳姨,如果需要delay,那么delay相應(yīng)時(shí)間阔挠;
function request()  --用來(lái)生成請(qǐng)求飘庄;每一次請(qǐng)求都會(huì)調(diào)用該方法,所以注意不要在該方法中做耗時(shí)的操作购撼;
function response(status, headers, body)  --在每次收到一個(gè)響應(yīng)時(shí)調(diào)用跪削;為提升性能,如果沒(méi)有定義該方法迂求,那么wrk不會(huì)解析headers和body碾盐;
  • 結(jié)束階段
    function done(summary, latency, requests)--在整個(gè)測(cè)試過(guò)程中只會(huì)調(diào)用一次,可從參數(shù)給定的對(duì)象中揩局,獲取壓測(cè)結(jié)果毫玖,生成定制化的測(cè)試報(bào)告。
  • 自定義可訪問(wèn)變量
wrk = {
    scheme  = "http", 
    host    = "localhost",
    port    = nil,
    method  = "GET",
    path    = "/",
    headers = {},
    body    = nil,
    thread  = <userdata>,
  }
  • 自定義方法
function wrk.format(method, path, headers, body)  --根據(jù)參數(shù)和全局變量wrk凌盯,生成一個(gè)HTTP rquest string付枫。
function wrk.lookup(host, service)  --給定host和service(port/well known service name),返回所有可用的服務(wù)器地址信息。
function wrk.connect(addr)  --測(cè)試與給定的服務(wù)器地址信息是否可以成功創(chuàng)建連接
  • 使用案例
    1: 攜帶json參數(shù),post請(qǐng)求
wrk.method = "POST"
wrk.headers["Content-Type"] = "application/json"
wrk.body = '{"charset":"utf-8","data":{}}'
function request()
    return wrk.format('POST', nil, nil, body)
end

使用命令 wrk -c 20 -t 8 -d 60 --script=/Users/wanter/foot/lua/wrk_post.lua --latency http://10.49.0.105:8081
2:打印出請(qǐng)求失敗的請(qǐng)求

wrk.method = "POST"
wrk.headers["S-COOKIE2"]="a=2&b=Input&c=10.0&d=20191114***"
wrk.body = '{"time":"2021-07-21","data":{}}' --根據(jù)需求傳自定義參數(shù)
wrk.headers["Host"]="api.shouji.**.com"
function response(status,headers,body)
        if status ~= 200 then --將服務(wù)器返回狀態(tài)碼不是200的請(qǐng)求結(jié)果打印出來(lái)
                print(body)
        --      wrk.thread:stop()
        end
end

3:實(shí)現(xiàn)隨機(jī)header-cookie

id_arr = {}
falg = 0
wrk.method = "POST"
wrk.body = '{請(qǐng)求參數(shù)}'
function init(args)
        for line in io.lines("integral/cookies.txt") do
                print(line)
                idArr[falg] = line
                falg = falg+1
        end
        falg = 0
end
--wrk.method = "POST"
--wrk.body = "a=1"
--wrk.path = "/v1/points/reading"
request = function()
        parms = idarr[math.random(0,4)] --隨機(jī)傳遞文件中的參數(shù)
        --parms = idarr[falg%(table.getn(idArr)+1)] 循環(huán)傳遞文件中的參數(shù)
        wrk.headers["S-COOKIE2"] = parms
        falg = falg+1
        return wrk.format()
end

4:實(shí)現(xiàn)隨機(jī)參數(shù)

id_arr = {};
function init(args)
        id_arr[1] = "1";
        id_arr[2] = "2";
        id_arr[3] = "3";
        id_arr[4] = "4";
end
request = function()
        parms = id_arr[math.random(1,4)]
        path = "/v1/points/reading?id="..parms
        return wrk.format("GET",path)
end

ab

ab是apache自帶的壓力測(cè)試工具奥溺。ab非常實(shí)用刃鳄,它不僅可以對(duì)apache服務(wù)器進(jìn)行網(wǎng)站訪問(wèn)壓力測(cè)試,也可以對(duì)或其它類(lèi)型的服務(wù)器進(jìn)行壓力測(cè)試事示。

安裝

windows下安裝

1):下載工具包
請(qǐng)點(diǎn)擊鏈接 到apache官網(wǎng)下載演训。
2):解壓
用解壓工具解壓后放置在某一路徑下即可允悦。
3):配置環(huán)境變量
講bin的路徑配置到系統(tǒng)path中即可衅疙。

linux下安裝

1):下載工具包
請(qǐng)點(diǎn)擊鏈接 到apache官網(wǎng)下載莲趣。
2):工具包解壓
tar -zxvf xxxxxx.zip
3):bin路徑配置到path變量

# 或者 vim ~/.bash_profile
vim ~/.bashrc
# 在最后一行加上 將xxx替換成具體路徑
export PATH=$PATH:/xxx/xxx/xxx/bin
# 保存后刷新下配置文件
source ~/.bashrc 

4):或者使用版本管理工具安裝
apt-get/yum -y install httpd-tools

mac下安裝

1):預(yù)先安裝apr和pcre

brew install apr
brew install pcre

2):下載安裝包
瀏覽器打開(kāi)鏈接,下載后解壓到任意目錄中饱溢。
3):編譯
進(jìn)入的解壓后的目錄中喧伞,依次執(zhí)行一下命令

./configure
make
make install

常用基本命令介紹

1):參數(shù)詳解:
格式:ab [options] [http://]hostname[:port]/path
參數(shù)說(shuō)明:
-n requests Number of requests to perform //在測(cè)試會(huì)話中所執(zhí)行的請(qǐng)求個(gè)數(shù)(本次測(cè)試總共要訪問(wèn)頁(yè)面的次數(shù))。默認(rèn)時(shí)绩郎,僅執(zhí)行一個(gè)請(qǐng)求潘鲫。
-c concurrency Number of multiple requests to make //一次產(chǎn)生的請(qǐng)求個(gè)數(shù)(并發(fā)數(shù))。默認(rèn)是一次一個(gè)肋杖。
-t timelimit Seconds to max. wait for responses //測(cè)試所進(jìn)行的最大秒數(shù)溉仑。其內(nèi)部隱含值是-n 50000。它可以使對(duì)服務(wù)器的測(cè)試限制在一個(gè)固定的總時(shí)間以?xún)?nèi)状植。默認(rèn)時(shí)浊竟,沒(méi)有時(shí)間限制。
-p postfile File containing data to POST //包含了需要POST的數(shù)據(jù)的文件津畸,文件格式如“p1=1&p2=2”.使用方法是 -p 111.txt 振定。 (配合-T)
-Tcontent-type Content-type header for POSTing //POST數(shù)據(jù)所使用的Content-type頭信息,如 -T “application/x-www-form-urlencoded” 肉拓。 (配合-p)
-vverbosity How much troubleshooting info to print //設(shè)置顯示信息的詳細(xì)程度 – 4或更大值會(huì)顯示頭信后频, 3或更大值可以顯示響應(yīng)代碼(404, 200等), 2或更大值可以顯示警告和其他信息。
-V 顯示版本號(hào)并退出暖途。
-w Print out results in HTML tables //以HTML表的格式輸出結(jié)果卑惜。默認(rèn)時(shí),它是白色背景的兩列寬度的一張表驻售。
-i Use HEAD instead of GET // 執(zhí)行HEAD請(qǐng)求露久,而不是GET。
-xattributes String to insert as table attributes
-yattributes String to insert as tr attributes
-zattributes String to insert as td or th attributes
-C attribute Add cookie, eg. -C “c1=1234,c2=2,c3=3″ (repeatable) //-C cookie-name=value 對(duì)請(qǐng)求附加一個(gè)Cookie:行芋浮。 其典型形式是name=value的一個(gè)參數(shù)對(duì)抱环。此參數(shù)可以重復(fù),用逗號(hào)分割纸巷。
提示:可以借助session實(shí)現(xiàn)原理傳遞 JSESSIONID參數(shù), 實(shí)現(xiàn)保持會(huì)話的功能眶痰,如-C 'c1=1234,c2=2,c3=3, JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8'瘤旨。
-H attribute Add Arbitrary header line, eg. ‘Accept-Encoding: gzip’ Inserted after all normal header lines. (repeatable)
-Aattribute 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. //-P proxy-auth-username:password 對(duì)一個(gè)中轉(zhuǎn)代理提供BASIC認(rèn)證信任。用戶(hù)名和密碼由一個(gè):隔開(kāi)竖伯,并以base64編碼形式發(fā)送存哲。無(wú)論服務(wù)器是否需要(即, 是否發(fā)送了401認(rèn)證需求代碼)因宇,此字符串都會(huì)被發(fā)送。
-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
-h Display usage information (this message)
//-attributes 設(shè)置屬性的字符串. 缺陷程序中有各種靜態(tài)聲明的固定長(zhǎng)度的緩沖區(qū)祟偷。另外察滑,對(duì)命令行參數(shù)、服務(wù)器的響應(yīng)頭和其他外部輸入的解析也很簡(jiǎn)單修肠,這可能會(huì)有不良后果贺辰。它沒(méi)有完整地實(shí)現(xiàn) HTTP/1.x; 僅接受某些’預(yù)想’的響應(yīng)格式。 strstr(3)的頻繁使用可能會(huì)帶來(lái)性能問(wèn)題嵌施,即你可能是在測(cè)試ab而不是服務(wù)器的性能饲化。
2):返回參數(shù)詳解
Server Software: nginx/1.14.0// nginx 版本 1.14.0
Server Hostname: youxi.test// 服務(wù)器主機(jī)
Server Port: 443//端口號(hào)
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256 //SSL/TLS協(xié)議
TLS Server Name: youxi.test// TLS服務(wù)器名
Document Path: /api/v1/test///文檔地址
Document Length: 30 bytes//文檔長(zhǎng)度
Concurrency Level: 10 //并發(fā)數(shù)
Time taken for tests: 22.428 seconds// 整個(gè)持續(xù)時(shí)間
Complete requests: 100 // 完成請(qǐng)求數(shù)
Failed requests: 74// 失敗請(qǐng)求次數(shù)
(Connect: 0, Receive: 0, Length: 74, Exceptions: 0)
Non-2xx responses: 30
Keep-Alive requests: 0
Total transferred: 258248 bytes //整個(gè)場(chǎng)景中的網(wǎng)絡(luò)傳輸量
HTML transferred: 229838 bytes//整個(gè)場(chǎng)景中的HTML內(nèi)容傳輸量
Requests per second: 4.46 [#/sec] (mean)//相當(dāng)于 LR 中的 每秒事務(wù)數(shù) ,后面括號(hào)中的 mean 表示這是一個(gè)平均值
Time per request: 2242.769 [ms] (mean) //相當(dāng)于 LR 中的 平均事務(wù)響應(yīng)時(shí)間 吗伤,后面括號(hào)中的 mean 表示這是一個(gè)平均值
Time per request: 224.277 [ms] (mean, across all concurrent requests) //每個(gè)請(qǐng)求實(shí)際運(yùn)行時(shí)間的平均值
Transfer rate: 11.24 [Kbytes/sec] received //平均每秒網(wǎng)絡(luò)上的流量吃靠,可以幫助排除是否存在網(wǎng)絡(luò)流量過(guò)大導(dǎo)致響應(yīng)時(shí)間延長(zhǎng)的問(wèn)題

使用例子

1):正常使用
ab -c 10 -n 100 http://a.ilanni.com/index.php
-c10表示并發(fā)用戶(hù)數(shù)為10
-n100表示請(qǐng)求總數(shù)為100
2):post攜帶參數(shù)
abs -n 10 -c 10 -p d:\para.txt -T application/json https://xxx/login
其中 para.txt 中攜帶的是json請(qǐng)求參數(shù) 也有方案說(shuō)要將.txt后綴修改的.json后綴才生效

siege

Siege是一個(gè)壓力測(cè)試和評(píng)測(cè)工具,設(shè)計(jì)用于WEB開(kāi)發(fā)這評(píng)估應(yīng)用在壓力下的承受能力:可以根據(jù)配置對(duì)一個(gè)WEB站點(diǎn)進(jìn)行多用戶(hù)的并發(fā)訪問(wèn)足淆,記錄每個(gè)用戶(hù)所有請(qǐng)求過(guò)程的相應(yīng)時(shí)間巢块,并在一定數(shù)量的并發(fā)訪問(wèn)下重復(fù)進(jìn)行。

安裝

windows平臺(tái)

1)下載:點(diǎn)擊鏈接 下載zip包巧号。
2)解壓:解壓雙層包夕冲,將解壓后的文件配置到c盤(pán)根目錄。(官方推薦是根目錄)裂逐。

解壓后存放目錄

3)環(huán)境變量:將該文件夾放置在系統(tǒng)的環(huán)境變量中歹鱼,即可在全局命令窗口中使用。(詳見(jiàn)系統(tǒng)的環(huán)境變量設(shè)置部分卜高,上面部分操作也有添加環(huán)境變量部分)弥姻。
環(huán)境變量中添加 C:\siege-windows
添加環(huán)境變量

linux

1)安裝openssl:有些請(qǐng)求是https的,為了支持該協(xié)議掺涛,需要額外安裝openssl庭敦。(如沒(méi)有安裝git請(qǐng)安裝或去github手動(dòng)下載將包上傳)

git clone https://github.com/openssl/openssl
cd openssl
./config --prefix=/usr/local/openssl
make
make install
openssl version``

2)安裝siege:和openssl安裝類(lèi)似,都是使用編譯安裝的薪缆。

wget http://download.joedog.org/siege/siege-latest.tar.gz
tar zxvf siege-4.0.5.tar.gz
cd siege-4.0.5
make clean
./configure --prefix=/usr/local/siege --with-ssl=/usr/local/openssl
make 
make install

3)修改配置:使用vi命令修改當(dāng)前~/.siege/siege.conf文件中的limit的值秧廉。

mac

1)brew模式安裝:brew install siege 即可。

說(shuō)明和一般使用

參數(shù)詳解

  • -V, –version : 打印版本號(hào)
  • -h, –help : 打印幫助信息
  • -C, –config : 打印當(dāng)前配置信息
  • -g, –get : 拉去http頭信息
  • -p, –print :打印
  • -c, –concurrent=NUM :并發(fā)用戶(hù)數(shù)量拣帽,默認(rèn)10個(gè)
  • -r, –reps=NUM :運(yùn)行次數(shù)
  • -d, –delay=NUM :隨機(jī)時(shí)間延遲(秒)
  • -b, –benchmark :請(qǐng)求沒(méi)有延遲
  • -i, –internet :模擬網(wǎng)絡(luò)用戶(hù)隨機(jī)點(diǎn)擊url
  • -f, –file=FILE :選擇指定的URL文件
  • -R, –rc=FILE :指定siegerc文件
  • -l, –log[=FILE] :日志文件疼电,默認(rèn)是 PREFIX/var/siege.log
  • -H, –header="text" :給請(qǐng)求添加頭,支持多個(gè)
  • -A, –user-agent=”text” :給請(qǐng)求設(shè)置User-Agent
  • -T, –content-type=”text” :給請(qǐng)求設(shè)置Content-Type

響應(yīng)詳解

  • Transactions : 命中次數(shù)
  • Availability : 命中次數(shù)
  • Elapsed time : 整個(gè)壓測(cè)花費(fèi)的時(shí)間减拭,從第一個(gè)開(kāi)始到最后一個(gè)結(jié)束
  • Data transferred : 整個(gè)壓測(cè)數(shù)據(jù)傳輸?shù)目偤?/li>
  • Response time :響應(yīng)時(shí)間是響應(yīng)每個(gè)模擬用戶(hù)請(qǐng)求所花費(fèi)的平均時(shí)間
  • Transaction rate :事務(wù)速率是服務(wù)器每秒能夠處理的平均事務(wù)數(shù). 簡(jiǎn)而言之:事務(wù)除以經(jīng)過(guò)的時(shí)間蔽豺。
  • Throughput :吞吐量是從服務(wù)器到所有模擬用戶(hù)每秒傳輸?shù)钠骄止?jié)數(shù)
  • Concurrency :并發(fā)是同時(shí)連接的平均數(shù),這是一個(gè)隨服務(wù)器性能下降而上升的數(shù)字
  • Successful transactions :成功事務(wù)次數(shù)
  • Failed transactions :失敗事務(wù)次數(shù)
  • Longest transaction :最長(zhǎng)事務(wù)時(shí)間
  • Shortest transaction :最短事務(wù)時(shí)間
  • Failed transactions :失敗事務(wù)次數(shù)

使用案例

1)基礎(chǔ)引用:使用并發(fā)線程(連接)10測(cè)試基準(zhǔn)http://127.0.0.1拧粪,持續(xù)60秒
siege -c10 -t60s http://127.0.0.1
2)不限制并發(fā):測(cè)試基準(zhǔn)http://127.0.0.1修陡,不限制并發(fā)線程(連接)60秒
siege -b -t60s http://127.0.0.1
3)輸出日志文件:測(cè)試和輸出日志到文件
siege -c10 -t60s http://127.0.0.1 > log.txt

流量壓測(cè)

可以將線上流量拷貝到測(cè)試機(jī)器沧侥,實(shí)時(shí)的模擬線上環(huán)境。在不影響線上用戶(hù)的情況下魄鸦,使用線上流量進(jìn)行測(cè)試宴杀,以盡早發(fā)現(xiàn)bug。也可以通過(guò)放大流量拾因,進(jìn)行壓力測(cè)試旺罢,評(píng)估系統(tǒng)承載能力。
tcpcopy可以從線上服務(wù)器的IP層抓取在線請(qǐng)求的數(shù)據(jù)包盾致,修改相關(guān)屬性主经,利用raw socket output技術(shù)(packet injection 技術(shù)之一)將其發(fā)送給測(cè)試服務(wù)器進(jìn)行測(cè)試。
發(fā)送到測(cè)試服務(wù)器的數(shù)據(jù)包會(huì)在TCP/IP協(xié)議棧被識(shí)別庭惜,其中帶有payload(tcp data)的數(shù)據(jù)包最終進(jìn)入到測(cè)試服務(wù)器的上層應(yīng)用(如nginx)罩驻,上層應(yīng)用在處理完請(qǐng)求之后,將響應(yīng)傳遞給測(cè)試服務(wù)器的TCP/IP協(xié)議棧护赊。

工作原理

底層工作原理

1:一個(gè)訪問(wèn)到達(dá)線上前端機(jī)惠遏;
2:socket數(shù)據(jù)包在ip層被拷貝了一份傳給tcpcopy進(jìn)程;
3:tcpcopy修改包的目的及源地址骏啰,發(fā)給目標(biāo)測(cè)試機(jī)节吮;
4:拷貝的包到達(dá)目標(biāo)測(cè)試機(jī)
5:目標(biāo)測(cè)試機(jī)的nginx處理訪問(wèn),并返回結(jié)果判耕;
6:返回結(jié)果在ip層被截獲透绩、丟棄,由intercpet進(jìn)程拷貝返回結(jié)果的ip header并返回壁熄;
7:ip header被發(fā)送給線上前端機(jī)的tcpcopy進(jìn)程帚豪。

安裝和使用

安裝和使用暫且比較復(fù)雜,且沒(méi)有實(shí)驗(yàn)數(shù)據(jù)草丧。故后續(xù)補(bǔ)全狸臣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市昌执,隨后出現(xiàn)的幾起案子烛亦,更是在濱河造成了極大的恐慌,老刑警劉巖懂拾,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煤禽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡委粉,警方通過(guò)查閱死者的電腦和手機(jī)呜师,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)贾节,“玉大人汁汗,你說(shuō)我怎么就攤上這事±跬浚” “怎么了知牌?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)斤程。 經(jīng)常有香客問(wèn)我角寸,道長(zhǎng),這世上最難降的妖魔是什么忿墅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任扁藕,我火速辦了婚禮,結(jié)果婚禮上疚脐,老公的妹妹穿的比我還像新娘亿柑。我一直安慰自己,他們只是感情好棍弄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布望薄。 她就那樣靜靜地躺著,像睡著了一般呼畸。 火紅的嫁衣襯著肌膚如雪痕支。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,698評(píng)論 1 305
  • 那天蛮原,我揣著相機(jī)與錄音卧须,去河邊找鬼。 笑死儒陨,一個(gè)胖子當(dāng)著我的面吹牛花嘶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播框全,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼察绷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了津辩?” 一聲冷哼從身側(cè)響起拆撼,我...
    開(kāi)封第一講書(shū)人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎喘沿,沒(méi)想到半個(gè)月后闸度,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚜印,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年莺禁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窄赋。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡哟冬,死狀恐怖楼熄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浩峡,我是刑警寧澤可岂,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站翰灾,受9級(jí)特大地震影響缕粹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纸淮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一平斩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咽块,春花似錦绘面、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至峭竣,卻和暖如春塘辅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背皆撩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工扣墩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扛吞。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓呻惕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親滥比。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亚脆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容