Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
社区首页 >专栏 >WRK:一个可编程的HTTP性能测试工具

WRK:一个可编程的HTTP性能测试工具

作者头像
LA0WAN9
发布于 2021-12-14 00:54:12
发布于 2021-12-14 00:54:12
59800
代码可运行
举报
文章被收录于专栏:火丁笔记火丁笔记
运行总次数:0
代码可运行

同 ab 这种单线程 HTTP 性能测试工具相比,wrk 是一个足够现代化的 HTTP 性能测试工具,最重要的特性是:它是可编程的,借助内嵌 lua,我们可以控制测试的全过程。

关于 wrk 中 lua 扩展的数据结构,可以参考官方源代码中的 wrk.lua 文件:

代码语言:javascript
代码运行次数:0
复制
local wrk = {
   scheme  = "http",
   host    = "localhost",
   port    = nil,
   method  = "GET",
   path    = "/",
   headers = {},
   body    = nil,
   thread  = nil,
}

此外,还有一些钩子方法可供使用:

  • setup(thread):启动阶段执行,每个线程调用一次
  • init(args):运行阶段执行,每个线程调用一次
  • delay(),运行阶段执行,每个请求调用一次
  • request(),运行阶段执行,每个请求调用一次
  • response(status, headers, body),运行阶段执行,每个请求调用一次
  • done(summary, latency, requests),结束阶段执行,整个过程调用一次

多数情况下,我们只要关注 request 钩子方法即可,通过它我们可以自定义请求的各个参数,如果想要了解更多的用法,可以参考官方源代码的 scripts 目录。

让我们动手实战一下,假设一个网站,主要的请求有三种,分别是:

  • /a:GET 请求,占比 20%
  • /b:GET 请求,占比 30%
  • /c:POST 请求,占比 50%

结合前面提到的 wrk 中 lua 扩展的相关知识,我们可以实现如下代码:

代码语言:javascript
代码运行次数:0
复制
-- benchmark.lua

math.randomseed(os.time())

local config = {
    {num=20, path="/a"},
    {num=30, method="get", path="/b"},
    {num=50, method="post", path="/c", body="foo=x&bar=y"},
}

local requests = {}

