HTTP基准测试工具wrk

wrk是一种现代HTTP基准测试工具,能够在单个多核CPU上产生大量负载。它结合了多线程设计和可扩展事件通知系统,如epoll和kqueue。

可选的LuaJIT脚本可以生成HTTP请求,响应处理和自定义报告。SCRIPTING中提供了详细信息,并且脚本/中有几个示例。

wrk安装

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

wrk概述

 wrk可以在大多数类UNIX/拥有GNU架构的操作系统上运行,某些系统可能需要额外的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命令选项

-c, - connections:要保持打开状态的HTTP连接总数,每个线程处理N =连接/线程

-d, - duration:测试的持续时间,例如 2s,2m,2h

-t, - threads:要使用的线程总数

-s, - script:LuaJIT脚本,请参阅SCRIPTING

-H, - header:要添加到请求的HTTP头,例如 "用户代理:wrk"
     --latency:打印详细的延迟统计信息
     --timeout:如果未收到响应,则记录超时这段时间。

wrk基准测试注意事项

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

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