日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

4. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2

發(fā)布時(shí)間:2023/12/4 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 前言

上一篇文章我們了解了bombardier,并知道了bombardier.yml與開源項(xiàng)目bombardier的關(guān)系,接下來的文章我們了解一下wrk、wrk2,并對比一下它們與bombardier的關(guān)系

2. 認(rèn)識wrk

wrk是一種現(xiàn)代 HTTP 基準(zhǔn)測試工具,能夠在單個(gè)多核 CPU 上運(yùn)行時(shí)產(chǎn)生大量負(fù)載。它結(jié)合了多線程設(shè)計(jì)和可擴(kuò)展的事件通知系統(tǒng),例如 epoll 和 kqueue。

其支持參數(shù):

-c, --connections: total number of HTTP connections to keep open witheach thread handling N = connections/threads-d, --duration: ? duration of the test, e.g. 2s, 2m, 2h-t, --threads: ? ? total number of threads to use-s, --script: ? ? LuaJIT script, see SCRIPTING-H, --header: ? ? HTTP header to add to request, e.g. "User-Agent: wrk"--latency: ? ? print detailed latency statistics--timeout: ? ? record a timeout if a response is not received withinthis amount of time.

基礎(chǔ)用法:

運(yùn)行了30秒的基準(zhǔn)測試, 使用2個(gè)線程、100個(gè)http連接:

wrk -t2 -c100 -d30s http://127.0.0.1:8080/index.html

進(jìn)階用法:

每次發(fā)送三個(gè)http請求:

wrk -t2 -c100 -d30s --script ./pipeline.lua http://127.0.0.1:8080

新建pipeline.lua

-- example script demonstrating HTTP pipelininginit = function(args)local r = {}r[1] = wrk.format(nil, "/?foo")r[2] = wrk.format(nil, "/?bar")r[3] = wrk.format(nil, "/?baz")req = table.concat(r) endrequest = function()return req end

3. 認(rèn)識wrk2

