首页 > 其他分享 >压测工具 wrk

压测工具 wrk

时间:2022-08-20 20:35:47浏览次数:57  
标签:请求 压测 wrk -- ms 工具 com

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

wrk优缺点

优点:

● 轻量级性能测试工具;
● 安装简单(相对 Apache ab 来说);
● 学习曲线基本为零,几分钟就能学会咋用了;
● 基于系统自带的高性能 I/O 机制,如 epoll, kqueue, 利用异步的事件驱动框架,通过很少的线程就可以压出很大的并发量;

缺点:

● wrk 目前仅支持单机压测,后续也不太可能支持多机器对目标机压测,因为它本身的定位,并不是用来取代 JMeter, LoadRunner 等专业的测试工具。

安装方式

Ubuntu/Debian

sudo apt install build-essential libssl-dev git -y
git clone https://github.com/wg/wrk.git wrk & cd wrk & make

# 将可执行文件移动到 /usr/local/bin 位置
sudo cp wrk /usr/local/bin

Mac OS

Mac 系统也可以通过先编译的方式来安装,但是更推荐使用 brew 的方式来安装

brew install rk

检验是否安装成功

wrk -v

输出如下:

root@ubuntu1804:~# wrk -v
wrk 4.1.0-8-ga211dd5 [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 -t12 -c400 -d30s http://www.baidu.com

命令的意思:向 url www.baidu.com 发起压力测试,线程数为 12,总共发送400 个并发请求,持续 30 秒

参数解释

参数简写           单位         功能

-c, --connections <N>  跟服务器建立并保持的TCP连接数量  

-d, --duration    <T>  压测时间           

-t, --threads     <N>  使用多少个线程进行压测   

-s, --script      <S>  指定Lua脚本路径       

-H, --header      <H>  为每一个HTTP请求添加HTTP头      
    --latency          在压测结束后,打印延迟统计信息   
    --timeout     <T>  超时时间     
    
-v, --version          打印正在使用的wrk的详细版本信息
                                                      
<N>代表数字参数,支持国际单位 (1k, 1M, 1G)
<T>代表时间参数,支持时间单位 (2s, 2m, 2h)

测试结果

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

执行上面的压测命令,30 秒压测过后,生成如下压测报告:

Running 30s test @ http://www.baidu.com (压测时间30s)
  12 threads and 400 connections (共12个测试线程,400个连接)
	                
  Thread Stats       Avg(平均值)      Stdev(标准差)     Max(最大值)   +/- Stdev(正负标准差所占比例)
  Latency(延迟)      386.32ms         380.75ms          2.00s           86.66%
  Req/Sec(每秒请求数)   17.06            13.91             252.00          87.89%
  
  Latency Distribution (延迟分布)
     50%  218.31ms
     75%  520.60ms
     90%  955.08ms
     99%    1.93s 
     
  4922 requests in 30.06s, 73.86MB read (30.06s内处理了4922个请求,耗费流量73.86MB)
  
  Socket errors: connect 0, read 0, write 0, timeout 311 (发生错误数)
  
Requests/sec:    163.76 (QPS 163.76,即平均每秒处理请求数为163.76)
Transfer/sec:      2.46MB (平均每秒流量2.46MB)

标准差解释:标准差如果太大说明样本本身离散程度比较高,有可能系统性能波动较大,请求延时分布不均匀,有可能是服务器不稳定。

实际场景使用

wrk的复杂测试场景需要编写lua脚本。如POST请求,设置请求头部信息等。

设置cookie

编写 demo.lua 脚本
请求方式:GET
请求头部信息:Content-Type 和 cookie。将用户的认证信息auth_token放在cookie中。

wrk.method = "GET"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"
wrk.headers["cookie"] = "auth_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NDY5MjA2MzQsImV4cCI6MTYzODc3MzQ3OSwiZXhwX3YyIjoxNjM4NzczNDc5LCJkZXZpY2UiOiIiLCJ1c2VybmFtZSI6IndlY2hhdF8zM2g0b3ZuNCIsImlzX3N0YWZmIjoxLCJzZXNzaW9uX2lkIjoiOGY4ZjJiNGE0ZTg0MTFlYzlhZWIxYTYxOGMyYjRlY2EifQ.CrcSmVmJd6TDypsuA43RUxzURaaNgzZKA5pF0K-FMH4"

执行wrk压测命令

wrk -t2 -c10 -d5 --script=demo.lua --latency https://apiv3.shanbay.com/teacher/trial_plan/user_plan/activate

返回结果

Running 5s test @ https://apiv3.shanbay.com/teacher/trial_plan/user_plan/activate
  2 threads and 10 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   247.31ms   88.99ms 519.78ms   72.53%
    Req/Sec    20.82     10.50    50.00     58.90%
  Latency Distribution
     50%  229.55ms
     75%  301.28ms
     90%  359.52ms
     99%  515.54ms
  182 requests in 5.07s, 37.12KB read
Requests/sec:     35.88
Transfer/sec:      7.32KB

post请求

wrk.method = "GET"
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"
wrk.headers["cookie"] = "xxxxx"
wrk.body = "youbody&youset"

标签:请求,压测,wrk,--,ms,工具,com
From: https://www.cnblogs.com/goldsunshine/p/16607769.html

相关文章

  • 压测工具对比
    压测术语负载对被测系统不断施加某种特征的压力,直到性能指标超过预期或某项资源使用达到饱和,以验证系统的处理极限,为系统性能调优提供依据;RPS每秒发送请求数/吞吐率RP......
  • 项目压测数据
    压测流程首先启动locust压测脚本然后启动bus查分模拟脚本收集数据压测结束,清理数据采集的数据为:请求相关数据,如响应时间,请求总数据量资源相关,请求时pod的数量......
  • FontLab(字体制作工具)mac/win
    FontLab8是一款专业的集成字体编辑器,可帮助您从头到尾创建字体,从简单的设计到复杂的项目,并为类型设计带来魔力。在FontLab中,所有功能均启用了颜色。绘制多色轮廓,引入颜......
  • 不常见但很有用的chrome调试工具使用方法
     https://www.cnblogs.com/xiaohuochai/p/6344886.html前面的话  对于chrome调试工具,常用的是elements标签、console标签、sources标签和network标签。但实际上,还......
  • MYSQL 工具之mysqladmin
    MYSQL工具之mysqladminmysqladmin是一个MySQL服务器命令行工具,它由DatabaseAdministrators执行一些基本的命令诸如更改root密码、监控mysql进程、重新加载权限、检......
  • php断点调试工具------NetBeans+Xdebug调试php方法(测试成功)
    @原文url:http://www.cnblogs.com/dcb3688/p/4608015.html@netbeans官方调试php代码说明:https://netbeans.org/kb/docs/php/debugging_zh_CN.html个人认为,对有有经验......
  • 【数据库】E-R图相关知识、绘制方法及工具推荐
    一、知识1、介绍E-R图也称实体-联系图(EntityRelationshipDiagram),提供了表示实体、属性和联系的方法,用来描述现实世界的概念模型。2、组成(1)实体(Entity)-矩形标识(2)属......
  • 关于压测服务器差点崩溃
    昨天试着将最近写的秒杀项目部署到服务器上做压力测试。在商品详情做压测一点问题没遇上,因为还没做优化所以当时吞吐量300我觉得还ok然后下单操作的压测就突然一下子请求......
  • PDF转图片的工具
    生活中经常用到PDF转换成图片使用比如发票的PDF文档和工作中的PDF文档,今天刚好有空借着空闲的时间做个PDF转换图片的工具分享给大家,操作简单,转换速度快免费。软件下载地......
  • 前端小工具----一键生成产品报告
    产品报告具有特定的格式,非常适合机器生成......