1.简介 wrk 是由 Will Glozer 开发的,并首次发布于 2012 年。 wrk 能够在保持高并发的同时,提供准确和详细的性能测试结果,包括吞吐率、延迟和错误率等。 wrk 非常适合于高负载测试和性能分析。 2.特点 wrk 的设计重点是易用性、效率和灵活性。 3.格式 wrk 的基本命令格式如下: wrk [OPTIONS] URL 其中 URL 是必须指定的,表示你想要测试的 HTTP 服务的网址。 wrk -c100 -t10 -d10s -s test_post.lua --latency http://localhost:5000/test_post Lua 脚本: wrk.method = 参考文献 wg/wrk: Modern HTTP benchmarking tool 不同性能压测工具对比_性能测试(PTS) - 阿里云文档 性能测试工具wrk 使用教程- 犬小哈 wrk 性能测试工具详解
[root@cdntest-wrk-0 ~]# wrk --help Usage: wrk <options> <url> Options: 以上两个特性 wrk 可以支持,而 Jmeter 需安装 GUI,没有 CLI 方便没有详细去了解,选择用 wrk 进行压测。 -wrk.method = "POST" --wrk.headers["Content-Type"] = "application/json" --wrk.body = '{"Urls":"http:/ ,"Action":"Test"}' print(body) --]] --全局参数 wrk.method = "POST" wrk.headers["Content-Type"] = "application ,"Action":"Test"}' --print(body) return wrk.format(nil, nil, nil, body) end
创建web应用docker run --name webserver -d -p 80:80 nginx使用 Wrk 压测常用参数包括:-t,线程数,建议机器核数-d,测试时间,默认单位秒(s),支持 ,比如 1m-c,打开连接数,需要大于 -t 参数数值-s,脚本(lua)文件地址–latency,打印延时统计信息docker run -it --rm --net host williamyeh/wrk \ -d1m -t2 -c10 --latency "http://127.0.0.1:80/"http://chenxiaoyu.org/2018/01/18/wrk-tips/
背景 公司对 http 接口都是直接用 wrk 进行压测,简单快捷 刚好有个压测任务分到我 而且中台跟 Lua 也有关系,刚好 wrk 也支持 Lua 脚本,所以学起来,再用起来 介绍 wrk 是一个类似 在 wrk 里面,每个线程都有自己独立的 Lua 虚拟机和 Event Loop 通过命令行参数 -c 指定的连接数,会平均分给所有线程,每个新建的 socket,都会调用 fcntl 将其设置为 NONBLOCK 实现,适配了不同操作系统的实现 启动的时候,每个线程都会新建一个 Lua State,并调用 luaL_dofile 加载命令行参数 -s 指定的 lua 脚本文件 如果没有自定义的 lua 脚本,wrk 连接数 -d:压测持续运行时间,可以是 2s、2m、2h -t:启动的线程数 -s:指定 lua 脚本 -H:自定义 http header 请求头,例如:"User-Agent: benchmark-wrk wc -l -c 连接数(connection)可以理解为并发数 一般在测试过程中,这个值需要使用者不断向上调试,直至 QPS 达到一个临界点,便可认为此时的并发数为系统所能承受的最大并发量 实际上,wrk
介绍 wrk 是一款简单的 HTTP 压测工具。 GitHub 地址:https://github.com/wg/wrk 安装 git clone https://github.com/wg/wrk.git cd wrk make 编译出的可执行程序 wrk 就在 Makefile 文件所在目录。 简单使用 michaelliu@C02ZRD0ZMD6N ~ % wrk -t4 -c2500 -d20 "https://www.baidu.com" Running 20s test @ https = account_list[math.random(1, 200)] requests = requests + 1 return wrk.format('POST', path
wrk 工具嵌入了 Lua 脚本语言 因此,在自定义压测场景时,可在 wrk 目录下使用 Lua 定制压测场景 Lua 脚本的三个阶段 wrk 支持在三个不同的阶段执行 LuaJIT 脚本 setup: 阶段 官方文档:https://github.com/wg/wrk/blob/master/SCRIPTING POST 请求 前言 之前说过,如果没有自定义的 Lua 脚本,wrk 默认发送的是 HTTP = "POST" wrk.body = "foo=bar&baz=quux" wrk.headers["Content-Type"] = "application/x-www-form-urlencoded " wrk 变量 wrk 是一个内置的全局 table 类型变量,不需要定义可以直接使用 修改 wrk 变量的值,会对所有请求都生效 wrk = { scheme = "http", wrk.connect(addr) 测试指定的服务器地址是否能正常连接 如果地址可以连接到 wrk.connect,则返回true,否则返回false 地址必须是从 wrk.lookup() 返回的地址
比较了ab和jemeter以及wrk。最终选择wrk来作为压力测试工具,可以把cpu压到100%。 官方源码: https://github.com/wg/wrk 安装 git clone https://github.com/wg/wrk make -- 拷贝wrk到bin cp wrk /usr wrk -t100 -c1000 -d30s --latency "http://192.168.58.57:9111/api/v1/location/point? thePointNum=3&lonLat=117.269552,26.299981" 使用方法: wrk <选项> <被测HTTP服务的URL> wrk -t100 -c1000 -d30s -s req.lua --latency "http://192.168.58.57:9111" req.lua request = function()
Linux压测神奇wrk介绍简介《wrk官方介绍》:wrk 是一种现代 HTTP 基准测试工具,能够在单个多核 CPU 上运行时产生大量负载。 wrk 定位轻量级性能测试工具仅支持 HTTP 协议仅支持单机压测,多机器压测需要每个机器都手动执行一次 wrk 命令不可取代 Jmeter、LR 等专业性能工具基础用法wrk --help[windealli wrk的脚本能力可以归纳为以下几部分:定义了全局的talbe:wrk提供了少量(三个)实现特定功能的API:wrk.format(),wrk.lookup(),wrk.connect约定了一些函数接口给用户实现 , 对应POSIX的 getaddrinfo() 函数function wrk.lookup(host, service)function wrk.connect(addr)-- wrk.connect function wrk.connect(addr)wrk 脚本运行的三个阶段wrk支持在下面三个阶段运行luaJIT脚本setup: 启动阶段,(目的IP已解析,执行测试的线程已经初始化,但还未开始执行
依赖lua脚本,wrk也可以完成复杂http请求的压测,接下来跟我一起了解下wrk的具体使用吧。 wrk 。 当然lua脚本也不是随便写了就能用的,需要按wrk的规范去写wrk才能正常调用。 ,基本上最长改动的就是wrk.header, wrk.path, wrk.body。 , wrk.path, wrk.headers, wrk.body)) --wrk.thread:stop() end done = function(summary, latency, requests
最近和同事聊起常用的一些压测工具,谈到了Apache ab、阿里云的PTS、Jmeter、Locust以及wrk各自的一些优缺点和适用的场景类型。 这篇文章,简单介绍下HTTP基准测试工具wrk的基本使用方法。。。 GitHub地址:https://github.com/wg/wrk 2、安装 Point:wrk托管与github,前先安装Git;依赖gcc和OpenSSL(阿里云Centos服务默认已有)库,如下载报错 命令如下: # 下载命令 git clone https://github.com/wg/wrk.git # 进入wrk文件夹 cd wrk # 编译 make 编译需要一定时间,耐心等待即可。 支持LuaJIT脚本,可以执行HTTP发起请求、响应处理和自定义测试报告,wrk提供的几个lua函数作用如下: ?
下载地址:https://github.com/wg/wrk压力测试:wrk -t 25 -c40 -d 300s -R50000 --latency "http://10.188.139.234:9200 线程-c 连接数-d 启动多长时间-R 启动多少qps压测--latency 延时压测分布情况--http --script 指定脚本more query.luawrk.method="POST"wrk.body wrk.headers["Content-Type"]="application/json"
常见的性能测试工具有JMeter、LoadRunner等,本文将介绍另一款性能测试工具 - wrk,能够通过很少的线程压出很大的并发HTTP请求,进行服务器性能测试。 2、简介 wrk为C语言编写的轻量级HTTP性能测试工具,可以在单核CPU上运行时能够产生显著的负载,它将多线程设计与可扩展的事件通知系统(如epoll和kqueue)相结合。 cd wrk make 二、Mac上安装 brew install wrk 4、快速上手 输入wrk,查看帮助信息。 wrk -t12 -c400 -d5s https://www.httpbin.org/ 测试结果: 平均响应时间364.15ms 2、Post示例: wrk只能直接使用get、delete请求,post wrk.method = "POST" wrk.body = "username=admin&password=123456" wrk.headers["Content-Type"] = "application
请求的生成、响应处理、自定义报告 …… 使用示例 安装 wrk 可以工作在 Linux 或 Mac 项目地址: https://github.com/wg/wrk 下载后进入项目目录,执行: make 编译完成后,在当前目录中生成一个 wrk 可执行文件 运行 执行测试命令: . = "POST" wrk.body = "foo=bar&baz=quux" wrk.headers["Content-Type"] = "application/x-www-form-urlencoded " 执行 wrk 命令时使用 -s参数来加载脚本 . /wrk -t12 -c100 -d10s --script=post.lua http://www.baidu.com wrk 提供的几个hook函数: setup 所有 thread 生成之后,在被被调用前
什么是wrk2 wrk2是一个主要基于wrk的HTTP基准测试工具,与 apache bench(以下简称 ab)类似,都是单机上的压测工具,其使用多线程设计来进行请求的生成。 相比 ab,wrk 最值得称道的应该是它的自定义脚本功能:wrk 支持使用 lua 脚本来进行 HTTP 请求生成、响应处理以及自定义压测报告等。 master.zip 3、 进入目录并编译安装 cd wrk2-master make 4、 查看编译后的目录结果,看到新生成的wrk文件,即代表安装成功 图片 5、 将wrk文件移动到Linux /root/wrk2-master/deps/luajit/src' CC src/wrk.c In file included from src/wrk.c:3:0: src/wrk.h:11:25: 命令如下: yum install openssl-devel wrk2命令参数概览 执行wrk --help命令,出现如下的提示 [root@VM-100-38-centos wrk2-master]
虽然 wrk 没有测试案例,并且作者大概一年现身一次来合并代码,但这些并不妨碍我们把 wrk 作为性能测试和 fuzz 测试的首选工具。如果你还在使用多线程的 ab,那么非常值得尝试下 wrk。 我们在使用 wrk 压力测试自己产品的时候,发现 wrk 统计的延时结果中,大部分请求都是几毫秒内完成,但有一小部分请求的延时会超过 100 毫秒。 但同时也对 wrk 的结果是否正确产生了怀疑。 我们调转方向,先来定位到底是 wrk 统计错了,还是确实是 server 的问题。 我们在 wrk 所在的服务器上,把压测期间的包都 dump 出来,按照耗时进行排序,惊奇的发现结果和 wrk 的延时统计大相径庭,没有发现超过 100 毫秒的请求。重复了几次以上测试,结果都一致。 但 wrk 作者特意加上肯定是有原因的,不明白这个原因始终是个隐患。
如何用wrk进行压测? Github地址:https://github.com/wg/wrk,该项目也是开源项目,关注的人还不少,有30.4K。咨询了一下身边的同事,使用它的人还不少。 wrk到bin cp wrk /usr/sbin/wrk 压测脚本 压测脚本press.sh #! /report_mock.${1}.txt done sleep 10 done Lua脚本post_512.lua wrk.method = "POST" wrk.body = '{ "key":"value"}' wrk.headers["Content-Type"] = "application/json" wrk.headers["X-Forwarded-For"] = "6.6.6.6 因为相对比wrk来的简单。 最后可以点击运行来跑单测,一般我们会调整线程数的大小、发送的频率来进行压测看结果。
wsl_update_x64.msi 进行安装即可 完成后打开命令行,输入:docker --version 然后执行第一个hello world程序:docker run hello-world 2、试用wrk main:app', host="0.0.0.0", port=8000, reload=True, debug=True) docker pull williamyeh/wrk docker run -it --rm williamyeh/wrk -t100 -c1000 -d100s "http://192.168.188.1:8000/get_ner_simple? 3xx responses: 739 Requests/sec: 18.05 Transfer/sec: 7.18KB docker run -it --rm williamyeh/wrk
【前言】 笔者使用wrk,是为了测试nginx转发报文的时候set_proxy_header规则,然后发现wrk尤其的好用,所以在这里写下来,以后用的时候还能查一查。 •从github上下载源码 git clone https://github.com/wg/wrk •然后cd到wrk目录,进行安装 make 可能有一些包没有,导致git,make命令不能顺利执行 【基本参数】 以下是使用wrk查看到的一些基本参数信息 -c --connections N 跟服务器建立并保持的TCP连接数量 -d --duration 【输出内容】 wrk -c 20 -t 2 -d 10s -H "host: dream.com" http:http://10.XX.XX.XX:80/manage Latency 延迟时间 Req --latency --timeout 1s post.txt wrk.method = "POST" wrk.body = "x=1&y=2" wrk.headers["Content-Type"
Linux(CentOS & Ubuntu等)上安装wrk wrk使用以及参数介绍 wrk压测结果详解 2、本篇环境信息 工具/环境 版本 wrk 4.x Windows 11 macOS 14.1.2 brew install wrk 1.3、安装验证 wrk -v 2、在Linux上安装wrk 2.1、在CentOS上安装wrk # CentOS 安装依赖 sudo yum install -y ) git clone https://github.com/wg/wrk.git cd wrk && make # 将编译后的wrk文件复制到系统bin目录 sudo cp wrk /usr/local /bin 2.2、在Ubuntu / Debian上安装wrk sudo apt-get install -y wrk 2.3、安装验证 wrk -v 3、在Windows上安装wrk 3.1、安装WSL # 进入Ubuntu子系统 wsl -d Ubuntu # 安装wrk sudo apt-get install -y wrk 3.3、安装验证 wrk -v 三、wrk压测 1、准备测试服务 #
wrk GitHub 源码:https://github.com/wg/wrk 安装 wrk只能运行于 Unix 类的系统上,也只能在这些系统上便宜,所以我们需要一个Linux或者macOs 2、安装完成之后使用 git 下载 wrk 的源码到本地: https://github.com/wg/wrk.git 3、切换到git的wrk目录,然后使用make命令: cd /mnt /盘符/wrk目录 make 编译完成之后,目录下面会多一个 wrk 的文件。 /wrk -c 1 -t 1 -d 1 http://www.baidu.com 简单说一下wrk里面各个参数什么意思? 1.-t 需要模拟的线程数 2. 所以网络通信不会阻塞线程执行,这也是 wrk 可以用很少的线程模拟大量网路连接的原因。