wrk2是一個(gè)主要基于 wrk 的 HTTP 基準(zhǔn)測試工具。是一個(gè)被 wrk 修改以產(chǎn)生恒定的吞吐量負(fù)載,并將延遲細(xì)節(jié)精確到高 9s(即當(dāng)運(yùn)行足夠長的時(shí)間時(shí)可以產(chǎn)生準(zhǔn)確的 99.9999%'ile)。除了 wrk 的參數(shù)之外,wrk2 通過 --rate 或 -R 參數(shù)(默認(rèn)為 1000)采用吞吐量參數(shù)(每秒總請求數(shù))

除支持wrk的參數(shù)之外,還支持參數(shù):

-R, --rate: 采用吞吐量參數(shù)(每秒總請求數(shù)),默認(rèn)為1000

基礎(chǔ)用法:

運(yùn)行了30秒的基準(zhǔn)測試, 使用2個(gè)線程、100個(gè)http連接、并保持每秒2000個(gè)請求的恒定吞吐量:

wrk -t2 -c100 -d30s -R2000 http://127.0.0.1:8080/index.html

高級用法與wrk一致,此處忽略不寫

我們使用wrk2測試一下百度的壓測情況

安裝:

sudo apt install wget sudo wget https://aspnetbenchmarks.blob.core.windows.net/tools/wrk2

運(yùn)行:

./wrk2 -d 3s -c 200 -t 200 -R 10 -L https://www.baidu.com

輸出了本次請求每秒請求次數(shù)、吞吐量以及詳細(xì)情況:

  • Requests/sec: 每秒請求次數(shù)

  • Transfer/sec: 每秒吞吐量

4. 了解Microsoft.Crank.Jobs.Wrk

在Microsoft.Crank.Jobs.Wrk項(xiàng)目中Program.cs

  • 檢查平臺是否是64位的Linux系統(tǒng)、并檢查參數(shù)是否滿足要求

  • 通過HttpClient發(fā)送請求,并記錄第一次發(fā)送請求所消耗的時(shí)間

  • 下載wrk,并設(shè)置wrk是可執(zhí)行的

  • 通過yml傳遞過來的參數(shù)構(gòu)建完整的wrk命令

  • 將輸出的結(jié)果使用追加到stringBuilder上,再賦值給output,

  • 通過正則匹配結(jié)果,最后通過BenchmarksEventSource存儲并輸出到控制臺或數(shù)據(jù)庫、csv、json中

  • 其中:

    • connections: 每個(gè)線程處理時(shí)保持打開的 HTTP 連接總數(shù) N = 連接數(shù)/線程數(shù)

    • serverUri: 自定義url,如果此參數(shù)存在,則請求地址為: {serverUri}:{serverPort}{path}

    • serverPort: 服務(wù)端口

    • serverScheme: 服務(wù)的Scheme,默認(rèn)http、支持http、https兩種

    • serverAddress: 服務(wù)地址、不包含http、例如: www.baidu.com,如果serverUri存在,此配置無效,如果不存在,請求格式為: {serverScheme}://{serverAddress}:{serverPort}{path}

    • path: 服務(wù)接口地址,不包含域,例如: /api/check/healthy

    • warmup: 預(yù)熱時(shí)間,默認(rèn)15s,與執(zhí)行duration類似,而并非壓測次數(shù)

      • 當(dāng)warmup > 0時(shí),會先預(yù)熱warmup秒后再執(zhí)行一次壓測,第二次的壓測才是最后返回的結(jié)果

      • 當(dāng)warmup = 0時(shí),不進(jìn)行預(yù)熱,直接開始壓測

    • duration: 測試時(shí)長,默認(rèn)15s

    • threads: 線程數(shù)、默認(rèn):32

    • customHeaders: 自定義headers,如果預(yù)設(shè)headers中沒有需要的header,則通過重寫customHeaders,以完成自定義header的目的

    • pipeline: 管道數(shù)量,默認(rèn)為1,當(dāng)大于1時(shí),支持同時(shí)發(fā)送多個(gè)請求

    • script: 如果pipeline不大于1時(shí),支持自定義lua腳本以及l(fā)ua參數(shù){scriptArguments}

    5. 總結(jié)

    優(yōu)勢:

    • 支持lua腳本,支持動態(tài)參數(shù)或者更改請求等復(fù)雜操作

    • 使用C語言開發(fā)、性能高

    劣勢:

    • lua腳本存在學(xué)習(xí)成本

    wrk.yml的存在是為Microsoft.Crank.Jobs.Wrk提供配置參數(shù),Microsoft.Crank.Jobs.Wrk通過調(diào)用開源項(xiàng)目wrk實(shí)現(xiàn)壓測,并將壓測結(jié)果通過BenchmarksEventSource存儲并輸出到控制臺或數(shù)據(jù)庫、csv、json中

    wrk2是基于wrk二次開發(fā),擁有所有wrk的配置,并且支持吞吐量限制,bombardier、wrk、wrk2都是http基準(zhǔn)測試工具,豐富了crank對于Http的基準(zhǔn)測試能力,三者之間并無優(yōu)劣之分,根據(jù)三者之間的優(yōu)劣勢自行選擇適合自己的即可

    源碼地址:https://github.com/doddgu/crank/tree/sample

    開源地址

    MASA.BuildingBlocks:https://github.com/masastack/MASA.BuildingBlocks

    MASA.Contrib:https://github.com/masastack/MASA.Contrib

    MASA.Utils:https://github.com/masastack/MASA.Utils

    MASA.EShop:https://github.com/masalabs/MASA.EShop

    MASA.Blazor:https://github.com/BlazorComponent/MASA.Blazor

    如果你對我們的 MASA Framework 感興趣,無論是代碼貢獻(xiàn)、使用、提 Issue,歡迎聯(lián)系我們

    總結(jié)

    以上是生活随笔為你收集整理的4. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。