wrk 是一款针对 Http 协议的基准测试工具,它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产生大量的负载。

wrk优缺点

优点:

● 轻量级性能测试工具;

● 安装简单(相对 Apache ab 来说);

● 学习曲线基本为零,几分钟就能学会咋用了;

● 基于系统自带的高性能 I/O 机制,如 epoll, kqueue, 利用异步的事件驱动框架,通过很少的线程就可以压出很大的并发量;

缺点:

● wrk 目前仅支持单机压测,后续也不太可能支持多机器对目标机压测,因为它本身的定位,并不是用来取代 JMeter, LoadRunner 等专业的测试工具。

安装方式

Ubuntu/Debian

sudo apt install build-essential libssl-dev git -y
git clone https://github.com/wg/wrk.git wrk & cd wrk & make # 将可执行文件移动到 /usr/local/bin 位置
sudo cp wrk /usr/local/bin

Mac OS

Mac 系统也可以通过先编译的方式来安装,但是更推荐使用 brew 的方式来安装

brew install rk

检验是否安装成功

wrk -v

输出如下:

root@ubuntu1804:~# wrk -v
wrk 4.1.0-8-ga211dd5 [epoll] Copyright (C) 2012 Will Glozer
Usage: wrk <options> <url>
Options:
-c, --connections <N> Connections to keep open
-d, --duration <T> Duration of test
-t, --threads <N> Number of threads to use -s, --script <S> Load Lua script file
-H, --header <H> Add header to request
--latency Print latency statistics
--timeout <T> Socket/request timeout
-v, --version Print version details Numeric arguments may include a SI unit (1k, 1M, 1G)
Time arguments may include a time unit (2s, 2m, 2h)

使用

简单使用

wrk -t12 -c400 -d30s http://www.baidu.com

命令的意思:向 url www.baidu.com 发起压力测试,线程数为 12,总共发送400 个并发请求,持续 30 秒

参数解释

参数简写           单位         功能

-c, --connections <N>  跟服务器建立并保持的TCP连接数量  

-d, --duration    <T>  压测时间           

-t, --threads     <N>  使用多少个线程进行压测   

-s, --script      <S>  指定Lua脚本路径       

-H, --header      <H>  为每一个HTTP请求添加HTTP头
--latency 在压测结束后,打印延迟统计信息
--timeout <T> 超时时间 -v, --version 打印正在使用的wrk的详细版本信息 <N>代表数字参数,支持国际单位 (1k, 1M, 1G)
<T>代表时间参数,支持时间单位 (2s, 2m, 2h)

测试结果

wrk -t12 -c400 -d30s --latency http://www.baidu.com

执行上面的压测命令,30 秒压测过后,生成如下压测报告:

Running 30s test @ http://www.baidu.com (压测时间30s)
12 threads and 400 connections (共12个测试线程,400个连接) Thread Stats Avg(平均值) Stdev(标准差) Max(最大值) +/- Stdev(正负标准差所占比例)
Latency(延迟) 386.32ms 380.75ms 2.00s 86.66%
Req/Sec(每秒请求数) 17.06 13.91 252.00 87.89% Latency Distribution (延迟分布)
50% 218.31ms
75% 520.60ms
90% 955.08ms
99% 1.93s 4922 requests in 30.06s, 73.86MB read (30.06s内处理了4922个请求,耗费流量73.86MB) Socket errors: connect 0, read 0, write 0, timeout 311 (发生错误数) Requests/sec: 163.76 (QPS 163.76,即平均每秒处理请求数为163.76)
Transfer/sec: 2.46MB (平均每秒流量2.46MB)

标准差解释:标准差如果太大说明样本本身离散程度比较高,有可能系统性能波动较大,请求延时分布不均匀,有可能是服务器不稳定。

实际场景使用

wrk的复杂测试场景需要编写lua脚本。如POST请求,设置请求头部信息等。

设置cookie

编写 demo.lua 脚本

请求方式:GET

请求头部信息:Content-Type 和 cookie。将用户的认证信息auth_token放在cookie中。

wrk.method = "GET"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"
wrk.headers["cookie"] = "auth_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NDY5MjA2MzQsImV4cCI6MTYzODc3MzQ3OSwiZXhwX3YyIjoxNjM4NzczNDc5LCJkZXZpY2UiOiIiLCJ1c2VybmFtZSI6IndlY2hhdF8zM2g0b3ZuNCIsImlzX3N0YWZmIjoxLCJzZXNzaW9uX2lkIjoiOGY4ZjJiNGE0ZTg0MTFlYzlhZWIxYTYxOGMyYjRlY2EifQ.CrcSmVmJd6TDypsuA43RUxzURaaNgzZKA5pF0K-FMH4"

执行wrk压测命令

wrk -t2 -c10 -d5 --script=demo.lua --latency https://apiv3.shanbay.com/teacher/trial_plan/user_plan/activate

返回结果

Running 5s test @ https://apiv3.shanbay.com/teacher/trial_plan/user_plan/activate
2 threads and 10 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 247.31ms 88.99ms 519.78ms 72.53%
Req/Sec 20.82 10.50 50.00 58.90%
Latency Distribution
50% 229.55ms
75% 301.28ms
90% 359.52ms
99% 515.54ms
182 requests in 5.07s, 37.12KB read
Requests/sec: 35.88
Transfer/sec: 7.32KB

