wrk:高性能HTTPS压力测试工具使用指南
wrk:高性能HTTPS压力测试工具使用指南
工具概述
wrk是一款现代化的HTTPS基准测试工具,由Will Glozer开发并于2012年开源。它采用事件驱动架构,使用LuaJIT脚本引擎,能利用多核CPU生成巨大负载,是Web服务器性能测试的首选工具。
在CentOS 8上安装wrk
安装依赖
sudo dnf groupinstall "Development Tools" -y
sudo dnf install openssl-devel git -y
源码编译安装
git clone https://github.com/wg/wrk.git
cd wrk
make
sudo cp wrk /usr/local/bin/
验证安装
wrk --version
# 输出:wrk 4.2.0 [epoll] Copyright (C) 2012 Will Glozer
⚠️ 常见安装问题:
- 编译错误:找不到openssl
sudo dnf install openssl-devel- LuaJIT兼容性问题
编辑Makefile:LDFLAGS += -lm -ldl- 权限不足
sudo make或设置目录权限
wrk核心参数详解
| 参数 | 缩写 | 说明 | 示例值 |
|---|---|---|---|
--threads |
-t |
测试线程数 (建议=CPU核心数) | -t4 |
--connections |
-c |
并发连接数 (模拟用户数) | -c100 |
--duration |
-d |
测试持续时间 | -d30s |
--latency |
显示延迟分布统计 | ||
--script |
-s |
加载Lua测试脚本 | -s post.lua |
--timeout |
超时设置 (默认2s) | --timeout 5s |
基础使用示例
GET请求测试
wrk -t4 -c100 -d30s --latency https://api.example.com
POST请求测试
创建post.lua脚本:
wrk.method = "POST"
wrk.body = '{"username":"test","password":"test"}'
wrk.headers["Content-Type"] = "application/json"
执行测试:
wrk -t4 -c100 -d30s -s post.lua https://api.example.com/login
测试结果解读
Running 30s test @ https://api.example.com
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 54.32ms 21.15ms 352.12ms 82.45%
Req/Sec 461.25 58.33 550.00 76.32%
Latency Distribution
50% 51.21ms
75% 62.33ms
90% 78.94ms
99% 120.65ms
55200 requests in 30.10s, 82.11MB read
Requests/sec: 1833.89
Transfer/sec: 2.73MB
关键指标解析:
- 延迟(Latency):
- Avg:平均响应时间 (54.32ms)
- Stdev:标准差 (波动范围)
- P50/P90/P99:百分位延迟 (重要性能指标)
- 吞吐量(Throughput):
- Req/Sec:每个线程每秒请求数
- Requests/sec:总QPS (1833.89)
- Transfer/sec:网络吞吐量 (2.73MB/s)
- 资源统计:
- 总请求数:55200
- 数据传输量:82.11MB
- 错误统计:Socket errors/Timeout等
高级应用场景
1. 梯度压力测试
for c in 100 500 1000; do
wrk -t4 -c$c -d60s --latency https://api.example.com
done
2. 自定义Header测试
-- headers.lua
wrk.headers["Authorization"] = "Bearer xxxxx"
wrk.headers["X-Custom-Header"] = "value"
3. 动态参数测试
-- dynamic.lua
counter = 1
request = function()
path = "/item/" .. counter
counter = counter + 1
return wrk.format("GET", path)
end
性能优化建议
-
客户端优化:
# 增加临时端口范围 sudo sysctl -w net.ipv4.ip_local_port_range="1024 65535" # 启用TIME_WAIT复用 sudo sysctl -w net.ipv4.tcp_tw_reuse=1 -
服务器端观测:
# 实时监控 dstat -tcmn --top-cpu --top-mem # TCP连接统计 ss -s
最佳实践总结
- 测试设计原则:
- 从低并发开始,逐步增加压力
- 测试时长≥60s获取稳定数据
- 关注P99延迟而非平均值
- 结果分析要点:
- 错误率>0.1%即需优化
- P99延迟应<500ms
- QPS波动>10%表明系统不稳定
- 扩展方案:
- 结合Grafana可视化结果
- 使用wrk2获取更精确百分位数据
- 集成到CI/CD流水线
wrk以其简洁高效的特性,成为开发者评估Web服务性能的利器。通过合理设计测试场景和科学解读结果,您可以精准定位系统瓶颈,为性能优化提供数据支撑。

浙公网安备 33010602011771号