基准测试工具:Wrk初识
最近和同事聊起常用的一些压测工具,谈到了Apache ab、阿里云的PTS、Jmeter、Locust以及wrk各自的一些优缺点和适用的场景类型。
这篇博客,简单介绍下HTTP基准测试工具wrk的基本使用方法。。。
一、压测工具对比
| 工具名称 | 类型 | 多协议支持 | 优缺点 | 适用人群&场景 |
| Apache ab | 开源 | HTTP | Apache自带源生测试工具,安装部署简单,不适合多协议及复杂场景 | 开发:单机&单接口性能基准验证 |
| PTS | 商业 | 多协议(支持不太好) | 阿里云配套收费压测工具,支持多协议链路压测,功能完善 | 技术人员:基准&链路&高并发 |
| Jmeter | 开源 | 多协议 | 使用率高&学习成本低,多协议复杂场景支持良好,受限于机制,资源损耗较高 | 技术人员:多场景&万级以下并发全场景 |
| Locust | 开源 | 多协议(需二次开发) | python开源压测框架,支持多协议&复杂场景(需二次开发,定制化) | 技术人员:性能测试&支持程度取决于定制开发 |
| Wrk | 开源 | HTTP | HTTP基准测试工具,高并发低损耗,安装部署简单,不适合多协议及复杂场景 | 开发:单机&单接口性能基准验证 |
二、简介及安装
1、简介
Wrk是一个支持HTTP协议的基准测试工具,结合了多线程设计和可扩展事件通知,底层封装epoll(linux)和kqueue(bsd),能用较少线程生成大量并发请求(使用了操作系统特定的高性能io机制)。
源生支持LuaJIT脚本,可以执行HTTP发起请求、响应处理和自定义测试报告;SCRIPTING有详细说明,并且scripts中提供了几个示例。
GitHub地址:Wrk
2、安装
Point:wrk托管与github,前先安装Git;依赖gcc和OpenSSL(阿里云Centos服务默认已有)库,如下载报错,安装即可!命令如下:
# 下载命令
git clone https://github.com/wg/wrk.git
# 进入wrk文件夹
cd wrk
# 编译
make
编译需要一定时间,耐心等待即可。编译成功后,示例如下:

三、示例demo
1、参数说明
Usage: wrk <options> <url>
Options:
# 脚本开启的HTTP连接数
-c, --connections <N> Connections to keep open
# 测试脚本执行的时长
-d, --duration <T> Duration of test
# 测试脚本使用的线程数
-t, --threads <N> Number of threads to use
# 加载Lua脚本文件
-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
2、示例脚本
[root@localhost wrk]# ./wrk -t4 -c100 -d60s --latency http://www.cnblogs.com/imyalost
Running 1m test @ http://www.cnblogs.com/imyalost
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 196.87ms 318.88ms 1.90s 86.33%
Req/Sec 316.86 220.75 3.19k 75.19%
Latency Distribution
50% 5.73ms
75% 259.62ms
90% 615.77ms
99% 1.47s
73434 requests in 1.00m, 11.06MB read
Socket errors: connect 0, read 2, write 0, timeout 267
Requests/sec: 1222.07
Transfer/sec: 188.51KB
结果解析:
4 threads and 100 connections :4个线程,发起100个http连接请求;
Thread Stats Avg Stdev Max +/- Stdev :测试结果统计(精简版jmeter的聚合报告),分别是:平均值、标准偏差、最大值、偏差比(值越高表示测试结果离散程度越高,性能波动较大);
Latency :响应时间分布(即百分比响应时间范围);
Req/Sec :每秒完成的请求数;
Latency Distribution :如上面的示例结果,分别代表50/75/90/99%的响应时间在多少ms以内;
73434 requests in 1.00m, 11.06MB read :本次测试共计在1min内发起73434个请求,总计读取11.06MB的数据;
Socket errors: connect 0, read 2, write 0, timeout 267 :本次测试中,连接失败0个,读取错误2个,超时267个;
Requests/sec :所有线程平均每秒钟完成1222.07个请求;
Transfer/sec :平均每秒读取188.51KB数据(吞吐量);
3、更多用法
前文提到了wrk支持LuaJIT脚本,可以执行HTTP发起请求、响应处理和自定义测试报告,wrk提供的几个lua函数作用如下:

