欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

HTTP基準(zhǔn)壓測(cè)工具wrk使用指南

  發(fā)布時(shí)間:2022-02-21 15:29:26   作者:kl   我要評(píng)論
這篇文章主要為大家介紹了HTTP基準(zhǔn)壓測(cè)工具wrk的使用指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

wrk是一個(gè)開(kāi)源的、熱門(mén)的、現(xiàn)代的單機(jī)HTTP基準(zhǔn)測(cè)試工具,目前在github開(kāi)源平臺(tái)累計(jì)了26.9k的star數(shù)目,足以可見(jiàn)wrk在Http基準(zhǔn)測(cè)試領(lǐng)域的熱門(mén)程度。它結(jié)合了多線程設(shè)計(jì)和可擴(kuò)展的事件通知系統(tǒng),如epoll和kqueue,可以在有限的資源下并發(fā)出極致的的負(fù)載請(qǐng)求。并且內(nèi)置了一個(gè)可選的LuaJIT腳本執(zhí)行引擎,可以處理復(fù)雜的HTTP請(qǐng)求生成、響應(yīng)處理以及自定義壓測(cè)報(bào)告。
wrk項(xiàng)目地址:https://github.com/wg/wrk

安裝wrk

mac下安裝:

brew install wrk

其他平臺(tái)參考:https://github.com/wg/wrk

基礎(chǔ)使用

wrk -t12 -c100 -d30s --latency http://localhost:8010/healthz

如上指令描述了采用12個(gè)線程,100個(gè)鏈接,針對(duì)http://localhost:8010/healthz 接口服務(wù),持續(xù)壓測(cè)30s。wrk本身不是依賴線程數(shù)來(lái)模擬并發(fā)數(shù)的所以線程數(shù)量設(shè)置在核心數(shù)左右最好,線程數(shù)多了測(cè)試系統(tǒng)消耗大,可能帶來(lái)反效果。親測(cè)核心數(shù)一致的線程數(shù)和兩倍核心數(shù)的線程數(shù),前者壓出的QPS更高。壓測(cè)結(jié)果如下:

Running 30s test @ http://localhost:8010/healthz (運(yùn)行30s測(cè)試)
  12 threads and 100 connections(12個(gè)線程100個(gè)連接)
    Thread Stats        Avg(均值)      Stdev(標(biāo)準(zhǔn)差值)     Max(最大值)   +/- Stdev(正負(fù)標(biāo)準(zhǔn)差值)
    Latency(延遲)         1.39ms        668.10us           23.95ms       90.34%
    Req/Sec(每秒請(qǐng)求數(shù))    5.44k          545.23             10.27k        76.47%
  Latency Distribution(延遲直方圖)
     50%    1.32ms (50%請(qǐng)求延遲在1.32ms內(nèi))
     75%    1.49ms (75%請(qǐng)求延遲在1.49ms內(nèi))
     90%    1.72ms (90%請(qǐng)求延遲在1.72ms內(nèi))
     99%    4.77ms (99%請(qǐng)求延遲在4.77ms內(nèi))
  1952790 requests in 30.08s, 271.90MB read (共1952790次請(qǐng)求,用時(shí)30s,傳輸了271.9M數(shù)據(jù))
Requests/sec(每秒請(qǐng)求數(shù)):  64930.12
Transfer/sec(每秒傳輸數(shù)據(jù)):      9.04MB

wrk的結(jié)果相比ab測(cè)試結(jié)果來(lái)說(shuō),多了一個(gè)延時(shí)直方圖,有了這個(gè)直方圖,我們可以更清晰的看到延遲的分布情況。這也是博主選擇wrk最重要的原因

常用指令說(shuō)明

    -c, --connections: 要保持打開(kāi)的HTTP連接的總數(shù),每個(gè)線程處理數(shù)N =連接/線程
    -d, --duration:    測(cè)試持續(xù)時(shí)間, 如 2s, 2m, 2h
    -t, --threads:     測(cè)試線程總數(shù)
    -s, --script:      指定加載lua測(cè)試擴(kuò)展腳本
    -H, --header:      添加請(qǐng)求頭信息, 如"User-Agent: wrk"
        --latency:     打印延遲直方圖信息
        --timeout:     如果在此時(shí)間內(nèi)沒(méi)有收到響應(yīng),則記錄超時(shí).
