背景
在開(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)
2):解壓:解壓包后放在系統(tǒng)中自定義位置尚揣。
3):環(huán)境變量:在系統(tǒng)的全局或者某個(gè)用戶(hù)下配置環(huán)境變量。變量名稱(chēng)為
JMETER_HOME
掖举,變量值為D:\soft\jmeter\apache-jmeter-xxx
(步驟2中解壓后的文件目錄快骗,bin
的上一層路徑)。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)。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è)線程組
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ù)用了 ````redis的
ae異步事件驅(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)
-T
content-type Content-type header for POSTing //POST數(shù)據(jù)所使用的Content-type頭信息,如 -T “application/x-www-form-urlencoded” 肉拓。 (配合-p)
-v
verbosity 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。
-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. -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)
-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. //-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
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ǔ)全狸臣。