[实践OK]HTTP 压力测试工具 wrk,小巧好用的压力测试工具 wrk。 不指定

jackxiang 2018-12-12 17:59 | |
发现一个新的 http 压力测试工具 wrk ,简单好用。下载地址:https://github.com/wg/wrk 。类似于之前个人经常使用的一些压测工具,详细请移步 压力测试工具ab、webbench、http_load、siege简单使用。

wrk 使用非常简单,参数不多,但是足够自己简单压测一些 http 服务了。下面简单介绍下如何安装和使用。

安装
需要自己把源码下载下来,自行编译。

git clone --depth=1 https://github.com/wg/wrk
cd wrk
make
编译完成之后,会在当前目录下生成一个 wrk的可执行文件。为方便以后使用,可以将其复制到系统 path 路径中:

cp wrk /usr/local/bin/.
使用
使用 wrk 会提示使用方式:

~ » wrk
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 -c300 -d10m -t8 http://google.com
-c300 : 300连接
-d10m : 测试10分钟
-t8 : 使用8个线程

测试结果如下:

~ » wrk -c300 -d5s -t8 http://baidu.com
Running 5s test @ http://baidu.com
  8 threads and 300 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   474.98ms  177.40ms   1.44s    77.13%
    Req/Sec    47.61     41.14   180.00     79.78%
  516 requests in 5.05s, 194.51KB read
  Socket errors: connect 0, read 2357, write 0, timeout 0
Requests/sec:    102.18
Transfer/sec:     38.52KB
Requests/Sec: 每秒的处理请求数,可以理解为tps。


==========================================================================================
上周服务被打挂了一次,发现的时候 CPU + Memory 几乎被占满,但是请求并发量只有 ~50 左右。修复 + 重启以后一直在想平时怎么在日常自测服务,压力测试需要联系公司专门的团队 + 排期并不十分方便,佳浩老师给推荐了 wrk,这里记录一下使用心得。

wrk 的官网关于用法介绍的挺详细的,这里就只简单举一个例子:


wrk -t4 -c100 -d10s -T30s --latency http://weibo.com
  bin git:(master) wrk -t12 -c100 -d30s http://weibo.com    
Running 30s test @ http://weibo.com
  12 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    55.09ms   95.37ms   1.47s    90.01%
    Req/Sec   271.78    122.50   626.00     66.39%
  95509 requests in 30.08s, 55.70MB read
  Socket errors: connect 0, read 0, write 0, timeout 1
Requests/sec:   3175.48
Transfer/sec:      1.85MB

这条命令的意思是:起四个线程,并发量为 100,持续发送 10 秒钟,HTTP 的超时设置为 30s。10 秒后 wrk 将会返回一个结果的报告,其中涉及到一些指标我也花了段时间弄懂:
统计分析

项目名称说明
Avg  平均值  每次测试的平均值
Stdev  标准偏差  结果的离散程度,越高说明越不稳定
Max  最大值  最大的一次结果
+/- Stdev  正负一个标准差占比  结果的离散程度,越大越不稳定
Latency: 可以理解为响应时间
Req/Sec: 每个线程每秒钟的完成的请求数

一般我们来说我们主要关注平均值和最大值.
标准差如果太大说明样本本身离散程度比较高. 有可能系统性能波动很大


来自:https://cloud.tencent.com/info/d2173a0ceb1736f00edf3b6165914094.html
https://shijianan.com/2017/06/24/wrk/
https://www.testwo.com/article/888

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/9992/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2019-2-22 16:21
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]