如何使用Golang进行压力测试_Golang性能压力测试方案-Golang

go test -bench 不是压力测试,它仅测 handler 内存执行开销,需禁用 sleep、加 b.ResetTimer、用 -benchmem 查分配;vegeta 是轻量 HTTP 压测首选,支持 P95/P99 和直方图;手写脚本需控并发、复用 client、禁 keep-alive;压测必采 pprof,关注调度器、锁、GC 瓶颈。

go test -bench 不是压力测试,别拿它压 HTTP 接口

很多人一看到 go test -bench 就以为能压服务,结果测的是内存拷贝速度,不是真实网络请求。它单 goroutine 顺序跑、不建 TCP 连接、不走 DNS、不处理超时重试,BenchmarkHTTPHandler 测的只是 handler 函数在内存里的执行开销。

  • 适合场景:纯逻辑函数(如 JSON 解析、加密算法)、mock 掉所有外部依赖后的 handler 单元性能验证
  • 必须加 b.ResetTimer(),否则初始化 httptest.NewRequest 和 NewRecorder 的耗时全算进去了
  • 禁用 time.Sleep —— 它会卡死整个循环,ns/op 完全失真
  • 加 -benchmem 看 Allocs/op,如果每次请求分配几百字节,GC 很可能成为瓶颈,而不是 CPU

vegeta 是最省心的入门选择,5 行命令就能跑出可用报告

vegeta 是 Go 写的命令行压测工具,不用写代码、支持 HTTP/2、输出带 P95/P99、错误率、延迟直方图,CI 里直接集成也稳。

  • 安装:go install github.com/tsenart/vegeta@latest
  • 基础压测(500 QPS,30 秒):echo "GET http://localhost:8080/api/users" | vegeta attack -rate=500 -duration=30s -timeout=5s | vegeta report
  • 带 body 和 header(比如登录):echo "POST http://localhost:8080/api/login" | vegeta attack -body=login.json -header="Content-Type: application/json" -rate=100 -duration=30s -insecure
  • 关键参数:-insecure(跳过 HTTPS 证书校验)、-timeout(避免 hang 住)、-ramp(阶梯加压,查拐点)

手写 goroutine 压测脚本,控制并发比“起越多越好”重要得多

自己写脚本不是为了炫技,而是当需要定制化行为(比如按用户 ID 轮询、动态 token 注入、失败重试策略)时,vegeta 不够用。但随便起 10000 个 goroutine,大概率先压垮本地端口或文件描述符。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 如何使用Golang进行压力测试_Golang性能压力测试方案-Golang
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4032007+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4032007+
  • 本周更新: 0+
  • 最后更新: 2026-03-16