目录

  1. 堪比JMeter的.Net压测工具 - Crank 入门篇
  2. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml
  3. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识bombardier
  4. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识wrk、wrk2
  5. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 接口以及场景压测
  6. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈
  7. 堪比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

  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

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

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

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

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

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

  4. 5. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 接口以及场景压测

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

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

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

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

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

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

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

  8. jmeter的dubbo压测,依赖jar包要放到执行机的lib/ext下

    对于jmeter的dubbo压测场景的master-slave结构: 即master的jmeter进行任务的下发和报告的生成,slave进行任务的执行 因为dubbo压测需要依赖很多三方jar包,那么 ...

  9. HTTP 2.0 之压测工具 Jmeter

    年后,德国总部工业平台要做中国本地化,德国的同事过来给我们展示日志的时候,无意间看到了他们应用日志里的 HTTP/2,下意识到,原来他们都已经提供Http 2.0的服务了. 那么问题来了,除了h2lo ...

随机推荐

  1. c#开方,平方,sin函数计算

    平方运算 private double m; private double n=Math.Pow(m,2.0); 开平方运算 System.Math.Sqrt(数字); double保留两位小数 Ma ...

  2. webpack引入css文件

    需要配置 postcss  详见 官网 https://www.postcss.com.cn/

  3. express源码分析之Router

    express作为nodejs平台下非常流行的web框架,相信大家都对其已经很熟悉了,对于express的使用这里不再多说,如有需要可以移步到www.expressjs.com自行查看express的 ...

  4. Tomcat服务部署及优化

    Tomcat 服务部署及优化 1.Tomcat简介 2.Tomcat 服务安装及部署 3.Tomcat虚拟主机配置 4.Tomcat 优化 1.Tomcat简介: 概述: Tomcat是Java语言开 ...

  5. Linux常用命令精华讲解 上部 (下部下回分解)不要催很忙的

    Linux常用命令讲解 1.Linux命令基础 2.Linux命令帮助 3.目录与文件的基操 1.Shell是系统中运行的一种特殊程序在用户和内核之间充当"翻译官"的角色,登录li ...

  6. 一款免费在线转pdf的工具 和 window免费镜像

    PDF爱好者的在线工具 完全免费的PDF文件在线管理工具,其功能包括:合并PDF文件.拆分PDF文件.压缩PDF文件.Office文件转换为PDF文件.PDF文件转换为JPG图片.JPG图片转换为PD ...

  7. PL/SQL批量执行SQL脚本文件

    1.选择File > New > Command Windows(命令窗口) 2.输入 @ 符号,之后敲击回车键.从本地选择执行的 SQL脚本 等待批量命令全部执行成功,关闭页面即可 新增 ...

  8. kube-scheduler源码分析(1)-初始化与启动分析

    kube-scheduler源码分析(1)-初始化与启动分析 kube-scheduler简介 kube-scheduler组件是kubernetes中的核心组件之一,主要负责pod资源对象的调度工作 ...

  9. Python基础—编码(Day2)

    一.字符编码 1.ASCII码:包含英文.数字.特殊字符,8位=1字节byte =1个字符,如: 0010 1010 ASCII码表里的字符总共有256个,前128个为常用的字符如运算符,后128个称 ...

  10. Zabbix 6.0:原生高可用(HA)方案部署

    Blog:博客园 个人 本部署文档适用于CentOS 8.X/RHEL 8.X/Anolis OS 8.X/AlmaLinux 8.X/Rockey Linux 8.X. 原生的HA方案终于来了 相比 ...