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

基础用法:

运行了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 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/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相关推荐

  1. 2. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml

    1. 前言 入门篇我们已经成功运行hello.benchmarks.yml并输出测试结果,本篇我们就hello.benchmarks.yml.以及运行的shell脚本详细解读下其中的含义 2. 剖析h ...

  2. 7. 堪比JMeter的.Net压测工具 - Crank 总结篇 - crank带来了什么

    1. 前言 通过上面的学习,我们已经了解清楚crank的职责以及作用,那么我们重新回来思考一下,crank能为我们带来什么? 2. Crank带来了什么? 为分布式压测提供了解决方案.可以模拟更高强度 ...

  3. 6. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈

    1. 前言 上面我们已经做到了接口以及场景压测,通过控制台输出结果,我们只需要将结果收集整理下来,最后汇总到excel上,此次压测报告就可以完成了,但收集报告也挺麻烦的,交给谁呢-- 找了一圈.没找到 ...

  4. 堪比JMeter的.Net压测工具 - Crank 入门篇

    1. 前言 Crank 是.NET 团队用来运行基准测试的基准测试基础架构,包括(但不限于)来自TechEmpower Web 框架基准测试的场景,是2021年.NET Conf 大会上介绍的一项新的 ...

  5. 常用的HTTP服务压测工具

    文章目录 一.压测介绍 1.简介 2.压测相关术语 3.压测常用工具 二.压测工具介绍 1.ab压测 1.1 介绍 1.2 ab压测使用 2.wrk压测 2.1 介绍 2.2 安装 2.3 wrk压测 ...

  6. 简单常用的http压测工具

    在项目正式上线之前,通常需要通过压测来评估当前系统能够支撑的请求量.排查可能存在的隐藏bug. 目录 压测相关术语 压测工具 ab 命令格式 使用 wrk 命令参数 使用 go-wrk 安装 使用 压 ...

  7. jmeter constant timer 如何添加_阿里巴巴在开源压测工具 JMeter 上的实践和优化

    Apache JMeter 是 Apache 旗下的开源压测工具,创建于 1999 年初,迄今已有超过 20 年历史.JMeter 功能丰富,社区(用户群体)庞大,是主流开源压测工具之一. 性能测试通 ...

  8. 云效平台性能测试功能:一个基于Jmeter的性能压测平台

    云效平台性能测试功能(Galaxy)是一个基于Jmeter的性能压测平台,它集脚本.场景.压测.监控和报表展示为一体,是一个能快速.低成本实施压测的平台.降低了入门使用成本,让开发和测试都可以方便的执 ...

  9. Jmeter实现多用户压测

    压测工具:jmeter 脚本录制工具:BlazeMeter 使用jmeter实现多用户压测:比如登录这个功能,在浏览器录制脚本的时候找到登录的接口,如下图所示:在浏览器的开发者工具中找到登录所有的请求 ...

最新文章

  1. etw系统provider事件较多_【Flutter 实战】文件系统目录
  2. AI时代竟有智能化鸿沟,具备哪些条件才能跨过?
  3. 4.1 Qt绘图原理
  4. “晶振”拍了拍你,“你知道我是如何工作的吗?”
  5. ubuntu 14.04 开机进入字符界面
  6. 【免费毕设】ASP.NET通用作业批改系统设计(源代码+lunwen)
  7. android 播放器 下载,VPlayer安卓最新版
  8. 【WinCC V7.5 入门】
  9. 资深程序员推荐七大JavaScript编程工具
  10. Unity 获取直线与平面的交点
  11. Dorado 7 Ajax 交互处理
  12. 不重装系统改硬盘模式: RAID ON 改成 AHCI
  13. CVS投中app数据采集
  14. 泰迪熊Parker、“哈雷熊”,AR技术能否成为实体玩具的救命稻草?
  15. 最优传输论文(十二):Extracting Relationships by Multi-Domain Matching论文原理
  16. BLDC 电机的反电动势电压仿真
  17. 眼动和脑波相关性分析和回归分析
  18. 泛微E9移动平台使用范例,泛微Ecology9移动应用例子
  19. NovaMind教程笔记总结
  20. PixHawk飞控 配置参数

热门文章

  1. HBuilder 打包流程
  2. ASP语言基础之常量的定义方法
  3. python之_init_函数的简介
  4. mysql DDL数据定义语言
  5. [Android] 修改ImageView的图片颜色
  6. 分析windows宿主机Ping不通linux虚拟机的其中一种情况
  7. 转:iOS-CoreLocation:无论你在哪里,我都要找到你!
  8. 在线自动下载最新版本jquery
  9. Html中value和name属性的作用
  10. 学习使用新浪接口随笔(一)