Http基准测试工具wrk

wrk是一款http基准测试工具,能在单个多核cpu上产生大量负载。结合多线程设计和可扩展事件通知系统。

可选的LuaJIT脚本可生成HTTP请求,响应处理和自定义报告。

wrk安装

git clone https://github.com/wg/wrk

wrk概述

wrk可在大多数类UNIX/操作系统上运行,某些系统可能需要额外的CFLAGS或LDFLAGS,有关示例,参阅Makefile,许多情况下只需运行`make`(通常是* BSD上的`gmake`)。

wrk依赖

wrk依赖LuaJIT和OpenSSL,若为OS或其他方式构建wrk软件包,在make时使用如下一或多个位置:

WITH_LUAJIT
WITH_OPENSSL

如,linux上使用了两个库:

make WITH_LUAJIT=/usr WITH_OPENSSL=/usr

Mac OS X上使用OpenSSL:

make WITH_OPENSSL=/usr/local/opt/openssl

wrk基本用法

wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html

wrk将使用12个线程运行30秒的基准测试,保持打开400个http连接。

wrk输出结果

Running 30s test @ http://127.0.0.1:8080/index.html
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   635.91us    0.89ms  12.92ms   93.69%
    Req/Sec    56.20k     8.07k   62.00k    86.54%
  22464657 requests in 30.00s, 17.76GB read
Requests/sec: 748868.53
Transfer/sec:    606.33MB

wrk命令选项

--io-- -c, - connections:要保持打开状态的HTTP连接总数,每个线程处理N =连接/线程
-d, - duration:测试的持续时间,例如 2s,2m,2h
-t, - threads:要使用的线程总数
-s, - script:LuaJIT脚本,请参阅SCRIPTING
-H, - header:要添加到请求的HTTP头,例如 "用户代理:wrk"
     --latency:打印详细的延迟统计信息
     --timeout:如果未收到响应,则记录超时这段时间。

注意事项

运行wrk的机器须有足够数量的临时端口,且能够快速回收关闭的端口。要能处理突发的初始连接、服务器的listen(2),backlog应大于正在测试的并发连接数。

在脚本中修改http方法、路径、增加标头、正文,不会对性能产生影响。