极简的wrk安装和使用教程

什么是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
# 每秒处理请求数,即QPS689.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 使用教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/229775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【FPGA】电梯楼层显示(简易)

前言 这是作者室友的项目&#xff0c;本来不管作者事儿的&#xff0c;但是后来听到说是室友去网上找人花了80块买了个劣质的&#xff0c;不仅是从CSDN上抄的&#xff0c;而且使用的板子还不符合室友的要求。可叹作者心软啊&#xff0c;顺便给室友做了。 在代码实现部分会给出设…

智能优化算法应用:基于纵横交叉算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于纵横交叉算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于纵横交叉算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.纵横交叉算法4.实验参数设定5.算法结果6.…

人工智能中的核心概念

1 概述 人工智能英文缩写为AI&#xff0c;是一种由人制造出来的机器&#xff0c;该机器可以模仿人的思想和行为&#xff0c;从而体现出一种智能的反应。 人工智能的产业链分为基础层、技术层、应用层三个层次。 基础层包括&#xff1a;芯片、大数据、算法系统、网络等多项基础…

【Gradle】创建第一个项目

文章目录 1. 前提2. 创建项目并初始化1&#xff09;创建项目2&#xff09;初始化项目 3. 介绍生成的文件结构4. 执行5. 包的作成 &#xff08;非必须&#xff09;6. 推送&#xff08;非必须&#xff09; 本节将继 Gradle 之初体验 安装之后&#xff0c;创建第一个 Hello World…

C++计算(a+b)*(c-b)的值 2023年9月c++一级 电子学会中小学生软件编程C++等级考试一级真题答案解析

目录 C计算(ab)*(c-b)的值 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C计算(ab)*(c-b)的值 2023年9月 C编程等级考试一级编程题 一、题目要求 1、编程实现 给定3个整数a、b、c&#xff0c;计算表达…

[Android] ubuntu虚拟机上搭建 Waydroid 环境

1.安装虚拟机 略 2.安装waydroid Ubuntu/Debian and derivatives For Droidian and Ubuntu Touch, skip directly to the last step Install pre-requisites sudo apt install curl ca-certificates -y Add the official repository curl https://repo.waydro.id | sudo…

晚期食管癌肿瘤治疗线程分类

文章目录 1、肿瘤治疗的线数1.1 基础概念1.2 线程定义1.3 如何计算治疗线数 2 食管癌治疗指南2.1 食管癌诊疗指南2.1 CSCO 本文前半部分主要来源于参考文件1&#xff0c;其余部分来源于官方指南。无原创内容&#xff0c;全部为摘要。 1、肿瘤治疗的线数 1.1 基础概念 抗肿瘤药…

3 - Electron BrowserWindow对象 关于窗口

优雅的打开应用~ 当加载缓慢&#xff0c;打开应用的一瞬间会出现白屏&#xff0c;以下方法可以解决 const mainWindow new BrowserWindow({ show: false }) mainWindow.once(ready-to-show, () > {mainWindow.show() }) 设置背景颜色 const win new BrowserWindow({ b…

GZ015 机器人系统集成应用技术样题5-学生赛

2023年全国职业院校技能大赛 高职组“机器人系统集成应用技术”赛项 竞赛任务书&#xff08;学生赛&#xff09; 样题5 选手须知&#xff1a; 本任务书共 24页&#xff0c;如出现任务书缺页、字迹不清等问题&#xff0c;请及时向裁判示意&#xff0c;并进行任务书的更换。参赛队…

剑指 Offer(第2版)面试题 36:二叉搜索树与双向链表

剑指 Offer&#xff08;第2版&#xff09;面试题 36&#xff1a;二叉搜索树与双向链表 剑指 Offer&#xff08;第2版&#xff09;面试题 36&#xff1a;二叉搜索树与双向链表解法1&#xff1a;中序遍历 - 递归解法2&#xff1a;中序遍历 - 迭代 剑指 Offer&#xff08;第2版&am…

信息收集 - 域名

1、Whois查询: Whois 是一个用来查询域名是否已经被注册以及相关详细信息的数据库(如:域名所有人、域名注册商、域名注册日期和过期日期等)。通过访问 Whois 服务器,你可以查询域名的归属者联系方式和注册时间。 你可以在 域名Whois查询 - 站长之家 上进行在线查询。 2、…

【CMU 15-445】Lecture 12: Query Execution I 学习笔记

Query Execution I Processing ModelsIterator ModelMaterialization ModelVectorization Model Access MethodsSequential ScanIndex Scan Modification QueriesHalloween Problem 本节课主要介绍SQL语句执行的相关机制。 Processing Models 首先是处理模型&#xff0c;它定义…

基于JAVA+SpringBoot+Vue的前后端分离的学校请假管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 系统分为四个角色&…

机器学习 | 决策树 Decision Tree

—— 分而治之&#xff0c;逐个击破 把特征空间划分区域 每个区域拟合简单模型 分级分类决策 1、核心思想和原理 举例&#xff1a; 特征选择、节点分类、阈值确定 2、信息嫡 熵本身代表不确定性&#xff0c;是不确定性的一种度量。 熵越大&#xff0c;不确定性越高&#xff0c;…

MIT6.S081-实验准备

实验全程在Vmware虚拟机 (镜像&#xff1a;Ubuntu-20.04-beta-desktop-amd64) 中进行 一、版本控制 1.1 将mit的实验代码克隆到本地 git clone git://g.csail.mit.edu/xv6-labs-2020 1.2 修改本地git配置文件 创建github仓库&#xff0c;记录仓库地址 我的仓库地址就是htt…

C# 基本桌面编程(二)

一、前言 本章为C# 基本桌面编程技术的第二节也是最后一节。前一节在下面这个链接 C# 基本桌面编程&#xff08;一&#xff09;https://blog.csdn.net/qq_71897293/article/details/135024535?spm1001.2014.3001.5502 二、控件布局 1 叠放顺序 在WPF当中布局&#xff0c;通…

饥荒Mod 开发(十):制作一把AOE武器

饥荒Mod 开发(九)&#xff1a;物品栏排列 饥荒Mod 开发(十一)&#xff1a;修改物品堆叠 前面的文章介绍了很多基础知识以及如何制作一个物品&#xff0c;这次制作一把武器&#xff0c;装备之后可以用来攻击怪物。 制作武器贴图和动画 1.1 制作贴图。 先准备一张武器的贴图&a…

解决:AttributeError: module ‘scipy.misc’ has no attribute ‘imsave’

解决&#xff1a;AttributeError: module ‘scipy.misc’ has no attribute ‘imsave’ 文章目录 解决&#xff1a;AttributeError: module scipy.misc has no attribute imsave背景报错问题报错翻译报错位置代码报错原因解决方法方法一 scipy版本回退&#xff08;不推荐&#…

MySQL_13.InonDB表空间

InnoDB 表空间介绍以及管理 1.mysql表空间类型 system tablespace 系统表空间 file-per-table tablespace 独立表空间 temporary tablespace 临时表空间 undo tablespace UNDO表空间 general tablespace…

React中props 和 state异同初探

在 React 中&#xff0c;props 和 state 是两个非常重要的概念&#xff0c;它们决定了组件的行为和渲染方式。 Props props&#xff08;属性&#xff09;是父组件传递给子组件的数据。它们类似于函数的参数&#xff0c;可以在组件内部被访问和使用&#xff0c;但不能被修改。…