一、wrk是什么?
wrk 是一个用于 HTTP 压力测试的现代化工具,它可以模拟大量并发连接,向目标服务器发送请求,并测量服务器的响应时间和吞吐量;使用c语言开发;
二、安装wrk
1、在 Ubuntu 上安装 wrk
sudo apt-get install wrk -y
2、在 CentOS 上安装 wrk
sudo yum install wrk -y
3、在 macOS 上安装 wrk
brew install wrk
4、从源代码编译安装
源码地址,有2个地址可供选择,对于一写无法翻墙的童鞋,可以使用gitee地址
# gitee地址
https://gitee.com/ponponon/wrk.
# github地址
git clone https://github.com/wg/wrk.git
开始安装
cd wrk
make
# 将编译生成的 wrk 可执行文件复制到系统路径下
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://
wrk -t2 -c100 -d30s -T30s --timeout 40s http://chn520.cn
四、执行结果说明
以下信息为执行结果
Running 10s test @ http://172.27.243.155:8090
2 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 10.87ms 93.19ms 1.68s 98.58%
Req/Sec 16.56k 8.54k 44.46k 74.63%
331238 requests in 10.10s, 49.60MB read
Socket errors: connect 0, read 0, write 0, timeout 8
Requests/sec: 32796.50
Transfer/sec: 4.91MB
这段 wrk 的执行结果显示了在使用 2 个线程和 100 个连接进行压力测试后的性能数据。让我们逐条解释这些数据的含义:
“Running 10s test @ http://172.27.243.155:8090":这表示在指定的 URL 上进行了 10 秒的压力测试。
“2 threads and 100 connections”:这表示在测试中使用了 2 个线程和 100 个并发连接。
“Thread Stats”:以下是关于线程性能的统计数据。
- “Avg”:平均值
- “Stdev”:标准偏差
- “Max”:最大值
- “+/- Stdev”:标准偏差占平均值的百分比
- “Latency”:延迟,这里显示的是请求的延迟数据。
- “10.87ms”:平均延迟为 10.87 毫秒
- “93.19ms”:标准偏差为 93.19 毫秒
- “1.68s”:最大延迟为 1.68 秒
- “98.58%”:标准偏差占平均值的百分比,这里表示 98.58% 的数据点落在平均值加减标准偏差的范围内。
- “Req/Sec”:每秒请求数。
- “16.56k”:平均每秒处理的请求数为 16,560(每个线程每秒钟的执行的连接数)
- “8.54k”:标准偏差为 8,540
- “44.46k”:最大值为 44,460
- “74.63%”:标准偏差占平均值的百分比,这里表示 74.63% 的数据点落在平均值加减标准偏差的范围内。
“331238 requests in 10.10s, 49.60MB read”:在 10.10 秒内共发起了 331,238 个请求,总共读取了 49.60MB 的数据量。
“Socket errors: connect 0, read 0, write 0, timeout 8”:显示了在测试期间发生的套接字错误,包括连接错误、读取错误、写入错误和超时错误的次数。
“Requests/sec: 32796.50”:每秒完成的请求数(也就是QPS),这里显示为 32,796.50。(QPS = 总请求数/测试总耗时)
“Transfer/sec: 4.91MB”:每秒传输的数据量,这里显示为 4.91MB。
综合来看,这份结果表明在当前的测试条件下,系统平均每秒能够处理约 32796.50 个请求,延迟较低,但存在部分请求的延迟较高。同时,总共传输了约 49.60MB 的数据量。每秒传输的数据量为 4.91MB
五、注意事项
因为wrk是针对http的请求进行压测,所以返回值一定得是http的响应头,比如:
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 36
Content-Type: text/html
Date: Sun, 12 Nov 2023 13:24:09 GMT
<html><body><h1>woaini</body></html>