关于后端:4-堪比JMeter的Net压测工具-Crank-进阶篇-认识wrkwrk2

55次阅读

共计 3049 个字符,预计需要花费 8 分钟才能阅读完成。

1. 前言

上一篇文章咱们理解了 bombardier,并晓得了 bombardier.yml 与开源我的项目 bombardier 的关系,接下来的文章咱们理解一下 wrk、wrk2,并比照一下它们与 bombardier 的关系

2. 意识 wrk

wrk 是一种古代 HTTP 基准测试工具,可能在单个多核 CPU 上运行时产生大量负载。它联合了多线程设计和可扩大的事件告诉零碎,例如 epoll 和 kqueue。

其反对参数:

-c, --connections: total number of HTTP connections to keep open with
                   each 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 within
                   this amount of time.

根底用法:

运行了 30 秒的基准测试, 应用 2 个线程、100 个 http 连贯:

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

进阶用法:

每次发送三个 http 申请:

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

新建 pipeline.lua

-- example script demonstrating HTTP pipelining

init = 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)
end

request = function()
   return req
end

3. 意识 wrk2

wrk2 是一个次要基于 wrk 的 HTTP 基准测试工具。是一个被 wrk 批改以产生恒定的吞吐量负载,并将提早细节准确到高 9s(即当运行足够长的工夫时能够产生精确的 99.9999%’ile)。除了 wrk 的参数之外,wrk2 通过 –rate 或 -R 参数(默认为 1000)采纳吞吐量参数(每秒总申请数)

除反对 wrk 的参数之外,还反对参数:

-R, --rate: 采纳吞吐量参数(每秒总申请数), 默认为 1000

根底用法:

运行了 30 秒的基准测试, 应用 2 个线程、100 个 http 连贯、并放弃每秒 2000 个申请的恒定吞吐量:

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

运行:

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

输入了本次申请每秒申请次数、吞吐量以及详细情况:

  • Requests/sec: 每秒申请次数
  • Transfer/sec: 每秒吞吐量

4. 理解 Microsoft.Crank.Jobs.Wrk

在 Microsoft.Crank.Jobs.Wrk 我的项目中 Program.cs

  1. 查看平台是否是 64 位的 Linux 零碎、并查看参数是否满足要求
  2. 通过 HttpClient 发送申请,并记录第一次发送申请所耗费的工夫
  3. 下载 wrk,并设置 wrk 是可执行的
  4. 通过 yml 传递过去的参数构建残缺的 wrk 命令
  5. 将输入的后果应用追加到 stringBuilder 上,再赋值给 output,
  6. 通过正则匹配后果,最初通过 BenchmarksEventSource 存储并输入到控制台或数据库、csv、json 中

其中:

  • connections: 每个线程解决时放弃关上的 HTTP 连贯总数 N = 连接数 / 线程数
  • serverUri: 自定义 url,如果此参数存在,则申请地址为: {serverUri}:{serverPort}{path}
  • serverPort: 服务端口
  • serverScheme: 服务的 Scheme,默认 http、反对 http、https 两种
  • serverAddress: 服务地址、不蕴含 http、例如: www.baidu.com,如果 serverUri 存在,此配置有效,如果不存在,申请格局为: {serverScheme}://{serverAddress}:{serverPort}{path}
  • path: 服务接口地址,不蕴含域,例如: /api/check/healthy
  • warmup: 预热工夫,默认 15s,与执行 duration 相似,而并非压测次数

    • 当 warmup > 0 时,会先预热 warmup 秒后再执行一次压测,第二次的压测才是最初返回的后果
    • 当 warmup = 0 时,不进行预热,间接开始压测
  • duration: 测试时长,默认 15s
  • threads: 线程数、默认:32
  • customHeaders: 自定义 headers,如果预设 headers 中没有须要的 header,则通过重写 customHeaders,以实现自定义 header 的目标
  • pipeline: 管道数量,默认为 1,当大于 1 时,反对同时发送多个申请
  • script: 如果 pipeline 不大于 1 时,反对自定义 lua 脚本以及 lua 参数 {scriptArguments}

5. 总结

劣势:

  • 反对 lua 脚本,反对动静参数或者更改申请等简单操作
  • 应用 C 语言开发、性能高

劣势:

  • lua 脚本存在学习老本

wrk.yml 的存在是为 Microsoft.Crank.Jobs.Wrk 提供配置参数,Microsoft.Crank.Jobs.Wrk 通过调用开源我的项目 wrk 实现压测,并将压测后果通过 BenchmarksEventSource 存储并输入到控制台或数据库、csv、json 中

wrk2 是基于 wrk 二次开发,领有所有 wrk 的配置,并且反对吞吐量限度,bombardier、wrk、wrk2 都是 http 基准测试工具,丰盛了 crank 对于 Http 的基准测试能力,三者之间并无优劣之分,依据三者之间的优劣势自行抉择适宜本人的即可

源码地址:https://github.com/doddgu/cra…

开源地址

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

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

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

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

MASA.Blazor:https://github.com/BlazorComp…

如果你对咱们的 MASA Framework 感兴趣,无论是代码奉献、应用、提 Issue,欢送分割咱们

正文完
 0