wrk 压力测试工具使用教程

发布时间:2023-11-12 19:40:33 作者:yexindonglai@163.com 阅读(1413)

一、wrk是什么?

wrk 是一个用于 HTTP 压力测试的现代化工具,它可以模拟大量并发连接,向目标服务器发送请求,并测量服务器的响应时间和吞吐量;使用c语言开发;

二、安装wrk

1、在 Ubuntu 上安装 wrk

  1. sudo apt-get install wrk -y

2、在 CentOS 上安装 wrk

  1. sudo yum install wrk -y

3、在 macOS 上安装 wrk

  1. brew install wrk

4、从源代码编译安装

源码地址,有2个地址可供选择,对于一写无法翻墙的童鞋,可以使用gitee地址

  1. # gitee地址
  2. https://gitee.com/ponponon/wrk.
  3. # github地址
  4. git clone https://github.com/wg/wrk.git

开始安装

  1. cd wrk
  2. make
  3. # 将编译生成的 wrk 可执行文件复制到系统路径下
  4. sudo cp wrk /usr/local/bin

三、使用

以下是 wrk 工具的所有参数的详细解释以及示例:

参数 描述
—t, —threads 指定要使用的线程数,即并发连接数。示例:-t 4 表示使用 4 个线程进行压力测试。
—c, —connections 指定要创建的并发连接数。示例:-c 100 表示使用 100 个并发连接进行压力测试。
—d, —duration 指定测试运行的持续时间。示例:-d 60s 表示压力测试持续 60 秒。
—s, —script 指定一个 Lua 脚本文件,用于自定义请求生成和处理逻辑。示例:-s script.lua 指定名为 script.lua 的 Lua 脚本文件。
—H, —header 添加一个 HTTP 请求头。示例:-H “User-Agent: wrk” 表示设置 User-Agent 请求头为 “wrk”。
—-latency 在压力测试结束时打印延迟统计信息。
—-timeout 设置全局请求超时时间。示例:—timeout 5s 表示设置全局请求超时时间为 5 秒。
—T, —thread-timeout 设置每个线程的超时时间。示例:-T 10s 表示设置每个线程的超时时间为 10 秒。
—-version: 显示 wrk 的版本信息。
—-help 显示 wrk 的帮助信息,包括所有可用的参数和选项。

举例,以下使用了2个线程、并发数为100,运行30秒,线程超时时间为30秒,全局超时时间为40秒,来测试 http://chn520.cn 这个链接,注意,测试域名一定要加上http协议:http://

  1. wrk -t2 -c100 -d30s -T30s --timeout 40s http://chn520.cn

四、执行结果说明

以下信息为执行结果

  1. Running 10s test @ http://172.27.243.155:8090
  2. 2 threads and 100 connections
  3. Thread Stats Avg Stdev Max +/- Stdev
  4. Latency 10.87ms 93.19ms 1.68s 98.58%
  5. Req/Sec 16.56k 8.54k 44.46k 74.63%
  6. 331238 requests in 10.10s, 49.60MB read
  7. Socket errors: connect 0, read 0, write 0, timeout 8
  8. Requests/sec: 32796.50
  9. Transfer/sec: 4.91MB

这段 wrk 的执行结果显示了在使用 2 个线程和 100 个连接进行压力测试后的性能数据。让我们逐条解释这些数据的含义:

  1. “Running 10s test @ http://172.27.243.155:8090":这表示在指定的 URL 上进行了 10 秒的压力测试。

  2. “2 threads and 100 connections”:这表示在测试中使用了 2 个线程和 100 个并发连接。

  3. “Thread Stats”:以下是关于线程性能的统计数据。

    • “Avg”:平均值
    • “Stdev”:标准偏差
    • “Max”:最大值
    • “+/- Stdev”:标准偏差占平均值的百分比
  4. “Latency”:延迟,这里显示的是请求的延迟数据。
    • “10.87ms”:平均延迟为 10.87 毫秒
    • “93.19ms”:标准偏差为 93.19 毫秒
    • “1.68s”:最大延迟为 1.68 秒
    • “98.58%”:标准偏差占平均值的百分比,这里表示 98.58% 的数据点落在平均值加减标准偏差的范围内。
  5. “Req/Sec”:每秒请求数。
    • “16.56k”:平均每秒处理的请求数为 16,560(每个线程每秒钟的执行的连接数)
    • “8.54k”:标准偏差为 8,540
    • “44.46k”:最大值为 44,460
    • “74.63%”:标准偏差占平均值的百分比,这里表示 74.63% 的数据点落在平均值加减标准偏差的范围内。
  6. “331238 requests in 10.10s, 49.60MB read”:在 10.10 秒内共发起了 331,238 个请求,总共读取了 49.60MB 的数据量。

  7. “Socket errors: connect 0, read 0, write 0, timeout 8”:显示了在测试期间发生的套接字错误,包括连接错误、读取错误、写入错误和超时错误的次数。

  8. “Requests/sec: 32796.50”:每秒完成的请求数(也就是QPS),这里显示为 32,796.50。(QPS = 总请求数/测试总耗时)

  9. “Transfer/sec: 4.91MB”:每秒传输的数据量,这里显示为 4.91MB。

综合来看,这份结果表明在当前的测试条件下,系统平均每秒能够处理约 32796.50 个请求,延迟较低,但存在部分请求的延迟较高。同时,总共传输了约 49.60MB 的数据量。每秒传输的数据量为 4.91MB

五、注意事项

因为wrk是针对http的请求进行压测,所以返回值一定得是http的响应头,比如:

  1. HTTP/1.1 200 OK
  2. Connection: keep-alive
  3. Content-Length: 36
  4. Content-Type: text/html
  5. Date: Sun, 12 Nov 2023 13:24:09 GMT
  6. <html><body><h1>woaini</body></html>

关键字linux