哈喽大家好,我是爱泡 GitHub 的开源极客 挖宝小周!
平时写完后端接口,大家是不是习惯随手敲一个 ab 或者直接上大块头 JMeter?但说实话,在云原生时代,很多老工具要么多核利用率拉垮,要么配置繁琐到头秃。
作为一枚资深 Gopher,小周在 GitHub 上挖了整整两周,专门寻找那些纯 Go 编写、单二进制文件直接运行、低内存高并发的 HTTP 压测神器。Go 的 Goroutine 天然就是为高并发网络 I/O 而生的,用 Go 写的压测工具,压测机自身的 CPU 消耗极低,测试结果也更精准!
今天小周就给大家盘点 4 款我亲自 Clone 下来深度复现过的宝藏压测工具,按需取用,建议收藏!
1. 极致吞吐量的性能怪兽:Bombardier
- GitHub 仓库:codesenberg/bombardier
- Star 走势:目前稳居 5.5k+ Star,曲线平稳上升,是 Gopher 圈子里公认的硬核利器。
为什么挖它?
很多 Go 压测工具底层用的是标准库 net/http,但 Bombardier 不一样,它默认支持用 fasthttp 作为底层驱动!这意味着它的内存分配几乎被压榨到了极限,单机打满万级并发轻轻松松,压测机自己绝不拖后腿。
安装与实操
# Go 1.16+ 一键安装
go install github.com/codesenberg/bombardier@latest
来一记高并发压测(500 虚拟连接,持续 15 秒):
bombardier -c 500 -d 15s -l http://localhost:8080/api/v1/ping
小周复现体验: 输出报告极其工整,不仅包含常见的 TPS、QPS,甚至还用清晰的 ASCII 百分位表展示了延迟(P50、P90、P99)。如果你的服务性能极高(比如用 Rust、Go 或 C++ 写的极致网关),用它才测得出真正极限!
2. 控速与自动化神兵:Vegeta(贝吉塔)
- GitHub 仓库:tsenart/vegeta
- Star 走势:24k+ Star 的超级顶流,生命周期极长且维护极其活跃。
为什么挖它?
名字取自《七龙珠》里的赛亚人王子贝吉塔!它的核心杀手锏是:支持恒定速率(Rate Limiting)发压。 很多工具是“能发多快发多快”,但现实场景中我们往往需要测:“如果持续给系统灌 2000 QPS,系统能抗 10 分钟吗?延迟会不会随时间恶化?” 这时候非 Vegeta 莫属。另外它完美契合 Unix 管道设计哲学,可以无缝集成到 CI/CD 流程中。
安装与实操
go install github.com/tsenart/vegeta@latest
使用管道(Pipeline)进行压测,以恒定 1000 QPS 持续打 30 秒,并直接生成文本摘要报告:
echo "GET http://localhost:8080/api/v1/ping" | \
vegeta attack -rate=1000/1s -duration=30s | \
vegeta report -type=text
想看酷炫图表?它还能一键导出 HTML 交互图:
echo "GET http://localhost:8080/api/v1/ping" | \
vegeta attack -rate=500/1s -duration=10s | \
vegeta plot > plot.html
小周复现体验:
浏览器打开 plot.html 的那一瞬间直接爽到,每个请求的响应点和延迟毛刺一览无遗,排查长尾延迟(Tail Latency)必备!
3. 终端视觉系冷门黑马:Plow
- GitHub 仓库:six-ddc/plow
- Star 走势:目前约 2.3k+ Star,相对冷门但近期增长迅猛,潜力十足。
为什么挖它?
看腻了冷冰冰的文本终端?Plow 把终端 TUI(文本用户界面)玩出了花!
它不仅基于 fasthttp,还利用终端绘制技术,在压测进行时实时渲染直方图和延迟分布曲线。你甚至不需要等测试跑完,看着终端里的柱状图动态跳动,就能直观捕捉到服务抖动。
安装与实操
go install github.com/six-ddc/plow@latest
启动 100 并发,压测 10,000 个请求:
plow http://localhost:8080/api/v1/ping -c 100 -n 10000
小周复现体验: UI 简直帅炸!终端里实时画出响应时间分布区间(比如 1ms~5ms 占了多少比例),对极客来说视觉享受拉满。同时它还支持 HTTP/2,测 gRPC 网关也很顺畅。
4. 现代化极简小手枪:Hey
- GitHub 仓库:rakyll/hey
- Star 走势:18k+ Star,Go 圈教母级开发者 rakyll 的经典之作(原名 boom)。
为什么挖它?
很多时候小周改完一个小 Bug,只是想花 3 秒钟快速自测一下,不想记长指令。hey 的命令行参数几乎完全贴合现代习惯,可以平替古老的 Apache ab。
安装与实操
go install github.com/rakyll/hey@latest
发送 2000 个请求,保持 50 并发:
hey -n 2000 -c 50 http://localhost:8080/api/v1/ping
携带 POST JSON 数据压测也很简单:
hey -n 1000 -c 20 -m POST \
-H "Content-Type: application/json" \
-d '{"user_id": 1001, "action": "login"}' \
http://localhost:8080/api/v1/login
小周复现体验: 轻巧无依赖,输出精练。50% 响应在多少毫秒、99% 响应在多少毫秒一目了然,是我开发机里最常用的“日常小扳手”。
💡 小周的选型指南
挖了这么多宝,到底该用哪一个?小周给大家做个简单梳理:
| 工具名称 | 适用场景 | 核心亮点 |
|---|---|---|
| Hey | 本地日常调试、快速验证 | 语法极简,替代 ab 的首选 |
| Bombardier | 单机极限吞吐量测试 | 基于 fasthttp,性能损耗极低 |
| Vegeta | 生产环境容量演练、CI/CD 自动化集成 | 精准定速(恒定 QPS),可导出交互式 HTML |
| Plow | 现场演示、实时观察服务抖动 | 颜值即正义,终端实时直方图渲染 |
以上所有项目均可在 macOS、Linux 和 Windows 上直接编译运行,单文件部署没有任何依赖,这就是 Go 生态的迷人之处!
大家平时在压测排查性能瓶颈时最常用哪款工具?或者你在 GitHub 上还挖到了哪些神仙 Golang 项目?欢迎在评论区甩链接交流,小周随时去复现!求点赞,求关注,下期继续带大家挖宝开源界!
License: CC BY-NC 4.0
Updated 2 days ago
Was this article helpful? Give it a like.
0 comments


