4. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2
目录
- 堪比JMeter的.Net压测工具 - Crank 入门篇
- 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml
- 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识bombardier
- 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2
- 堪比JMeter的.Net压测工具 - Crank 实战篇 - 接口以及场景压测
- 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈
- 堪比JMeter的.Net压测工具 - Crank 总结篇 - crank带来了什么
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
- 检查平台是否是64位的Linux系统、并检查参数是否满足要求
- 通过HttpClient发送请求,并记录第一次发送请求所消耗的时间
- 下载wrk,并设置wrk是可执行的
- 通过yml传递过来的参数构建完整的wrk命令
- 将输出的结果使用追加到stringBuilder上,再赋值给output,
- 通过正则匹配结果,最后通过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/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 感兴趣,无论是代码贡献、使用、提 Issue,欢迎联系我们

4. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2的更多相关文章
- 2. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml
目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...
- 3. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识bombardier
目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...
- 1. 堪比JMeter的.Net压测工具 - Crank 入门篇
目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...
- 5. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 接口以及场景压测
目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...
- 6. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈
目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...
- 7. 堪比JMeter的.Net压测工具 - Crank 总结篇 - crank带来了什么
目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...
- 堪比JMeter的.Net压测工具 - Crank 入门篇
1. 前言 Crank 是.NET 团队用来运行基准测试的基准测试基础架构,包括(但不限于)来自TechEmpower Web 框架基准测试的场景,是2021年.NET Conf 大会上介绍的一项新的 ...
- jmeter的dubbo压测,依赖jar包要放到执行机的lib/ext下
对于jmeter的dubbo压测场景的master-slave结构: 即master的jmeter进行任务的下发和报告的生成,slave进行任务的执行 因为dubbo压测需要依赖很多三方jar包,那么 ...
- HTTP 2.0 之压测工具 Jmeter
年后,德国总部工业平台要做中国本地化,德国的同事过来给我们展示日志的时候,无意间看到了他们应用日志里的 HTTP/2,下意识到,原来他们都已经提供Http 2.0的服务了. 那么问题来了,除了h2lo ...
随机推荐
- ApacheCN 所有教程/文档集已备份到 Coding
QuantLearning 数据科学 WIKI 安全 WIKI 团队 WIKI Sklearn 中文文档 PyTorch 中文文档 TutorialsPoint 中文系列教程 Java8 中文官方教程 ...
- Redis集群安装详细步骤
环境: Centos7 redis3.0 三台虚拟机主机名分别为 master node1 node2 如果单机的时候设置过密码最好把密码去掉,避免位置的错误. 拍个快照方便恢复. 1.创 ...
- JVM学习六:堆分析
一.内存溢出(OOM)的原因 在JVM中,有哪些内存区间? 堆溢出 public static void main(String args[]){ ArrayList<byte[]> li ...
- JVM收藏的文章
JAVA 内存泄露详解(原因.例子及解决) https://blog.csdn.net/anxpp/article/details/51325838 JVM内存区域划分Eden Space.Survi ...
- 4G无线全网通太阳能水文设备电源监测系统BMS110
钡铼技术BMS110模块可实现4路电池电压.2路模拟量.2路数字量和1路温度测量,支持Modbus RTU over TCP和MQTT通讯协议,DC9-36V电源供电.BMS110可应用于各种有使用蓄 ...
- Solution -「SDOI 2018」「洛谷 P4606」战略游戏
\(\mathcal{Description}\) Link. 给定一个 \(n\) 个点 \(m\) 条边的无向连通图,\(q\) 次询问,每次给出一个点集 \(s\),求至少在原图中删去多 ...
- Solution -「ARC 101D」「AT4353」Robots and Exits
\(\mathcal{Description}\) Link. 有 \(n\) 个小球,坐标为 \(x_{1..n}\):还有 \(m\) 个洞,坐标为 \(y_{1..m}\),保证上述坐标 ...
- Note -「线性规划」学习笔记
\(\mathcal{Definition}\) 线性规划(Linear Programming, LP)形式上是对如下问题的描述: \[\operatorname{maximize}~~~~z= ...
- Solution -「AGC 016F」Games on DAG
\(\mathcal{Description}\) Link. 给定一个含 \(n\) 个点 \(m\) 条边的 DAG,有两枚初始在 1 号点和 2 号点的棋子.两人博弈,轮流移动其中一枚棋 ...
- MySQL 利用frm文件和ibd文件恢复表结构和表数据
文章目录 frm文件和ibd文件简介 frm文件恢复表结构 ibd文件恢复表数据 通过脚本利用ibd文件恢复数据 通过shell脚本导出mysql所有库的所有表的表结构 frm文件和ibd文件简介 在 ...