Wrk-http 测试工具
Wrk-HTTP基准测试工具
wrk是一种现代HTTP基准测试工具,当在单个多核CPU上运行时,能够产生大量负载。它结合了多线程设计和可扩展的事件通知系统,例如epoll和kqueue。
可选的LuaJIT脚本可以执行HTTP请求生成,响应处理和自定义报告。SCRIPTING中提供了详细信息,scripts 中提供了一些示例。
环境安装
依赖
[root@hdt02 ~]# yum install git gcc -y 已安装可以跳过
下载源码
[root@hdt02 ~]# git clone https://github.com/wg/wrk.git
[root@hdt02 ~]# cd wrk
编译, 安装成功之后会再 wrk 文件夹下 生成 wrk 可执行文件。
[root@hdt02 wrk]# make
可以建立软连接,/opt/wrk/wrk 是我这边的路径,操作前需要换成你们服务器上的路径 pwd 查看下
[root@hdt02 wrk]# pwd
/opt/wrk/wrk
[root@hdt02 wrk]# ln -s /opt/wrk/wrk /usr/local/bin
[root@hdt02 wrk]#
查看版本
[root@hdt02 wrk]# ./wrk/wrk -v
wrk 4.1.0-4-g0896020 [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)
[root@hdt02 wrk]#
从以上信息看出使用了 epoll >>> 传送门。这意味着我们可以用少量的线程来创建大量连接进行压测。
参数说明
- -t 需要模拟的线程数
- -c 需要模拟的连接数
- -d 测试的持续时间
- -timeout 超时的时间
- -latency 显示延迟统计
测试结果
| Thread Stats | Avg | Stdev | Max | +/- Stdev |
|---|---|---|---|---|
| Latency(响应时间) | 415.76ms | 411.33ms | 1.96s | 86.44% |
| Req/Sec | 203.50 | 110.21 | 1.95k | 98.25% |
[root@hdt02 wrk]# ./wrk/wrk -t4 -c400 -d30s --latency http://www.baidu.com
Running 30s test @ http://www.baidu.com
4 threads and 400 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 415.76ms 411.33ms 2.00s 86.44%
Req/Sec 203.50 110.21 1.95k 98.25%
Latency Distribution
50% 292.49ms
75% 639.56ms
90% 1.02s
99% 1.69s
24330 requests in 30.01s, 364.41MB read
Socket errors: connect 0, read 417, write 0, timeout 607
Requests/sec: 810.65
Transfer/sec: 12.14MB
[root@hdt02 wrk]#
以上使用4个线程400个连接,对百度首页进行了30秒的压测,并要求在压测结果中输出响应延迟信息。以下对压测结果进行简单注释:
结果显示说明
| 名称 | 说明 | |
|---|---|---|
| Avg | 平均值 | 每次测试的平均值 |
| Stdev | 标准偏差 | 结果的离散程度,越高说明越不稳定 |
| Max | 最大值 | 最大的一次结果 |
| +/- Stdev | 正负一个标准差占比 | 结果的离散程度,越大越不稳定 |
| Requests/sec | 每秒请求数(也就是QPS) | 这是一项压力测试的性能指标, 通过这个参数可以看出吞吐量 |
| Req/Sec | 响应延迟信息 | 可以查看不同比例的响应信息 |
| Latency | 完成的请求数 | 每个线程完成的请求数 |
使用Lua 脚本 Post 测试
首先需要准备一个lua文件
### 请求方式
wrk.method = "POST"
### 设置 请求类型
wrk.headers["Content-Type"] = "application/x-www-form-urlencoded"
### POST 请求参数
wrk.body = '{"key": "val"}'
这个文件内容建议自己填写,保存为 api-post.lua 文件
执行脚本
以下是模拟6个线程,600个连接,在60s内,间隔1s 执行 api-post-api.lua 脚本的请求
localhost:5606 需要换成自己服务的IP:PORT
[root@hdt02 wrk]# ll
总用量 8
-rw-r--r-- 1 root root 114 11月 5 13:55 api-post-api.lua
drwxr-xr-x 8 root root 4096 11月 5 13:35 wrk
[root@hdt02 wrk]# vim prt-post-api.lua
[root@hdt02 wrk]# ./wrk/wrk -t6 -c600 -d60s --script=api-post-api.lua --latency http://localhost:8080/ipagefive/hello
Running 1m test @ http://localhost:8080/ipagefive/hello
6 threads and 600 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 3.95ms 37.59ms 1.17s 99.09%
Req/Sec 41.70k 11.97k 74.73k 84.18%
Latency Distribution
50% 0.86ms
75% 1.10ms
90% 1.48ms
99% 30.36ms
9952626 requests in 1.00m, 1.95GB read
Requests/sec: 165608.22
Transfer/sec: 33.17MB
没错的话,你压测的接口承受能力(QPS)可以达到 165608 。

浙公网安备 33010602011771号