前言
wrk是一个用c语言写的压力测试工具,非常有用,但是ubuntu的软件仓库没有收录wrk,需要我们自己进行编译和安装,最近在学习一些性能测试、性能优化方面的知识,需要使用到这个强有力的工具,故此记录安装和使用的过程。
安装
首先若是没有安装编译工具那么就得先安装一下:
# 安装 make 工具
sudo apt-get install make
# 安装 gcc编译环境
sudo apt-get install build-essential
之后安装git
sudo apt-get install git
从git上拉源码
git clone git@github.com:wg/wrk.git
要是没有梯子等加速工具可以使用gitee
git clone git@gitee.com:ponponon/wrk.git
安装openssl库
sudo apt-get install libssl-dev
使用make编译源码
cd wrk
make
make之后在wrk目录下就可以使用./wrk指令了,不过为了全局能使用,可以将其添加到path
# 把生成的wrk移到一个PATH目录下面, 比如
sudo cp wrk /usr/local/bin
wrk一个特性就是用很少的线程可以压出很大的并发量,原因是啥它使用了一些操作系统特定的高性能io机制,例如select,epoll等。
使用一个简单的性能测试:
wrk -t12 -c100 -d30s http://www.baidu.com
可以看到如下输出:
Running 30s test @ http://www.baidu.com12 threads and 100 connectionsThread Stats Avg Stdev Max +/- StdevLatency 41.00ms 12.53ms 421.23ms 92.02%Req/Sec 173.37 51.53 260.00 75.17%23100 requests in 30.10s, 231.29MB readSocket errors: connect 0, read 1888, write 0, timeout 0
Requests/sec: 767.48
Transfer/sec: 7.68MB
12 threads and 100 connections
用12个线程模拟100个连接.
对应的参数 -t 和 -c 可以控制这两个参数.
wrk中各个参数:
-
-t 需要模拟的线程数
-
-c 需要模拟的连接数
-
--timeout 超时的时间
-
-d 测试的持续时间
结果中:
-
Latency:响应时间
-
Req/Sec:每个线程每秒钟的完成的请求数
-
Avg:平均
-
Stdev:标准差
-
Max:最大
-
+/- Stdev: 正负一个标准差占比
-
Requests/sec:QPS(每秒请求数),这是一项压力测试的性能指标,通过这个参数我们可以看出应用程序的吞吐量。
-
Transfer/sec:每秒传输的数据量
如果想看响应时间的分布情况可以加上--latency参数
wrk -t12 -c100 -d30s -T30s --latency http://www.baidu.com
Running 30s test @ http://www.baidu.com12 threads and 100 connectionsThread Stats Avg Stdev Max +/- StdevLatency 41.46ms 20.81ms 453.31ms 97.90%Req/Sec 169.27 57.92 250.00 75.02%Latency Distribution50% 38.59ms75% 42.03ms90% 46.62ms99% 96.43ms23100 requests in 30.03s, 231.29MB readSocket errors: connect 0, read 1277, write 0, timeout 0
Requests/sec: 769.24
Transfer/sec: 7.70MB
可以看到50%在38ms的量级,很可以
使用 wrk
测试 nginx
wrk http://192.168.31.203
Running 10s test @ http://192.168.31.2032 threads and 10 connections
Thread Stats Avg Stdev Max +/- StdevLatency 657.87us 761.70us 19.66ms 97.90%Req/Sec 8.48k 743.41 9.74k 83.00%168665 requests in 10.00s, 138.16MB read
Requests/sec: 16865.61
Transfer/sec: 13.82MB
使用 wrk
测试 gunicorn
wrk http://192.168.31.203:63000/upload/
Running 10s test @ http://192.168.31.203:63000/upload/2 threads and 10 connectionsThread Stats Avg Stdev Max +/- StdevLatency 10.91ms 7.41ms 93.90ms 79.23%Req/Sec 486.49 92.10 797.00 64.50%9692 requests in 10.01s, 3.47MB readNon-2xx or 3xx responses: 9692
Requests/sec: 968.38
Transfer/sec: 354.63KB