HTTP服務(wù)壓力測(cè)試工具及相關(guān)術(shù)語(yǔ)講解
前言
在項(xiàng)目正式上線之前,我們通常需要通過(guò)壓測(cè)來(lái)評(píng)估當(dāng)前系統(tǒng)能夠支撐的請(qǐng)求量、排查可能存在的隱藏bug,同時(shí)了解了程序的實(shí)際處理能力能夠幫我們更好的匹配項(xiàng)目的實(shí)際需求,節(jié)約資源成本。
壓測(cè)相關(guān)術(shù)語(yǔ)
- 響應(yīng)時(shí)間(RT) :指系統(tǒng)對(duì)請(qǐng)求作出響應(yīng)的時(shí)間.
- 吞吐量(Throughput) :指系統(tǒng)在單位時(shí)間內(nèi)處理請(qǐng)求的數(shù)量
- QPS每秒查詢率(Query Per Second) :“每秒查詢率”,是一臺(tái)服務(wù)器每秒能夠響應(yīng)的查詢次數(shù),是對(duì)一個(gè)特定的查詢服務(wù)器在規(guī)定時(shí)間內(nèi)所處理流量多少的衡量標(biāo)準(zhǔn)。
- TPS(TransactionPerSecond):每秒鐘系統(tǒng)能夠處理的交易或事務(wù)的數(shù)量
- 并發(fā)連接數(shù):某個(gè)時(shí)刻服務(wù)器所接受的請(qǐng)求總數(shù)
壓力測(cè)試工具
ab
ab全稱Apache Bench,是Apache自帶的性能測(cè)試工具。使用這個(gè)工具,只須指定同時(shí)連接數(shù)、請(qǐng)求數(shù)以及URL,即可測(cè)試網(wǎng)站或網(wǎng)站程序的性能。
通過(guò)ab發(fā)送請(qǐng)求模擬多個(gè)訪問(wèn)者同時(shí)對(duì)某一URL地址進(jìn)行訪問(wèn),可以得到每秒傳送字節(jié)數(shù)、每秒處理請(qǐng)求數(shù)、每請(qǐng)求處理時(shí)間等統(tǒng)計(jì)數(shù)據(jù)。
命令格式:
ab [options] [http://]hostname[:port]/path
常用參數(shù)如下:
-n requests 總請(qǐng)求數(shù) -c concurrency 一次產(chǎn)生的請(qǐng)求數(shù),可以理解為并發(fā)數(shù) -t timelimit 測(cè)試所進(jìn)行的最大秒數(shù), 可以當(dāng)做請(qǐng)求的超時(shí)時(shí)間 -p postfile 包含了需要POST的數(shù)據(jù)的文件 -T content-type POST數(shù)據(jù)所使用的Content-type頭信息
更多參數(shù)請(qǐng)查看官方文檔。
例如測(cè)試某個(gè)GET請(qǐng)求接口:
ab -n 10000 -c 100 -t 10 "http://127.0.0.1:8080/api/v1/posts?size=10"
測(cè)試POST請(qǐng)求接口:
ab -n 10000 -c 100 -t 10 -p post.json -T "application/json" "http://127.0.0.1:8080/api/v1/post"
wrk
wrk是一款開源的HTTP性能測(cè)試工具,它和上面提到的ab
同屬于HTTP性能測(cè)試工具,它比ab
功能更加強(qiáng)大,可以通過(guò)編寫lua腳本來(lái)支持更加復(fù)雜的測(cè)試場(chǎng)景。
Mac下安裝:
brew install wrk
常用命令參數(shù):
-c --conections:保持的連接數(shù) -d --duration:壓測(cè)持續(xù)時(shí)間(s) -t --threads:使用的線程總數(shù) -s --script:加載lua腳本 -H --header:在請(qǐng)求頭部添加一些參數(shù) --latency 打印詳細(xì)的延遲統(tǒng)計(jì)信息 --timeout 請(qǐng)求的最大超時(shí)時(shí)間(s)
使用示例:
wrk -t8 -c100 -d30s --latency http://127.0.0.1:8080/api/v1/posts?size=10
輸出結(jié)果:
Running 30s test @ http://127.0.0.1:8080/api/v1/posts?size=10 8 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 14.55ms 2.02ms 31.59ms 76.70% Req/Sec 828.16 85.69 0.97k 60.46% Latency Distribution 50% 14.44ms 75% 15.76ms 90% 16.63ms 99% 21.07ms 198091 requests in 30.05s, 29.66MB read Requests/sec: 6592.29 Transfer/sec: 0.99MB
go-wrk
go-wrk是Go語(yǔ)言版本的wrk
,Windows同學(xué)可以使用它來(lái)測(cè)試,使用如下命令來(lái)安裝go-wrk
:
go get github.com/adeven/go-wrk
使用方法同wrk
類似,基本格式如下:
go-wrk [flags] url
常用的參數(shù):
-H="User-Agent: go-wrk 0.1 bechmark\nContent-Type: text/html;": 由'\n'分隔的請(qǐng)求頭 -c=100: 使用的最大連接數(shù) -k=true: 是否禁用keep-alives -i=false: if TLS security checks are disabled -m="GET": HTTP請(qǐng)求方法 -n=1000: 請(qǐng)求總數(shù) -t=1: 使用的線程數(shù) -b="" HTTP請(qǐng)求體 -s="" 如果指定,它將計(jì)算響應(yīng)中包含搜索到的字符串s的頻率
執(zhí)行測(cè)試:
go-wrk -t=8 -c=100 -n=10000 "http://127.0.0.1:8080/api/v1/posts?size=10"
輸出結(jié)果:
==========================BENCHMARK========================== URL: http://127.0.0.1:8080/api/v1/posts?size=10 Used Connections: 100 Used Threads: 8 Total number of calls: 10000 ===========================TIMINGS=========================== Total time passed: 2.74s Avg time per request: 27.11ms Requests per second: 3644.53 Median time per request: 26.88ms 99th percentile time: 39.16ms Slowest time for request: 45.00ms =============================DATA============================= Total response body sizes: 340000 Avg response body per request: 34.00 Byte Transfer rate per second: 123914.11 Byte/s (0.12 MByte/s) ==========================RESPONSES========================== 20X Responses: 10000 (100.00%) 30X Responses: 0 (0.00%) 40X Responses: 0 (0.00%) 50X Responses: 0 (0.00%) Errors: 0 (0.00%)
以上就是HTTP服務(wù)壓力測(cè)試工具及相關(guān)術(shù)語(yǔ)講解的詳細(xì)內(nèi)容,更多關(guān)于HTTP服務(wù)壓力測(cè)試工具的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
go語(yǔ)言發(fā)送smtp郵件的實(shí)現(xiàn)示例
這篇文章主要介紹了go發(fā)送smtp郵件的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Go語(yǔ)言的代碼組織結(jié)構(gòu)詳細(xì)介紹
這篇文章主要介紹了Go語(yǔ)言的代碼碼組織結(jié)構(gòu)詳細(xì)介紹,即Go語(yǔ)言源碼的文件結(jié)構(gòu),本文講解了包、main和main.main、os包等內(nèi)容,需要的朋友可以參考下2014-10-10Go語(yǔ)言對(duì)字符串進(jìn)行MD5加密的方法
這篇文章主要介紹了Go語(yǔ)言對(duì)字符串進(jìn)行MD5加密的方法,實(shí)例分析了Go語(yǔ)言對(duì)字符串進(jìn)行md5加密的技巧,需要的朋友可以參考下2015-03-03golang channel讀取數(shù)據(jù)的幾種情況
本文主要介紹了golang channel讀取數(shù)據(jù)的幾種情況,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02golang 如何實(shí)現(xiàn)HTTP代理和反向代理
這篇文章主要介紹了golang 實(shí)現(xiàn)HTTP代理和反向代理的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05golang語(yǔ)言編碼規(guī)范的實(shí)現(xiàn)
這篇文章主要介紹了golang語(yǔ)言編碼規(guī)范的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03go語(yǔ)言實(shí)現(xiàn)sftp包上傳文件和文件夾到遠(yuǎn)程服務(wù)器操作
這篇文章主要介紹了go語(yǔ)言實(shí)現(xiàn)sftp包上傳文件和文件夾到遠(yuǎn)程服務(wù)器操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12