for i, request in ipairs(config) do
    if request.method then
        request.method = string.upper(request.method)
    end

    for _ = 1, request.num do
        requests[#requests + 1] = i
    end
end

local length = #requests

for _ = 1, length do
    local m, n = math.random(length), math.random(length)
    requests[m], requests[n] = requests[n], requests[m]
end

local count = 0

function request()
    local i = (count % length) + 1
    local request = config[requests[i]]
    count = count + 1

    return wrk.format(
        request.method,
        request.path,
        request.headers,
        request.body
    )
end

代码逻辑很简单,无非就是根据配置信息生成一个大数组,然后把数据随机化一下,每个请求来的时候,根据计数器直接给一条数据即可。

我在我的笔记本上以此脚本为例实际跑了一个 100 并发的例子,这里有个题外话需要提一下,很多人做 benchmark 只关注 rps,却忽略了 latency,这是不严谨的,设想一个网站的 rps 数据很好,但是总有一定百分比的请求出现高 latency,依然是有问题的:

代码语言:javascript
代码运行次数:0
复制
shell> wrk -c 100 -s ./benchmark.lua http://localhost

Running 10s test @ http://localhost
  2 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency     4.26ms    1.04ms  23.95ms   94.87%
    Req/Sec    11.85k   662.52    13.08k    67.50%
  235787 requests in 10.00s, 71.95MB read
  Non-2xx or 3xx responses: 0
Requests/sec: 23573.71
Transfer/sec: 7.19MB

在测试的时候我顺手用 ngrep 监控了一下请求:

ngrep -W byline ” ‘dst port 80’

如图可见,wrk 随机发送了不同的请求,完美!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
性能测试工具——wrk
wrk 是一款简单的 HTTP 压测工具。最大的优点就是能使用很少的线程压出很大的并发量,原因是它使用了一些操作系统特定的高性能 IO 机制,比如 select,epoll 等,其实它是复用了 Redis 的 ae 异步事件。
ppxai
2020/09/23
2.3K0
高级性能测试系列《31.性能测试工具:wrk》
「loadrunner」:商业版loadrunner, 要付费购买并发用户数,脚本是c语言,性能比较好,性能指标值比较准确,性能测试的标杆软件。
清菡
2022/12/02
9390
高级性能测试系列《31.性能测试工具:wrk》
HTTP基准压测工具wrk使用指南
wrk是一个开源的、热门的、现代的单机HTTP基准测试工具,目前在github开源平台累计了26.9k的star数目,足以可见wrk在Http基准测试领域的热门程度。它结合了多线程设计和可扩展的事件通知系统,如epoll和kqueue,可以在有限的资源下并发出极致的的负载请求。并且内置了一个可选的LuaJIT脚本执行引擎,可以处理复杂的HTTP请求生成、响应处理以及自定义压测报告。
kl博主
2023/11/18
6930
Linux压测神奇wrk介绍
Linux压测神奇wrk介绍简介《wrk官方介绍》:wrk 是一种现代 HTTP 基准测试工具,能够在单个多核 CPU 上运行时产生大量负载。它将多线程设计与可扩展的事件通知系统(如 epoll 和 kqueue)相结合。可选的 LuaJIT 脚本可以执行 HTTP 请求生成、响应处理和自定义报告。详细信息可在 SCRIPTING 中找到,几个示例位于 scripts/ 中。wrk 定位轻量级性能测试工具仅支持 HTTP 协议仅支持单机压测,多机器压测需要每个机器都手动执行一次 wrk 命令不可取代 Jme
windealli
2023/03/20
1.9K0
Linux压测神奇wrk介绍
Web服务压测神器wrk
wrk是一款开源的高性能http压测工具(也支持https),非常小巧,可以执行文件只有3M(其中主要是luajit和openssl占用绝大多数空间),别看核心代码3-5年没更新了,但依旧非常好用。虽然很早之前我就知道有这么个工具了,当时学习这个工具的时候我还拿它压测了我们的个人网站xindoo.me,发现mysql性能不行后加了wp-cache,通过cache把我网站的承载能力提升了10多倍。但当时之前简单使用它的初级功能,最近工作中恰好有个http服务需要压测,然后就拿wrk做了。这次使用了wrk lua高级功能实现了压测,我们找到了我们服务的瓶颈,同时也被wrk的超高性能所震惊。
xindoo
2021/01/21
3.1K0
性能测试工具 wrk 安装与使用
  今天给大家介绍一款开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以支持lua脚本来创建复杂的测试场景。
顾翔
2019/12/11
1.5K0
性能测试工具 wrk 安装与使用
如何在Ubuntu 14.04上使用wrk对HTTP延迟进行基准测试
本文重点介绍称为开源HTTP基准测试工具WRK,它可以在高负荷下测量HTTP服务的延迟。
黑色技术
2018/09/25
2.4K0
wrk(2)- Lua 脚本的使用
官方文档:https://github.com/wg/wrk/blob/master/SCRIPTING
小菠萝测试笔记
2021/06/17
2.6K0
wrk(2)- Lua 脚本的使用
使用ab和wrk对腾讯CLS进行benchmark测试
使用ab和wrk对腾讯云日志服务CLS进行压力测试,以此为例对ab和wrk进行说明
职场亮哥
2020/10/10
8450
高级技巧:利用Lua编写安全场景的测试数据生成工具
在上述架构中,交换机通过流量镜像的方式,将用户与应用服务器之间的流量“复制”给流量采集/分析服务器。流量服务器上部署的采集探针负责协议数据包的重组,以及一部分流量分析工作,比如判断数据包是否触发某些规则。此时,需要对流量采集探针进行两方面的测试工作:
小阑本阑
2023/08/11
4620
高级技巧:利用Lua编写安全场景的测试数据生成工具
HTTP 压力测试工具 wrk
简介 wrk 是一个HTTP压力测试工具,根据官方的介绍,他有2个明显的特点: 集成了多线程设计与事件通知系统(如 epoll、kqueue)提升并发量 可以通过编写 Lua 脚本来进行扩展,例如 HTTP请求的生成、响应处理、自定义报告 …… 使用示例 安装 wrk 可以工作在 Linux 或 Mac 项目地址: https://github.com/wg/wrk 下载后进入项目目录,执行: make 编译完成后,在当前目录中生成一个 wrk 可执行文件 运行 执行测试命令: ./wrk -t12 -
dys
2018/04/04
4.6K0
HTTP 压力测试工具 wrk
系统性能测试工具
描述:Stress/Stress-NG是Linux下两个常用的系统级压力测试工具,stress命令简单易用stress-ng是stress的升级版,支持数百个参数定制各种压CPU、内存、IO、网络的姿势。在系统过载的场景下,应用服务可能会出现意想不到的错误或异常,在测试负载均衡和熔断降级时非常有用。 这里只列举了几个常用的命令,详细使用参考”stress-ng –help”或”man stress-ng”。另外这些"烤机"命令来测试服务器性能也是不错的。
全栈工程师修炼指南
2022/09/29
4.3K0
系统性能测试工具
常用性能测试工具汇总
UDP 模式 (默认tcp模式) 服务器端 iperf -u -s 客户端 iperf -u -c 192.168.1.1 -b 100M -t 60 在udp模式下,以100Mbps为数据发送速率,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。 iperf -u -c 192.168.1.1 -b 5M -P 30 -t 60 客户端同时向服务器端发起30个连接线程,以5Mbps为数据发送速率。 iperf -u -c 192.168.1.1 -b 100M -d -t 60 以100M为数据发送速率,进行上下行带宽测试。
以谁为师
2019/05/28
1.7K1
基准测试工具:Wrk初识
最近和同事聊起常用的一些压测工具,谈到了Apache ab、阿里云的PTS、Jmeter、Locust以及wrk各自的一些优缺点和适用的场景类型。这篇文章,简单介绍下HTTP基准测试工具wrk的基本使用方法。。。
老_张
2019/12/02
8850
wrk|小而强的性能测试工具
Nginx的最大连接数算法:worker_processes * worker_connections = 16,384
Python研究所
2022/06/17
6430
wrk|小而强的性能测试工具
常用的HTTP服务压测工具介绍
在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资源成本。
luckpunk
2023/09/10
9920
如何利用wrk与Jmeter做性能压测?
我们在新做项目的时候,需要对我们的服务有一些性能指标,比如:SLA(需要达到多少个9)、QPS、TPS等。因为这些量化的数字让我们更加了解我们的系统。
chengcheng222e
2021/11/03
1.1K0
如何利用wrk与Jmeter做性能压测?
wrk 压测
通过解读 ab 和 wrk 关键参数可知: 1.ab 不支持从文件或使用编码,动态修改 POST 或 url 信息; 2.通过 google 了解到 ab 不支持多线程。 以上两个特性 wrk 可以支持,而 Jmeter 需安装 GUI,没有 CLI 方便没有详细去了解,选择用 wrk 进行压测。
lukachen
2023/10/22
2620
使用 Go 对 Nginx 进行性能测试
目前有很多提供Go语言HTTP应用服务的方法,但其中最好的选择取决于每个应用的实际情况。目前,Nginx看起来是每个新项目的标准Web服务器,即使在有其他许多不错Web服务器的情况下。然而,在Nginx上提供Go应用服务的开销是多少呢?我们需要一些nginx的特性参数(vhosts,负载均衡,缓存,等等)或者直接使用Go提供服务?如果你需要nginx,最快的连接机制是什么?这就是在这我试图回答的问题。该基准测试的目的不是要验证Go比nginx的快或慢。那将会很愚蠢。
星哥玩云
2022/06/28
8120
使用wrk进行压力测试
最近需要对新的服务进行压力测试。比较了ab和jemeter以及wrk。最终选择wrk来作为压力测试工具,可以把cpu压到100%。
Ryan-Miao
2019/01/02
2K0
相关推荐
性能测试工具——wrk
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验