wrk 压测工具教程(Ubuntu22 实战版)
目录
- 🧩 wrk 压测工具教程(Ubuntu 实战版)
- 一、wrk 简介
- 二、Ubuntu 安装步骤
- ✅ 1️⃣ 安装依赖
- ✅ 2️⃣ 克隆源码并编译
- ✅ 3️⃣ 安装到系统路径
- 三、wrk 使用方法
- 🚀 基本命令格式
- ✅ 示例:
- 四、实测结果解析
- 1️⃣ **Running 30s test**
- 2️⃣ **8 threads and 400 connections**
- 3️⃣ **Thread Stats - Latency**
- 4️⃣ **Thread Stats - Req/Sec**
- 5️⃣ **Requests/sec**
- 6️⃣ **Transfer/sec**
- 7️⃣ **Non-2xx or 3xx responses**
- 五、性能分析与调优建议
- ⚙️ 8 核服务器推荐参数
- 六、常见问题
- 七、总结
🧩 wrk 压测工具教程(Ubuntu 实战版)
一、wrk 简介
wrk 是一款高性能的 HTTP 压测工具,由 Will Glozer 开发,采用 C 语言 + epoll + 多线程 实现,
能够在单机上制造出高强度、高并发的 HTTP 请求流量。
适合:
- 接口吞吐量极限测试;
- 服务端性能瓶颈分析;
- 短时高负载压测(峰值性能验证)。
二、Ubuntu 安装步骤
✅ 1️⃣ 安装依赖
sudo apt update
sudo apt install build-essential libssl-dev git -y
✅ 2️⃣ 克隆源码并编译
git clone https://github.com/wg/wrk.git
cd wrk
make
编译完成后,当前目录会生成可执行文件 wrk。
✅ 3️⃣ 安装到系统路径
sudo cp wrk /usr/local/bin/
wrk --version
若能输出:
wrk 4.2.0
表示安装成功 ✅
三、wrk 使用方法
🚀 基本命令格式
wrk -t<线程数> -c<连接数> -d<持续时间> <URL>
参数说明:
| 参数 | 含义 |
|---|---|
-t | 启动的工作线程数(threads) |
-c | 总并发连接数(connections) |
-d | 压测持续时间(duration) |
✅ 示例:
wrk -t8 -c400 -d30s http://10.1.8.79:80/v1/test
含义:
- 使用 8 个线程
- 总计 400 个并发连接
- 持续 30 秒
四、实测结果解析
执行结果如下:
Running 30s test @ http://10.1.8.79:80/v1/test8 threads and 400 connectionsThread Stats Avg Stdev Max +/- StdevLatency 19.00ms 9.59ms 134.46ms 78.90%Req/Sec 2.71k 424.07 8.13k 72.58%648313 requests in 30.04s, 102.60MB readNon-2xx or 3xx responses: 648313
Requests/sec: 21578.14
Transfer/sec: 3.42MB
下面是逐项解析:
1️⃣ Running 30s test
压测持续时间为 30 秒,目标地址是 http://10.1.8.79:80/v1/test。
2️⃣ 8 threads and 400 connections
wrk 启动了 8 个工作线程,共使用 400 个 TCP 连接。
每个线程大约维护 400 ÷ 8 = 50 个连接。
3️⃣ Thread Stats - Latency
Latency 19.00ms 9.59ms 134.46ms 78.90%
含义:
| 指标 | 解释 | 结果分析 |
|---|---|---|
| Avg | 平均响应时间 | 19.00ms |
| Stdev | 标准差(延迟波动) | 9.59ms,延迟较稳定 |
| Max | 最大响应时间 | 134.46ms |
| +/- Stdev | 延迟集中程度 | 78.9%,说明绝大多数请求分布在平均值附近 |
📘 结论:延迟整体稳定、响应速度快。
4️⃣ Thread Stats - Req/Sec
Req/Sec 2.71k 424.07 8.13k 72.58%
含义:
| 指标 | 解释 |
|---|---|
| Avg (2.71k) | 每线程平均每秒请求数 |
| Stdev (424.07) | 线程间速率波动 |
| Max (8.13k) | 单线程最高速率 |
| +/- Stdev (72.58%) | 表示约 73% 的线程速率接近平均值,负载均衡性良好 |
5️⃣ Requests/sec
Requests/sec: 21578.14
整体吞吐率为 21,578 请求/秒 (RPS)。
这是当前压测参数下的平均性能表现。
6️⃣ Transfer/sec
Transfer/sec: 3.42MB
每秒传输数据量约 3.42 MB/s。
表示服务端返回的数据量相对较小(典型 JSON 短响应)。
7️⃣ Non-2xx or 3xx responses
Non-2xx or 3xx responses: 648313
所有请求都未返回成功状态码(2xx 或 3xx)。
即这 648,313 个请求全部失败(例如返回 404)。
📘 常见原因:
- 请求方法不对(例如接口是 POST,你发了 GET);
- 路径写错;
- 服务端路由未匹配。
结合你的测试接口 /v1/add_task_google,
很可能该接口只支持 POST 请求,而 wrk 默认使用 GET。
因此虽然 RPS 很高,但业务层全部返回错误。
五、性能分析与调优建议
| 项 | 含义 | 建议 |
|---|---|---|
| 线程数 (-t) | 控制 CPU 并行度 | 一般等于 CPU 核数(如 8 核 → -t8) |
| 连接数 (-c) | 控制并发连接量 | 通常为线程数的 50~100 倍 |
| 压测时长 (-d) | 持续时间 | 建议 ≥30s 以平滑波动 |
| 每线程连接数 | c ÷ t | 保持在 50~100 之间为佳 |
⚙️ 8 核服务器推荐参数
| 测试目的 | 推荐命令 |
|---|---|
| 功能验证 | wrk -t8 -c200 -d15s URL |
| 稳定性能测试 | wrk -t8 -c400 -d30s URL |
| 极限压测 | wrk -t8 -c800 -d60s URL |
六、常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
Non-2xx 返回 | 请求方法错误 / 接口不存在 | 确认接口是 POST 还是 GET |
socket: too many open files | 文件描述符限制 | 执行 ulimit -n 65535 |
| CPU 100% | wrk 自身成为瓶颈 | 降低并发或多机分压 |
| 结果波动大 | 网络抖动 / 服务器限流 | 增加测试时长或固定本地环境 |
七、总结
✅ wrk 优点
- 性能极高、负载强;
- 结果简洁;
- 适合峰值压测与极限吞吐分析。
⚠️ wrk 限制
- 只能固定连接数,不能控制固定 RPS;
- 默认只支持 GET 请求(POST 需 Lua 脚本扩展);
- 不提供 JSON/图表化输出。
💡 建议
- wrk → 测最大并发能力;
- vegeta → 测稳定请求速率与延迟趋势。
两者结合能完整评估服务性能。
