什么是wrk?它有什么优劣势?

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

优势:

  1. 是一款轻量级性能测试工具。
  2. 安装简单(相对 Apache ab 来说)。
  3. 学习曲线基本为零,简单了解一下使用参数就可以上手干活了。
  4. 基于系统自带的高性能 I/O 机制,如 epoll, kqueue, 利用异步的事件驱动框架,通过很少的线程就可以压出很大的并发量。

当然劣势也很明显:
wrk 目前仅支持单机压测,后续也不太可能支持多机器对目标机压测,因为它本身的定位,并不是用来取代 JMeter, LoadRunner 等专业的测试工具,wrk 提供的功能,对我们后端开发人员来说,应付日常接口性能验证还是比较友好的。

总的来说,wrk是一个轻量级的性能测试工具,上手简单,非常适合我们开发人员日常开发过程中的压测工作。

安装wrk

首先我们需要从GitHub上将wrk clone到的我们的服务器。

git clone https://github.com/wg/wrk.git wrk

完成后我们进入wrk目录

 cd wrk/

键入mark命令,等待编译工作的完成。

编译完成后,我们将wrk这个文件复制到bin目录下。

cp wrk /usr/local/bin/

自此wrk就安装完成了,我们可以键入下面这套命令查看wrk的版本号来验证wrk是否安装成功。

[root@xxxx wrk]# wrk -v

正常输出wrk信息,就说明我们的安装是成功的。

