网站首页 > 开源技术 正文
什么是wrk?它有什么优劣势?
wrk 是一款针对Http 协议的基准测试工具,它能够在单机多核 CPU 的条件下,使用系统自带的高性能 I/O 机制,如 epoll,kqueue 等,通过多线程和事件模式,对目标机器产生大量的负载。
优势:
- 是一款轻量级性能测试工具。
- 安装简单(相对 Apache ab 来说)。
- 学习曲线基本为零,简单了解一下使用参数就可以上手干活了。
- 基于系统自带的高性能 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 details
Numeric 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.com
12 threads and 400 connections
Thread 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 Distribution
50% 19.57ms
75% 241.26ms
90% 463.73ms
99% 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/right
8 threads and 8 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 18.19ms 48.30ms 363.01ms 93.54%
Req/Sec 202.74 114.83 620.00 64.38%
Latency Distribution
50% 4.51ms
75% 10.62ms
90% 25.50ms
99% 277.60ms
15235 requests in 10.10s, 1.67MB read
Requests/sec: 1508.74
Transfer/sec: 169.71KB
参考文献
性能测试工具wrk安装与使用
linux系统下安装wrk和使用
性能测试工具 wrk 使用教程
猜你喜欢
- 2024-10-12 全职宝妈的我啊这肚子,阳康一过大了几圈
- 2024-10-12 佟丽娅称选手像易烊千玺,男方粉丝不干,饭圈太敏感会四面树敌吗
- 2024-10-12 马苏素颜开直播健身,穿健美裤大秀“木瓜臀”,女生都吃不下饭了
- 2024-10-12 熊黛林穿开叉礼服出席活动秀丰满上围大长腿,小肚腩却抢镜了
- 2024-10-12 周扬青林允合影曝光,“网红脸”一览无遗,网友:凡事就怕对比
- 2024-10-12 NalfWrkxfV(wfdwyxqxjf-rh)
- 2024-10-12 阿森纳VS切尔西,欧联杯冠军之争,你看好谁?是埃梅里还是萨里?
- 2024-10-12 大学生志愿者三下乡支教活动顺利开展
- 2024-10-12 他是圈内隐形低调富豪,明明家里有亿万家产,还跑龙套
- 2024-10-12 他曾建议开除岳云鹏,成名后岳云鹏最感激他,网友:男人的气度
你 发表评论:
欢迎- 03-19基于layui+springcloud的企业级微服务框架
- 03-19开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方组件
- 03-19SpringMVC +Spring +Mybatis + Layui通用后台管理系统OneManageV2.1
- 03-19SpringBoot+LayUI后台管理系统开发脚手架
- 03-19layui下拉菜单form.render局部刷新方法亲测有效
- 03-19Layui 遇到的坑(记录贴)(layui chm)
- 03-19基于ASP.NET MVC + Layui的通用后台开发框架
- 03-19LayUi自定义模块的定义与使用(layui自定义表格)
- 最近发表
-
- 基于layui+springcloud的企业级微服务框架
- 开箱即用的前端开发模板,扩展Layui原生UI样式,集成第三方组件
- SpringMVC +Spring +Mybatis + Layui通用后台管理系统OneManageV2.1
- SpringBoot+LayUI后台管理系统开发脚手架
- layui下拉菜单form.render局部刷新方法亲测有效
- Layui 遇到的坑(记录贴)(layui chm)
- 基于ASP.NET MVC + Layui的通用后台开发框架
- LayUi自定义模块的定义与使用(layui自定义表格)
- Layui 2.9.11正式发布(layui2.6)
- Layui 2.9.13正式发布(layui2.6)
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)