post请求

wrk.method = "GET"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"
wrk.headers["cookie"] = "xxxxx"
wrk.body = "youbody&youset"

压测工具 wrk的更多相关文章

  1. Http压测工具wrk使用指南【转】

    用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...

  2. Http 压测工具 wrk 基本使用

    Http 压测工具 wrk 基本使用 Intro wrk 是一款现代HTTP基准测试工具,能够在单个多核CPU上运行时产生显着负载.它将多线程设计与可扩展事件通知系统(如epoll和kqueue)结合 ...

  3. Http压测工具wrk使用指南

    用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...

  4. http压测工具wrk使用

    安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持LuaJIT和OpenSSL,不过不用担心,大多数类Unix系统都支持.安装wrk非常简单,只要从github上下载wrk源 ...

  5. nginx压测工具--wrk

    基本使用 命令行敲下wrk,可以看到使用帮助 Usage: wrk <options> <url> Options: -c, --connections <N> C ...

  6. http压测工具wrk

    安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持LuaJIT和OpenSSL,不过不用担心,大多数类Unix系统都支持.安装wrk非常简单,只要从github上下载wrk源 ...

  7. HTTP 压测工具wrk简介

    前段时间项目压测,看到开发命令行下使用这个命令进行压测非常简洁.方便,萌发了学习的兴趣,这里仅做简单介绍. 安装 wrk支持大多数UNIX系统,不支持Windows.需要操作系统支持LuaJIT和Op ...

  8. 压测工具wrk的编译安装与基础使用

    Linux上编译安装: [root@centos ~]# cd /usr/local/src [root@centos ~]# yum install git -y [root@centos ~]# ...

  9. 接口压测工具WRK的学习与使用

    之前一直在使用jmeter,第一次接触wrk,记录下使用过程以便自己再次使用. 首先,WRK是linux系统上才可以使用的工具,我也不想剑走偏锋的去研究如何让wrk可以在windows系统上使用. 临 ...

  10. wrk压测工具使用

    介绍分为四部分 1.wrk简述 2.wrk安装 3.wrk运行参数 4.wrk高级用法 1.wrk简述 当使用ab做压测的时候发现,ab的客户端消耗很大,而且测试时性能较差,测试redis,sprin ...

随机推荐

  1. UVA529 加成序列

    传送门 题目分析 一道 dfs,迭代加深 我们可以很快的猜出来最终 \(m\) 的长度必然是小于 \(10\) 的. 而这种浅深度的问题正好适用于迭代加深. 之后考虑剪枝 优化搜索顺序 : 我们要让序 ...

  2. Windows 搭建 Flutter 开发环境

    安装 去官网地址下载 Flutter SDK. 下载地址:https://flutter.dev/docs/development/tools/sdk/releases 将安装包解压到你想安装 Flu ...

  3. 终端必备大杀器----Fish

    目录 下载 安装 添加 权限 依赖库安装 cmake 预处理 编译 安装 配置fish 其他 下载 Github 地址-- fish-shell openSUSE 开源下载地址 openSUSE 开源 ...

  4. 请查收,本周刷屏的两大热点「GitHub 热点速览」

    如果你逛 HackerNews 或者是推特,你一定会被 multipleWindow3dScene 这个跨窗口渲染项目的成果刷屏,毕竟国内的技术平台上也出现了不少的模仿项目.另外一个热点,便是你在白板 ...

  5. 本地训练,立等可取,30秒音频素材复刻霉霉讲中文音色基于Bert-VITS2V2.0.2

    之前我们使用Bert-VITS2V2.0.2版本对现有的原神数据集进行了本地训练,但如果克隆对象脱离了原神角色,我们就需要自己构建数据集了,事实上,深度学习模型的性能和泛化能力都依托于所使用的数据集的 ...

  6. [AI]大模型稳定角色扮演形成“自我认知”

    引言 自我身份认知是人类重要的认知能力之一,它决定着个体在社会中的定位以及与他人的互动方式.了解自我身份认知形成的机理对心理学和认知科学研究具有重要意义.传统上,人类自我认知一直被视为一个个体内在形成 ...

  7. C++ Qt开发:如何使用信号与槽

    在Qt中,信号与槽(Signal and Slot)是一种用于对象之间通信的机制.是Qt框架引以为傲的一项机制,它带来了许多优势,使得Qt成为一个强大且灵活的开发框架之一.信号与槽的关联通过QObje ...

  8. 通过shell定时去创建数据月份表

    对于大数据的采集推送,有时为了方便会将一张大表的数据按照月份分别存储,尤其是在与流水表相关的业务情况,因此需要定时按照月份去创建表. 我有问过是否可以通过数据库的存储过程和事件触发器实现,得到的回答是 ...

  9. [THUPC2022 决赛] rsraogps

    [THUPC2022 决赛] rsraogps 题目描述 给序列 \(a_1,\dots,a_n\),\(b_1,\dots,b_n\),\(c_1,\dots,c_n\), 定义区间 \([l,r] ...

  10. 从源码分析 MySQL 身份验证插件的实现细节

    最近在分析ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)这个报错的常见原因. 在 ...