-開(kāi)頭的指令為簡(jiǎn)寫(xiě)的,后面兩個(gè)打印延遲直方圖和超時(shí)設(shè)置沒(méi)有簡(jiǎn)寫(xiě)的,只能--開(kāi)頭指定

高階用法,lua測(cè)試腳本

wrk內(nèi)置了全局變量,全局方法,以及五個(gè)測(cè)試請(qǐng)求發(fā)起流程的方法,還有一個(gè)模擬延遲發(fā)送的方法,wrk是內(nèi)置對(duì)象,在lua測(cè)試腳本的每個(gè)方法內(nèi)都可以直接使用

全局變量

-- 全局的變量
wrk = {
  scheme  = "http",
  host    = "localhost",
  port    = nil,
  method  = "GET",
  path    = "/",
  headers = {},
  body    = nil,
  thread  = userdata,
}

全局方法

-- 返回請(qǐng)求字符串值,其中包含所傳遞的參數(shù)和來(lái)自wrk表的值。例如:返回 http://www.kailing.pub
function wrk.format(method, path, headers, body);
-- 獲取域名的IP和端口,返回table,例如:返回 `{127.0.0.1:80}`
function wrk.lookup(host, service)
-- 判斷addr是否能連接,例如:`127.0.0.1:80`,返回 true 或 false
function wrk.connect(addr)

請(qǐng)求過(guò)程方法

-- 請(qǐng)求前,對(duì)每個(gè)線程調(diào)用一次,并接收表示該線程的userdata對(duì)象。
function setup(thread)
    thread.addr = "http://www.kailing.pub"        -- 設(shè)置請(qǐng)求的地址
    thread:get("name")        -- 獲取全局變量的值
    thread:set("name", "kl") -- 在線程的環(huán)境中設(shè)置全局變量的值
    thread:stop()           -- 停止線程
end
--初始化,每個(gè)線程執(zhí)行一次
function init(args) --args為從命令行傳過(guò)來(lái)的額外參數(shù)
    print(args)
end
--發(fā)起請(qǐng)求,每次請(qǐng)求執(zhí)行一次,返回包含HTTP請(qǐng)求的字符串。每次構(gòu)建新請(qǐng)求的開(kāi)銷都很大,在測(cè)試高性能服務(wù)器時(shí),
--一種解決方案是在init()中預(yù)先生成所有請(qǐng)求,并在request()中進(jìn)行快速查找。
function request()
    requests = requests + 1
    return wrk.request()
end
--響應(yīng)處理,每次請(qǐng)求執(zhí)行一次
function response(status, headers, body)
    responses = responses + 1
end
--請(qǐng)求完成,每次測(cè)試執(zhí)行一次。done()函數(shù)接收一個(gè)包含結(jié)果數(shù)據(jù)的表和兩個(gè)統(tǒng)計(jì)數(shù)據(jù)對(duì)象,分別表示每個(gè)請(qǐng)求延遲和每個(gè)線程請(qǐng)求速率。
--持續(xù)時(shí)間和延遲是微秒值,速率是以每秒請(qǐng)求數(shù)來(lái)度量的。
function done(summary, latency, requests)
    for index, thread in ipairs(threads) do
        local id = thread:get("id")
        local requests = thread:get("requests")
        local responses = thread:get("responses")
        local msg = "thread %d made %d requests and got %d responses"
        print(msg:format(id, requests, responses))
    end
end

整個(gè)腳本處理過(guò)程被分為準(zhǔn)備階段、運(yùn)行階段、完成階段。準(zhǔn)備階段在目標(biāo)IP地址被解析并且所有線程都已經(jīng)初始化但還沒(méi)有啟動(dòng)之后開(kāi)始。運(yùn)行階段從對(duì)init()的單個(gè)調(diào)用開(kāi)始,然后對(duì)每個(gè)請(qǐng)求周期調(diào)用request()和response()。init()函數(shù)接收腳本的任何額外命令行參數(shù),這些參數(shù)必須用“——”與wrk參數(shù)分隔開(kāi)。