wrk 4.2.0 [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 detailsNumeric arguments may include a SI unit (1k, 1M, 1G)Time arguments may include a time unit (2s, 2m, 2h)

wrk基础使用

我们先来一个简单的例子,键入下面这条命令使用12线程在30s内请求百度400次。

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

最终输出结果如下,每行输出的含义笔者都已注释:


Running 30s test @ http://www.baidu.com12 threads and 400 connectionsThread Stats   Avg      Stdev     Max   +/- Stdev# 延迟,这里可以理解为响应时间的平均值、标准差、最大值、正负一个标准差所占比,一般我们来说我们主要关注平均值和最大值. 标准差如果太大说明样本本身离散程度比较高. 有可能系统性能波动很大。Latency   155.20ms  284.25ms   1.86s    88.61%# 每秒请求数的平均值、标准差、最大值、正负一个标准差所占比Req/Sec    67.39     59.74   686.00     84.25%Latency Distribution50%   19.57ms75%  241.26ms90%  463.73ms99%    1.57s# 30s进行了20700 次请求,耗费207.18MB流量20700 requests in 30.04s, 207.18MB read# 发生错误次数,一共发生了1237读错误和372个超时Socket errors: connect 0, read 1237, write 0, timeout 372
# 每秒处理请求数,即QPS为689.05
Requests/sec:    689.05
# 平均每秒流量为6.90MB
Transfer/sec:      6.90MB

了解了基础的使用之后,我们再来了解一下wrk的参数,我们不妨键入help命令查看一下:

[root@xxx wrk]# wrk -help
wrk: invalid option -- 'h'
Usage: wrk <options> <url>Options:# -c 和服务器保持连接的数量,例如:-c 1 就代表保持连接的连接数为1-c, --connections <N>  Connections to keep open# -d 持续时间,例如:-d 60s 压测持续时间为60s-d, --duration    <T>  Duration of test# 指定线程数,例如:-t 12 即指定线程数为12-t, --threads     <N>  Number of threads to use# 指定Lua脚本路径 -s, --script      <S>  Load Lua script file# 每一个HTTP请求添加HTTP头-H, --header      <H>  Add header to request# 在压测结束后,打印延迟统计信息--latency          Print latency statistics# 超时时间--timeout     <T>  Socket/request timeout# 在压测结束后-v, --version          Print version details# 上述参数可以指定数字参数和单位,例如国际单位 (1k, 1M, 1G)Numeric arguments may include a SI unit (1k, 1M, 1G)# 代表时间参数,支持时间单位 (2s, 2m, 2h),所以我们压测的-d 60s即压测1分钟Time arguments may include a time unit (2s, 2m, 2h)

使用注意事项

注意wrk压测使用线程数尽量不要设置太大,避免频繁的线程切换测不出比较真实准确的结果,建议压测时设置线程数为CPU核心的2到4倍即可。

例如笔者的服务器为2核,那么我们的线程数设置为8就差不多了,注意一旦线程数设置为8,连接数也必须大于8,否则会报错。

 wrk -t8 -c8 -d10s --latency http://localhost:45678/httpclientnotreuse/right

压测结果如下


Running 10s test @ http://localhost:45678/httpclientnotreuse/right8 threads and 8 connectionsThread Stats   Avg      Stdev     Max   +/- StdevLatency    18.19ms   48.30ms 363.01ms   93.54%Req/Sec   202.74    114.83   620.00     64.38%Latency Distribution50%    4.51ms75%   10.62ms90%   25.50ms99%  277.60ms15235 requests in 10.10s, 1.67MB read
Requests/sec:   1508.74
Transfer/sec:    169.71KB

参考文献

性能测试工具wrk安装与使用

linux系统下安装wrk和使用

性能测试工具 wrk 使用教程

极简的wrk安装和使用教程相关推荐

  1. 无需代码,极简5步大屏可视化教程,3分钟就能轻松做出酷炫报表

    上一期主要讲述了如何巧用工具,无需代码,就能做出EXCEL无法实现的可视化数据联动效果,收到不少私信,想要我专门出一期教程,手把手讲述如何从零开始制定私人化的大屏效果. 其实想要做出一个酷炫的报表真的 ...

  2. linux 极简统计分析工具 datamash 必看教程

    本文转载自"生信菜鸟团",已获授权 引子 之前写 awk 教程的时候,曾经提到过一些对文本中行列进行某些计算统计的需求,例如使用数组分类求和.一些基本需求 awk 都可以实现,但是 ...

  3. Typora颠覆写作体验的极简好用 Markdown 编辑器基本设置教程

    Typora是一款Markdown编辑器. 无论你是建网站写博客.每天写日记.自媒体写稿.办公.程序员写代码文档等等,Typora 都能满足你的要求. Typora基本设置教程 1."通用& ...

  4. 《MongoDB极简教程》第一章 NoSQL简史 amp; MongoDB安装amp;环境配置

    MongoDB 是一款开源的文档数据库,并且是业内领先的 NoSQL 数据库,用 C++ 编写而成. NoSQL (NoSQL = Not Only SQL ),意即"不仅仅是SQL&quo ...

  5. 《MongoDB极简教程》第一章 NoSQL简史 MongoDB安装环境配置

    MongoDB 是一款开源的文档数据库,并且是业内领先的 NoSQL 数据库,用 C++ 编写而成. NoSQL (NoSQL = Not Only SQL ),意即"不仅仅是SQL&quo ...

  6. csvtk:高效命令行版极简dplyr

    写在前面 什么时候写 csvtk 呀,csvtk 也借鉴了些 datamash 的东西. 之前写 datamash 的使用教程 linux 极简统计分析工具 datamash 必看教程,收到了一位读者 ...

  7. CentOS安装使用.netcore极简教程(免费提供学习服务器)

    本文目标是指引从未使用过Linux的.Neter,如何在CentOS7上安装.Net Core环境,以及部署.Net Core应用. 仅针对CentOS,其它Linux系统类似,命令环节稍加调整: 需 ...

  8. 写一个操作系统有多难?自制 os 极简教程

    不知道正在阅读本文的你,是否是因为想自己动手写一个操作系统.我觉得可能每个程序员都有个操作系统梦,或许是想亲自动手写出来一个,或许是想彻底吃透操作系统的知识.不论是为了满足程序员们自带的成就感,还是为 ...

  9. Rust 编程语言极简教程 --- 实例学习

    Rust 编程语言极简教程 --- 实例学习 安装 $ curl https://sh.rustup.rs -sSf | sh info: downloading installerWelcome t ...

最新文章

  1. visual paradigm 表示选择关系_css3选择器用法介绍
  2. 5u fb库 三菱plc_三菱FX5U PLC入门必备基础知识特点
  3. 能力的齿轮每一次卡不上点的时候都是下一个批评的开始
  4. 如何自己编写Makefile
  5. leetcode24. 两两交换链表中的节点
  6. Delphi TScrollBar 用于滚动窗口、组件内容
  7. 在计算机运行时 把程序和数据存放在内存中,单选(2.5分) 在计算机运行时,把程序和数据一样存放在内存中,这是1946年由__________领导的小组正式提出并论证的。‍...
  8. Android微信抢红包服务源码
  9. electron打包iOS,dmg文件
  10. 产品策划流程体系、工具
  11. 语料标注平台BRAT安装说明
  12. AM335x 如何修改phy及双网络使用说明(精华!!!)
  13. C#程序打印AX2012的SSRS
  14. android界面美化教程,android界面UI美化:沉浸模式、全透明或半透明状态栏及导航栏的实现...
  15. 信用风险计量模型汇总
  16. 使用 ChatGPT 启发游戏创意|基于 AI 5 天创建一个农场游戏,第 2 天
  17. 什么是stm32的部分重映像与完全重映像
  18. Concepts:Stateful Stream Processing
  19. 中年技术人,如何对抗内心的焦虑与孤独?
  20. 分享小猪o2o生活通源码v14.0升级v14.17后新版平台提现功能操作说明小程序

热门文章

  1. 诺思格医药通过注册:年营收6亿 实控人武杰为美国籍
  2. Linux内核如何替换内核函数并调用原始函数
  3. c语言数组编程题及解答,C语言数组编程题及解答
  4. JADE学习笔记4:Agent通信
  5. 从iPhone6S发售谈富士康电商富连网
  6. mysql双主是什么意思_mysql基础之mysql双主(主主)架构
  7. Python之Flask框架(一)
  8. 对象 php 输出用字符串连接,在PHP中使用 在使用echo或print输出对象时将对象转化为字符串。_学小易找答案...
  9. linux系统新硬盘格式化,linux系统如何格式化一块硬盘?
  10. 腾讯云:聚焦“双十一”背后 不容忽视的电商风控与安全