是不是发现和selenium自动化很像,特别是setup和init函数(手动狗头)。。。
以上就是关于基准测试工具Wrk的简单用法和几种常见的压测工具对比,上面的脚本仅是个demo,具体使用方法请自行实践。。。
其实吧,我觉得这个工具更适合开发童鞋写好一个新的接口后,自己测试一下,这样也不用等出性能问题了才想起来要找性能测试同学压测。。。
基准测试工具:Wrk初识的更多相关文章
- 性能测试工具 wrk 使用教程
文章首发自个人微信公众号:小哈学Java 个人网站地址:https://www.exception.site/wrk 被面试官经常问到之前开发的系统接口 QPS 能达到多少,经常给不出一个数值,支支吾 ...
- Http 压测工具 wrk 基本使用
Http 压测工具 wrk 基本使用 Intro wrk 是一款现代HTTP基准测试工具,能够在单个多核CPU上运行时产生显着负载.它将多线程设计与可扩展事件通知系统(如epoll和kqueue)结合 ...
- 一篇文章看懂TPCx-BB(大数据基准测试工具)源码
TPCx-BB是大数据基准测试工具,它通过模拟零售商的30个应用场景,执行30个查询来衡量基于Hadoop的大数据系统的包括硬件和软件的性能.其中一些场景还用到了机器学习算法(聚类.线性回归等).为了 ...
- 性能测试工具 wrk 安装与使用
介绍 今天给大家介绍一款开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以 ...
- js 性能基准测试工具-告别可能、也许、大概这样更快更省
平时写js经常遇到这样做是不是更快点?但又没有具体简单可测试的工具,最近也倒序看博客园司徒正美 js分类下的文章 [ps:去年灵光一闪,发现看博客园排名前100的博客.按照文章分类倒序看是学习最快的方 ...
- JS-010-覆盖率测试工具 JSCoverage 初识
在日常的 js 脚本语言开发过程中,在开发攻城狮进行日常的单元测试和测试攻城狮日常的测试过程中,js 代码的覆盖率是白盒测试的一个重要的考量标准.前些天,在无意中看到了一个 js 覆盖率测试统计工具 ...
- Http压测工具wrk使用指南【转】
用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...
- 002_性能测试工具wrk安装与使用
介绍 今天给大家介绍一款开源的性能测试工具 wrk,简单易用,没有Load Runner那么复杂,他和 apache benchmark(ab)同属于性能测试工具,但是比 ab 功能更加强大,并且可以 ...
- mysql基准测试工具tpcc-mysql安装、使用、结果解读
TPCC是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统,tpcc-mysql是percona基于TPC-C(下面简写成TPCC)衍生出来的产品,专用于My ...
随机推荐
- 使用vnc远程操控Centos7.6
安装vncserver [root@elegant-snap-3 ~]# yum install tigervnc-server -y Loaded plugins: fastestmirror De ...
- “GIS DICTIONARY A-Z” 查询页面开发(2)——INSERT INTO数据库
今日工作:数据库连接.数据写入 一.数据库连接:使用了pymysql库 from G2_dataClean import defList import pymysql db = pymysql.con ...
- ubuntu 18.04 设置静态ip方法
1. 前言 本教程将会演示如何设置Ubuntu16.04 Server版和Ubuntu18.04 Server版系统的静态固定IP地址. 2. 确认你要修改的网卡号 先确认你要修改的网卡号,假设你的服 ...
- 转:宏定义的极致发挥---让你的普通C++类轻松支持IDispatch自动化接口(二)
Posted on 2011-01-13 20:44 一桶浆糊 这是上一篇博客<宏定义的极致发挥---让你的普通C++类轻松支持IDispatch自动化接口>所展示的示例代码的改进版,改进 ...
- hbase表的高性能设计
第7章 HBase优化 7.1 高可用 在HBase中Hmaster负责监控RegionServer的生命周期,均衡RegionServer的负载,如果Hmaster挂掉了,那么整个HBase集群将陷 ...
- 学习:API断点
API的介绍:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而 ...
- 学习:CC断点
断点介绍: shark恒老师说有四种说法,但是其实都是相同的 第一个读法:普通断点 第二个读法:F2断点 第三个读法:INT3断点( int3其实就是汇编指令 ) 第四个读法:CC断点 (CC其实就是 ...
- iview form表单数值类型校验「iview自定义form表单校验器」
摘录iview表单验证 Form 组件基于 sync-validator 实现的数据验证,给 Form 设置属性 rules,同时给需要验证的 FormItem 设置属性 prop 指向对应字段即可. ...
- LOJ P10022 埃及分数 题解
每日一题 day62 打卡 Analysis 这道题一看感觉很像搜索,但是每次枚举x∈(1,10000000)作为分母显然太蠢了. 所以我们要想办法优化代码. 优化一:迭代加深 优化二: 我们确定了搜 ...
- 【转】C++11新特性——lambda表达式
C++11的一大亮点就是引入了Lambda表达式.利用Lambda表达式,可以方便的定义和创建匿名函数.对于C++这门语言来说来说,“Lambda表达式”或“匿名函数”这些概念听起来好像很深奥,但很多 ...