Wrk压测工具详解

Wrk压测工具安装使用
官方源码:https://github.com/wg/wrk
安装步骤:

  1. wrk只支持linux环境不支持windows环境,
  2. 安装git,并配置git环境变量,
  3. 克隆源码git clone https://github.com/wg/wrk
  4. 进入到源码的路径下执行make进行编译
  5. 然后会在当前路径下生成一个可执行文件wrk
  6. 如果想全局都可以执行,将wrk文件加入到环境变量

命令介绍: wrk <选项> <被测HTTP服务的URL>
Options:
-c, --connections 跟服务器建立并保持的TCP连接数量 (请求并发数量)
-d, --duration 压测时间
-t, --threads 使用多少个线程进行压测 一般设置成cpu的核数的2或者4倍

-s, --script      <S>  指定Lua脚本路径       
-H, --header      <H>  为每一个HTTP请求添加HTTP头      
    --latency          在压测结束后,打印延迟统计信息   
    --timeout     <T>  超时时间     
-v, --version          打印正在使用的wrk的详细版本信息

代表数字参数,支持国际单位 (1k, 1M, 1G)
代表时间参数,支持时间单位 (2s, 2m, 2h)
例子:
wrk -t8 -c200 -d30s --latency “http://www.bing.com”

输出:
Running 30s test @ http://www.bing.com
8 threads and 200 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 46.67ms 215.38ms 1.67s 95.59%
Req/Sec 7.91k 1.15k 10.26k 70.77%
Latency Distribution
50% 2.93ms
75% 3.78ms
90% 4.73ms
99% 1.35s
1790465 requests in 30.01s, 684.08MB read
Requests/sec: 59658.29
Transfer/sec: 22.79MB

结果详解:
Running 30s test @ http://www.bing.com (压测时间30s)
8 threads and 200 connections (共8个测试线程,200个连接)
Thread Stats Avg Stdev Max +/- Stdev
(平均值) (标准差)(最大值)(正负一个标准差所占比例,参考正太分布)
Latency 46.67ms 215.38ms 1.67s 95.59%
(延迟)
Req/Sec 7.91k 1.15k 10.26k 70.77%
(每个线程每秒钟完成的请求数)
Latency Distribution (延迟分布)
50% 2.93ms
75% 3.78ms
90% 4.73ms
99% 1.35s (99分位的延迟)
1790465 requests in 30.01s, 684.08MB read (30.01秒内共处理完成了1790465个请求,读取了684.08MB数据)
Requests/sec: 59658.29 (平均每秒处理完成59658.29个请求)
Transfer/sec: 22.79MB (平均每秒读取数据22.79MB)

脚本执行:
Wrk支持脚本编程,这让wrk在众压测工具中尤为突出,增加了生成压测请求的灵活性,脚本是基于Lua脚本语言编写的,Wrk有一个全局的table和几个全局的function:
Wrk的table数据结构如下:

  1. wrk = {
  2. scheme = “http”,
  3. host = “localhost”,
  4. port = nil,
  5. method = “GET”,
  6. path = “/”,
  7. headers = {},
  8. body = nil,
  9. thread = ,
  10. }
    Wrk的全局变量上面的值默认会应用在所有的请求之上,也就是说我们可以通过修改wrk。Host =”192.168.3.1”,让所有的后续请求去访问主机ip是192.168.3.1的服务器,其他参数类似。
    全局的函数如下:
    function wrk.format(method, path, headers, body)
    这个函数的主要作用是通过传参修改上面的Wrk table中的对应参数,从而生成一个字符串类型Http请求进行返回。
    function wrk.lookup(host, service)
    这个函数返回一个数据结构是table类型的结果,里面存储的是host和service对,类似于POSIX的getaddrinfo()函数。

function wrk.connect(addr)
如果入参的地址可以连接则返回ture 否则返回false 但是这个参数必须是通wrk.lookup()返回。
下面是几个可选的全局函数,使用者可以自定义实现,一定是函数实现:
setup(thread)-----------当线程创建的时候调用
init(args)--------------当线程初始化的时候调用
delay()----------------返回一个延迟
request()---------------调用返回一个request请求
response()-------------返回响应的时候调用、
done(summary, latency, requests)---------------执行完返回结果统计的时候调用

上面的方法根据运行时间可以分为三个部分:创建时,运行时,结束
创建时的方法:
setup(thread)每个线程在被设置了目标Ip地址之后,但是还没有实例化之前调用,每个线程都会调用一次。
入参 thread,可以有以下操作:
thread:addr 获得或者设置线程要访问的服务器地址
thread:get(name) 从线程上下文中获取key为name对应的value
thread:set(name,value) 为线程上下文设置对应的key value
thread:stop() 停止线程

运行时的方法:
init(arg),获取wrk指令中的传参,例如 wrk –helloworld,arg就是helloworld、
delay(),返回一个毫秒级别的延迟下一个request的请求就会延迟,这个时request级别的方法,每个request都会调用一次,
request() 返回一个request请求字符串,例如http://localhost:8080/,调用这个方法会影响性能,
respone() 返回http response 的时候调用,调用这个方法会影响性能

结束时的方法:
done(summary, latency, requests)当执行完压测计划后,返回测试报告的时候调用,参数详解:
接收包含结果数据的table,以及两个表示每个请求延迟和每个线程的统计对象,请求率。 持续时间和延迟是微秒值,速率是以每秒请求数衡量

  1. latency.min – minimum value seen
  2. latency.max – maximum value seen
  3. latency.mean – average value seen
  4. latency.stdev – standard deviation
  5. latency:percentile(99.0) – 99th percentile value
  6. latency(i) – raw value and count
  7. summary = {
  8. duration = N, – run duration in microseconds
  9. requests = N, – total completed requests
  10. bytes = N, – total bytes received
  11. errors = {
  12. connect = N, -- total socket connection errors  
    
  13. read    = N, -- total socket read errors  
    
  14. write   = N, -- total socket write errors  
    
  15. status  = N, -- total HTTP status codes > 399  
    
  16. timeout = N  -- total request timeouts  
    
  17. }
  18. }
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值