轻量级性能测试工具 wrk 如何使用?

项目设计之初或者是项目快要结束的时候,大佬就会问我们,这个服务性能测试的结果是什么,QPS 可以达到多少,RPS 又能达到多少?接口性能可以满足未来生产环境的实际情况吗?有没有自己测试过自己接口的吞吐量,等等。
作为开发、测试人员,这些问题不仅仅是用来面试,还是实实在在的落地在实际工作中。很多项目上线初期用户量较小,表面上看是风平浪静,实则暗流涌动,慢慢的用户量上来之后,系统的瓶颈慢慢凸显。曾经挖的坑,最后还是要我们自己来填,若不能及时填上,可能整个产品就这么断送了。
今天一起来看看轻量级的性能测试工具 wrk 如何使用:
性能测试相关名词
QPS每秒查询率 (Query Per Second):每秒查询率 QPS 是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
并发用户数:指系统可以同时承载的正常使用系统功能的用户的数量。
吞吐量 (Throughput):吞吐量是指系统在单位时间内处理请求的数量。
响应时间 (RT):指系统对请求作出响应的时间。
wrk 是什么?
wrk 是 github 的一个项目,地址:https://github.com/wg/wrk

根据官方的说明,wrk 是一个HTTP基准测试工具,当运行在单个多核CPU上时,它能够产生巨大的负载。它结合了多线程设计和可伸缩的事件通知系统,如 epoll 和 kqueue 等等。
wrk 中的一个可选的 LuaJIT 脚本可以执行 HTTP 请求生成、响应处理和自定义报告。
wrk 如何使用?
那么 wrk 如何使用呢,我们就来实操一下看看效果 , 既然是开源工具,下载安装编译的方式都很类似:
1、下载 wrk 项目
git clone https://github.com/wg/wrk.git wrk
2、编译项目
cd wrk
make
3、将编译出来的 wrk 可执行程序放到用户自己的 bin 目录下
cp wrk /usr/local/sbin/
4、这个时候,我们就可以开始使用 wrk 工具了
咱们直接执行 wrk 来看看效果:
# wrk
Usage: wrk Options:-c, --connections Connections to keep open // 和服务器建立连接并保持的 TCP 连接数量 -d, --duration Duration of test // 具体的压测时间-t, --threads Number of threads to use // 使用的线程数量-s, --script Load Lua script file // 加载 lua 文件-H, --header Add header to request // 添加请求头--latency Print latency statistics // 打印延迟统计数据--timeout 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)
上面的: N 表示数字参数,可以是 1k, 1M, 1G ;T 表示时间参数,可以是 2s, 2m, 2h
尝试使用 wrk 工具
我们使用 wrk 同样的参数来性能测试一下 掘金 和 百度的地址
200个链接,8个线程,测试 40 s
先测试掘金的:
# wrk -c200 -t8 -d40 --latency https://juejin.cn/
Running 40s test @ https://juejin.cn/8 threads and 200 connectionsThread Stats Avg Stdev Max +/- StdevLatency 1.53s 481.41ms 2.00s 87.68%Req/Sec 10.27 7.50 70.00 73.61%Latency Distribution50% 1.67s75% 1.85s90% 1.95s99% 2.00s2406 requests in 40.05s, 476.65MB readSocket errors: connect 0, read 0, write 0, timeout 1797
Requests/sec: 60.08
Transfer/sec: 11.90MB
再测试百度的:
# wrk -c200 -t8 -d40 --latency https://www.baidu.com
Running 40s test @ https://www.baidu.com8 threads and 200 connectionsThread Stats Avg Stdev Max +/- StdevLatency 284.06ms 332.08ms 2.00s 86.02%Req/Sec 96.41 36.69 538.00 79.63%Latency Distribution50% 120.17ms75% 357.11ms90% 730.79ms99% 1.56s31088 requests in 40.07s, 466.95MB readSocket errors: connect 0, read 138, write 0, timeout 264
Requests/sec: 775.87
Transfer/sec: 11.65MB
解释上面测试报告相关字段的含义:
- Latency 延迟
- Avg 平均值
- Stdev 标准差
- +/- Stdev 标准差占比
- Requests/sec 平均每秒处理的请求数,通常说的 qps 这里可以看出 掘金是 60.08 , 百度是 775.87 ,差别还是有的。
实践完毕之后,我们来捋一捋 wrk 的优势和劣势
优势:
- wrk 是轻量级性能测试工具,用起来非常方便,且安装也很简单,学习成本低;
- 根据官方介绍,我们知道 wrk 基于系统自带的高性能 I/O 机制,如 epoll, kqueue这些机制是利用异步的事件驱动框架 多路 IO 复用来提高并发性能的。
劣势:
- 仅支持单机压测,如果需要测试多台机器,wrk 就不合适了。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
相关文章:
轻量级性能测试工具 wrk 如何使用?
项目设计之初或者是项目快要结束的时候,大佬就会问我们,这个服务性能测试的结果是什么,QPS 可以达到多少,RPS 又能达到多少?接口性能可以满足未来生产环境的实际情况吗?有没有自己测试过自己接口的吞吐量&a…...
WebGL 视图矩阵、模型视图矩阵
目录 立方体由三角形构成 视点和视线 视点、观察目标点和上方向 视点: 观察目标点: 上方向: 在WebGL中,观察者的默认状态应该是这样的: 视图矩阵程序(LookAtTriangles.js) 实际上&…...
Python 3 – 文件 readline() 方法
Python 3 – 文件 readline() 方法|极客笔记 # 打开文件 file open("example.txt", "r")# 读取文件中的一行数据 line file.readline() while line:# 移除行尾的换行符print(line.strip())# 读取文件中的下一行数据line file.readline()# 关闭文件 file…...
如何在微软Edge浏览器上一键观看高清视频?
编者按:视频是当下最流行的媒体形式之一。但由于视频压缩、网络不稳定等原因,我们常常可以看到互联网上的很多视频其画面质量并不理想,尤其是在浏览器端,这极大地影响了观看体验。不过,近期微软 Edge 浏览器推出了一项…...
Telegram BoT的主流项目盘点
目录 DeFi 类 数据分析类 空投埋伏交易 其他 Telegram Bot赛道的发展趋势预测 Telegram BoT赛道发展较快,具体来看可以分为DeFi 类、数据分析类、空投埋伏交易类以及其他。 DeFi 类 Unibot(交易)、Banana Gun、WagieBot(交…...
PTA 甲级 1044 Shopping in Mars
题目链接 思路:前缀和滑动窗口 #include<bits/stdc.h> #define MAXN 100010 using namespace std; int a[MAXN];int main(){int n,m;cin>>n>>m;//n数量 m金额for(int i1;i<n;i){int t;cin>>t;a[i]a[i-1]t;//前缀和}vector<pair<in…...
Linux学习之MyCat实现分库分表
环境准备 先准备一套MySQL主从服务器,可参考MySQL主从配置配置MyCat服务 资源下载 网盘链接: https://pan.baidu.com/s/1cLTMH_e1-6loc_gF9ZNHTg?pwda63n 提取码: a63n MyCat配置 # 1)安装mycat软件 //安装jdk [rootmycat58 upload]# yum -y insta…...
DirectX12(d3d12)初始化
一、前置要求 Windows 10及以上(安装有DirectX12)VisualStudio 2022 二、DirectX12入门 1.引用头文件 #include<Windows.h> #include<d3d12.h> #include<dxgi1_4.h>2.注册窗口类并初始化窗口 这里我们调用Windows API 通过应用程序的句柄来注册一个唯一…...
算法通关村-----回溯模板如何解决排列组合问题
组合总和 问题描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限…...
【1++的C++进阶】之智能指针
👍作者主页:进击的1 🤩 专栏链接:【1的C进阶】 文章目录 一,什么是智能指针二,为什么需要智能指针三,智能指针的发展 一,什么是智能指针 要了解智能指针,我们先要了解RA…...
一百七十九、Linux——Linux报错No package epel-release available
一、目的 在Linux中配置Xmanager服务时,执行脚本时Linux报错No package epel-release available 二、解决措施 (一)第一步,# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm (二&…...
【AI视野·今日CV 计算机视觉论文速览 第248期】Mon, 18 Sep 2023
AI视野今日CS.CV 计算机视觉论文速览 Mon, 18 Sep 2023 Totally 83 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚Robust e-NeRF,处理高速且大噪声事件相机流的NERF模型。(from NUS新加坡国立) 稀疏噪声事件与稠密事件数据的区别:…...
解决Vue项目中的“Cannot find module ‘vue-template-compiler‘”错误
1. 问题描述 在Vue项目中,当我们使用Vue的单文件组件(.vue文件)时,有时会遇到以下错误信息: ERROR: Cannot find module vue-template-compiler这个错误通常发生在我们使用Vue的版本不匹配或者缺少必要的依赖模块时。…...
tensorflow基础
windows安装tensorflow anaconda或者pip安装tensorflow,tensorflow只支持win7 64系统,本人使用tensorflow1.5版本(pip install tensorflow1.5) tensorboard tensorboard只支持chrome浏览器,而且加载过程中可能有一段…...
spring_注解笔记
spring使用注解开发 文章目录 1.前提1 Bean2 属性注入3 衍生的注解4.自动装配5 作用域 1.前提 步骤1: 要使用注解开发,就必须要保证AOP包的导入 步骤2: xml文件添加context约束 步骤3: 配置注解的支持 <context:annotation-…...
c++运算符重载
目录 运算符重载的基本概念 重载加号运算符() 类内实现 类外实现 运算符重载碰上友元函数 可重载和不可重载的运算符 可重载的运算符 不可重载的运算符 重载自加自减运算符(a a) 智能指针 重载等号运算符() 重载等于和不等运算符(…...
vue子组件向父组件传参的方式
在Vue中,子组件向父组件传递参数可以通过自定义事件和props属性来实现。下面是一些关键代码示例: 1. 使用自定义事件: 在子组件中,通过 $emit 方法触发一个自定义事件,并传递参数。 <template><button cli…...
代码随想录Day41| 343. 整数拆分 |
343. 整数拆分 class Solution { public:int integerBreak(int n) {vector<int> f(n1,0);f[2]1;for(int i3;i<n;i){for(int j1;j<i-1;j){f[i]max(f[i],max(f[i-j]*j,(i-j)*j));}}return f[n];} }; 96. 不同的二叉搜索树 class Solution { public:int numTrees(int…...
工厂模式-(简单工厂模式)
首先看一下设计模式的六大原则 设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概…...
V8引擎是如何提升对象属性访问速度的?
JavaScript 中的对象是由一组组属性和值的集合,从 JavaScript 语言的角度来看,JavaScript 对象像一个字典,字符串作为键名,任意对象可以作为键值,可以通过键名读写键值。 然而在 V8 实现对象存储时,并没有…...
Umi-OCR插件终极指南:如何选择最适合你的文字识别方案
Umi-OCR插件终极指南:如何选择最适合你的文字识别方案 【免费下载链接】Umi-OCR_plugins Umi-OCR 插件库 项目地址: https://gitcode.com/gh_mirrors/um/Umi-OCR_plugins 还在为文档扫描、图片文字提取效率低下而烦恼吗?Umi-OCR插件库为你提供了全…...
深度解析ConcurrentHashMap设计演进:从分段锁到无锁化的并发之路
在Java并发编程领域,ConcurrentHashMap绝对是“并发容器扛鼎之作”——它既解决了HashMap并发环境下的数据不一致(死循环、数据丢失)问题,又突破了Hashtable全表锁的性能瓶颈,成为高并发场景下K-V存储的首选。自JDK1.5…...
1756-L55处理器单元
1756-L55 处理器单元(ControlLogix 系列PLC CPU)一、主要特点高性能处理器,适合中大型控制系统支持多任务运行与快速扫描支持在线编程与程序修改模块化结构,扩展灵活支持本地及远程I/O控制可实现冗余系统,提高可靠性支…...
ArXiv:为何大模型无法拥有意识|Erik Hoel
导语当AI能流畅谈论“自我感受”,当Anthropic赋予Claude“对话退出权”,我们是否可以说它有意识?2026年初,神经科学家Erik Hoel在ArXiv发布论文《大语言模型意识证伪:持续学习对意识存在的必要性》(A Dispr…...
说说你对spring的IOC的理解
面试 IOC指的就是控制反转,指的就是创建对象的控制权的转移,简单来说,由之前的手动new对象,转换成了由spring自动生产,spring利用java的反射机制,根据配置文件或注解在运行时动态创建并管理对象。...
前端性能优化终极指南:使用Javalin实现静态资源压缩与智能缓存
前端性能优化终极指南:使用Javalin实现静态资源压缩与智能缓存 【免费下载链接】javalin 项目地址: https://gitcode.com/gh_mirrors/jav/javalin 在现代Web应用开发中,前端资源的加载速度直接影响用户体验和搜索引擎排名。Javalin作为一款轻量级…...
TranslucentTB深度解析:如何用5MB内存实现Windows任务栏的视觉革命
TranslucentTB深度解析:如何用5MB内存实现Windows任务栏的视觉革命 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 在Windows…...
2026年主流接口测试平台慢因分析与选型参考
2026年主流接口测试平台慢因分析与选型参考 核心观点摘要 2026年接口测试响应慢核心诱因可归为三类:工具本身并发调度能力不足、协议适配不全导致额外转码开销、缺少AI智能链路优化能力,多数企业接口测试效率低与工具选型不当直接相关。本次盘点覆盖当前…...
旅游网站毕业设计:从零构建高可用前后端分离架构的技术实践
作为一名计算机专业的学生,毕业设计是检验学习成果的重要一环。我选择了“旅游网站”这个既有实际应用场景又充满挑战的课题。在实践过程中,我发现很多同学的项目都存在一些共性问题,比如代码结构混乱、前后端职责不清、缺乏基本的安全意识等…...
无限级数求和的Java实现与数学分析
本文旨在详细说明如何使用Java精确计算特定形式的无限级数 S -(2x)^2/2! (2x)^4/4! - (2x)^6/6! ... 在指定区间 [0.1, 1.5] 内部和。我们将深入分析等级数的数学性质,推导其闭合形式,并在此基础上纠正原始Java代码…...
