核心用法
wrk 是一款基于事件驱动的高性能 HTTP 基准测试工具,单台机器即可产生 substantial 负载。基础命令格式为 wrk -t<线程数> -c<连接数> -d<持续时间> <目标URL>,常用选项包括 --latency(输出延迟分布)、-H(添加静态请求头)和 -s(加载 Lua 脚本)。
Lua 脚本扩展是 wrk 的核心能力,支持定义 setup()、init()、request()、response()、done() 等生命周期函数,实现动态 header、随机参数、POST body、多路径轮询等复杂场景。文档提供了随机 X-Forwarded-For IP 的完整实现,通过避开私有/保留地址段生成合规公网 IP,并正确处理多线程随机种子问题。
显著优点
- 单机高吞吐:多线程+持久连接+事件驱动架构,资源利用率高
- 灵活可编程:Lua 脚本支持高度定制化的请求生成逻辑
- 轻量易部署:单二进制文件,brew 一键安装
- 详细统计:内置延迟分布、吞吐量、错误分类等关键指标
潜在局限
- 无浏览器行为模拟:不支持 JavaScript、Cookie 自动管理、复杂页面渲染
- 客户端瓶颈风险:过高连接数可能先耗尽本地资源而非压垮服务
- 网络栈差异:与真实浏览器或分布式压测集群的行为存在偏差
- Lua 学习成本:复杂场景需要编写和调试脚本
适合人群
- 后端开发/运维工程师进行服务容量规划与回归验证
- 安全团队在授权环境下验证 rate limiting、WAF 规则有效性
- DevOps 工程师集成到 CI/CD 流程执行性能门禁
常规风险
- 未授权测试风险:对第三方或生产环境压测可能触发法律问题和服务故障
- X-Forwarded-For 污染:随机 IP 可能破坏日志聚合、缓存命中率、地理位置统计
- 级联故障:高压测试可能拖垮下游依赖(数据库、缓存、第三方 API)
- 监控盲区:缺乏实时服务健康检查可能导致"压测了但未察觉服务已异常"
建议始终遵循"先确认授权、从保守参数起步、逐步扩容、全程监控"的安全实践。