lua測(cè)試腳本案例分析

案例:我們線上有一個(gè)帶緩存場(chǎng)景的接口服務(wù),根據(jù)appId的值的查詢結(jié)果緩存,所以,如果單純對(duì)指定的appId壓測(cè),就變成了測(cè)試緩存系統(tǒng)的負(fù)載了,測(cè)試不出實(shí)際的服務(wù)性能,這個(gè)場(chǎng)景就需要測(cè)試工具發(fā)起每次請(qǐng)求的測(cè)試參數(shù)都是動(dòng)態(tài)的。根據(jù)這個(gè)場(chǎng)景我們定制了如下的lua測(cè)試腳本:

-- 測(cè)試指令:wrk -t16 -c100 -d5s -sreview_digress_list.lua --latency htt://127.0.0.1:8081
wrk.method ="GET"
wrk.path = "/app/{appId}/review_digress_list"

function request()
    -- 動(dòng)態(tài)生成每個(gè)請(qǐng)求的url
    local requestPath = string.gsub(wrk.path,"{appId}",math.random(1,10))
    -- 返回請(qǐng)求的完整字符串:http://127.0.0.1//app/666/review_digress_list
    return wrk.format(nil, requestPath)
end

以上就是HTTP基準(zhǔn)壓測(cè)工具wrk使用指南的詳細(xì)內(nèi)容,更多關(guān)于HTTP壓測(cè)工具wrk使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決https網(wǎng)頁(yè)加載http資源報(bào)錯(cuò)問(wèn)題

    這篇文章介紹了解決https網(wǎng)頁(yè)加載http資源報(bào)錯(cuò)的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-12
  • HTTPS協(xié)議數(shù)據(jù)加密傳輸基本內(nèi)容解析

    很多網(wǎng)友了解過(guò)有關(guān)于網(wǎng)絡(luò)協(xié)議部分的內(nèi)容,HTTPS協(xié)議還是一知半解的,下面這邊文章就為大家簡(jiǎn)單介紹下HTTPS協(xié)議的基本內(nèi)容,大家了解下,希望對(duì)大家有幫助
    2017-03-21
  • HTTP 協(xié)議詳解(圖文介紹)

    協(xié)議是指計(jì)算機(jī)通信網(wǎng)絡(luò)中兩臺(tái)計(jì)算機(jī)之間進(jìn)行通信所必須共同遵守的規(guī)定或規(guī)則,超文本傳輸協(xié)議(HTTP)是一種通信協(xié)議,它允許將超文本標(biāo)記語(yǔ)言(HTML)文檔從Web服務(wù)器傳送到
    2015-11-06
  • 如何屏蔽https網(wǎng)站、禁止訪問(wèn)https、禁止跳轉(zhuǎn)https的方法

    由于網(wǎng)絡(luò)安全形勢(shì)越發(fā)嚴(yán)峻,為了保護(hù)用戶隱私和網(wǎng)絡(luò)安全,越來(lái)越多的網(wǎng)站都開(kāi)啟了HTTPS,如何禁止訪問(wèn)HTTPS網(wǎng)站、如何屏蔽HTTPS網(wǎng)站就成為重要的網(wǎng)絡(luò)管理工作,下面就來(lái)看
    2017-03-29
  • 流媒體協(xié)議RTSP、HTTP、HTTPS、SDP四種區(qū)別解析

    流媒體在Android中有nuplayer來(lái)實(shí)現(xiàn)的,下面先來(lái)講流媒體傳輸協(xié)議,了解了基本協(xié)議,本文主要講解RTSP,HTTP,HTTPS, SDP四種協(xié)議,一起來(lái)看看了解下,僅供參考
    2017-03-15
  • 逐步解讀HTTP報(bào)文的組成及含義

    報(bào)文是HTTP協(xié)議下請(qǐng)求和響應(yīng)的信息基礎(chǔ),這里就帶大家來(lái)逐步解讀HTTP報(bào)文的組成及含義,需要的朋友可以參考下
    2016-06-16

最新評(píng)論