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 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 reqend

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 wgetsudo 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,欢送分割咱们