Options:
-c, --connections
-d, --duration
-t, --threads
-s, --script 指定Lua脚本路径
-H, --header
--latency 在压测结束后,打印延迟统计信息
--timeout
-v, --version 打印正在使用的wrk的详细版本信息
例子:
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数据结构如下:
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,以及两个表示每个请求延迟和每个线程的统计对象,请求率。 持续时间和延迟是微秒值,速率是以每秒请求数衡量