性能压测工具之wrk介绍与使用

在现代软件开发中,压力测试是评估系统性能、稳定性和可靠性的重要手段。本文将介绍压力测试的相关术语,详细讲解高性能 HTTP 压力测试工具 wrk 的安装与使用,帮助您有效地评估系统性能。

1. 压力测试相关术语

在进行压力测试前,了解以下术语有助于更好地分析和理解测试结果。

  • 响应时间(RT):系统对请求作出响应所需的时间,即从发送请求到收到响应的时间间隔。
  • 吞吐量(Throughput):系统在单位时间内处理的请求数量,通常以每秒请求数表示。
  • QPS(Queries Per Second):每秒查询率,指服务器每秒能够响应的查询次数,是衡量服务器处理能力的重要指标。
  • TPS(Transactions Per Second):每秒事务处理量,指系统每秒能够处理的交易或事务数量。
  • 并发连接数:在同一时刻与服务器建立的活动连接总数。

2. 安装 wrk

wrk 是一款现代的 HTTP 压力测试工具,具备高性能、多线程等特性。以下介绍在不同操作系统上安装 wrk 的方法。

2.1 使用 Homebrew 安装(macOS

对于 macOS 用户,可使用 Homebrew 进行安装:

brew install wrk

2.2 源码编译安装(Linux

对于 Linux 用户,可通过源码编译的方式安装 wrk。

安装步骤:

  1. 安装依赖

    # 更新包列表并安装 git 和 gcc
    sudo yum update
    sudo yum install -y git gcc
  2. 下载源码

    # 进入源码存放目录
    cd /usr/local/src
    
    # 克隆 wrk 源码仓库
    sudo git clone https://github.com/wg/wrk.git
  3. 编译安装

    # 进入 wrk 目录
    cd wrk
    
    # 编译源码
    make
  4. 配置环境

    # 将可执行文件移动到系统路径
    sudo cp wrk /usr/local/bin/

2.3 验证安装

使用以下命令验证 wrk 是否安装成功:

wrk --help

如果显示 wrk 的帮助信息,说明安装成功。

3. wrk 的基本使用

wrk 提供了丰富的参数,支持自定义请求、并发数、持续时间等设置。

3.1 常用命令参数

  • -c, --connections <N>:总连接数(并发数),默认值为 10
  • -d, --duration <T>测试持续时间,如 2s(秒)、2m(分钟)、2h(小时),默认值为 10s
  • -t, --threads <N>:线程数,默认值为 2
  • -s, --script <file>:指定 Lua 脚本,用于自定义请求或响应处理。
  • -H, --header <header>:添加 HTTP 请求头,可多次使用。
  • --latency:在测试结束后报告详细的延迟统计信息。
  • --timeout <T>:设置请求超时时间,默认值为 2s
  • --rate <R>:限制每秒请求数(RPS),默认不限速。

3.2 执行测试示例

以下命令演示了如何使用 wrk 对本地的用户注册接口进行压力测试

wrk -t1 -c2 -d1s -s ./scripts/wrk/signup.lua http://localhost:8080/users/signup

参数解析:

  • -t1:使用 1 个线程。
  • -c2:总共建立 2 个连接。
  • -d1s测试持续时间为 1 秒。
  • -s ./scripts/wrk/signup.lua:使用指定的 Lua 脚本自定义请求。
  • http://localhost:8080/users/signup:目标测试的 URL。

说明:

该命令使用 1 个线程和 2 个连接,在 1 秒内对指定的用户注册接口进行压力测试。Lua 脚本 signup.lua 用于生成自定义的注册请求数据。

3.3 测试结果解析

执行上述命令后,wrk 将输出测试结果,例如:

Running 1s test @ http://localhost:8080/users/signup
  1 threads and 2 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    64.63ms  711.72us  67.28ms   90.00%
    Req/Sec    29.80     10.76    40.00     80.00%
  30 requests in 1.01s, 3.78KB read
Requests/sec:     29.81
Transfer/sec:      3.76KB

结果解释:

  • 总体信息:

    • Running 1s test @ ...测试持续时间和目标 URL。
    • 1 threads and 2 connections:使用的线程数和连接数。
  • 线程统计(Thread Stats):

    • Latency(延迟)

      • Avg:平均延迟时间(64.63ms)。
      • Stdev:延迟的标准差(711.72μs)。
      • Max:最大延迟时间(67.28ms)。
      • +/- Stdev:有 90% 的请求延迟在平均值的一个标准差范围内。
    • Req/Sec(每秒请求数)

      • Avg:平均每秒请求数(29.80)。
      • Stdev:每秒请求数的标准差(10.76)。
      • Max:最大每秒请求数(40.00)。
      • +/- Stdev:有 80% 的请求数在平均值的一个标准差范围内。
  • 总体请求统计:

    • 30 requests in 1.01s, 3.78KB read:总共完成了 30 个请求,用时 1.01 秒,读取了 3.78KB 的数据。
  • 性能指标:

    • Requests/sec:平均每秒完成的请求数(29.81)。
    • Transfer/sec:平均每秒传输的数据量(3.76KB)。

总结:

在本次测试中,系统在 1 秒内处理了 30 个请求,平均每秒处理约 29.81 个请求,平均延迟为 64.63 毫秒。该结果可用于评估系统的性能和稳定性,为优化提供数据支持。

4. 总结

通过本文的介绍,您应该对压力测试的基本概念和 wrk 工具的使用有了清晰的了解。掌握这些知识,您可以更有效地评估系统性能,发现潜在的问题,并进行针对性的优化。

标签: 测试

相关文章

浏览器的开发工具中有个jsContext是什么

什么是 jsContext?在JavaScript中,jsContext 并不是一个官方的术语或概念。通常情况下,开发者可能会提到 context 这个词,它通常指的是执行上下文(Executi...

图片Base64编码

CSR生成

图片无损放大

图片占位符

Excel拆分文件