Administrator
发布于 2025-03-18 / 7 阅读
0

wrk 压测工具的使用方法

#AI

wrk 压测工具的使用方法

1. 安装 wrk

  • Ubuntu/Debian
    sudo apt-get install wrk
    
  • CentOS/RHEL
    可以从源码编译安装,首先克隆仓库:
    git clone https://github.com/wg/wrk.git
    cd wrk
    make
    sudo cp wrk /usr/local/bin
    

2. 基本命令格式

wrk [options] <url>

常见的选项有:

  • -t <threads>:指定线程数,默认是 2 个线程。
  • -c <connections>:指定并发连接数。
  • -d <duration>:指定压测持续时间,例如 10s 表示 10 秒,3m 表示 3 分钟。
  • -s <script>:指定 Lua 脚本,用于自定义请求。

3. 简单示例

以下是一个简单的压测示例,对 http://example.com 进行 30 秒的压测,使用 12 个线程,并发连接数为 400:

wrk -t12 -c400 -d30s http://example.com

4. 使用 Lua 脚本自定义请求

如果需要发送更复杂的请求,如 POST 请求、携带请求头或请求体,可以使用 Lua 脚本来实现。

示例 Lua 脚本(post.lua

request = function()
    return wrk.format("POST", "/api", {["Content-Type"] = "application/json"}, '{"key": "value"}')
end

使用该脚本进行压测:

wrk -t12 -c400 -d30s -s post.lua http://example.com

分析 wrk 报告

执行完压测命令后,wrk 会输出一份详细的报告,下面是一个示例报告及各部分的详细解释:

Running 30s test @ http://example.com
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    63.77ms   51.22ms 518.62ms   91.00%
    Req/Sec   594.41    132.54     1.00k    78.00%
  213408 requests in 30.03s, 37.47MB read
  Socket errors: connect 0, read 0, write 0, timeout 12
Requests/sec:   7106.47
Transfer/sec:      1.25MB

1. 基本信息

  • Running 30s test @ http://example.com:表示压测持续时间为 30 秒,目标 URL 是 http://example.com
  • 12 threads and 400 connections:表示使用 12 个线程和 400 个并发连接进行压测。

2. 线程统计信息

  • Latency(延迟)
    • Avg:平均延迟,这里是 63.77ms,即每个请求的平均响应时间。
    • Stdev:标准差,反映了延迟的波动情况,这里是 51.22ms,说明延迟的波动较大。
    • Max:最大延迟,这里是 518.62ms。
    • +/- Stdev:表示在一个标准差范围内的请求占比,这里 91.00% 的请求延迟在平均延迟加减一个标准差的范围内。
  • Req/Sec(每秒请求数)
    • Avg:每个线程的平均每秒请求数,这里是 594.41。
    • Stdev:标准差,反映了每秒请求数的波动情况,这里是 132.54。
    • Max:最大每秒请求数,这里是 1.00k(即 1000)。
    • +/- Stdev:表示在一个标准差范围内的每秒请求数占比,这里 78.00% 的请求每秒请求数在平均每秒请求数加减一个标准差的范围内。

3. 总体统计信息

  • 213408 requests in 30.03s:表示在 30.03 秒内总共发送了 213408 个请求。
  • 37.47MB read:表示在压测过程中总共读取了 37.47MB 的数据。
  • Socket errors: connect 0, read 0, write 0, timeout 12:表示在压测过程中出现的套接字错误情况,这里连接错误、读取错误、写入错误均为 0,超时错误有 12 个。
  • Requests/sec: 7106.47:表示整个压测过程中的平均每秒请求数。
  • Transfer/sec: 1.25MB:表示整个压测过程中的平均每秒数据传输量。

通过分析这些数据,可以了解目标服务的性能瓶颈,如延迟过高可能是服务器处理能力不足或网络问题,每秒请求数较低可能是服务器并发处理能力有限等。