document.writeln('');
当前位置:首页 > 云服务器

如何使用Golang Benchmark测试HTTP性能_Golang HTTP性能测试实践

游戏科技网2026年09月15日 01:25云服务器70
go test -bench 测不出真实 HTTP 延迟,因其默认单 goroutine 运行、不走完整网络栈;需用 httptest 启服务、自控 goroutine 并显式管理连接复用与生命周期。

为什么 go test -bench 测不出真实 HTTP 延迟?

因为默认的 Benchmark 函数运行在单 goroutine 中,且不走网络栈——它测的是你代码的纯逻辑开销,不是客户端发请求、服务端响应、TCP 建连、TLS 握手这一整套链路。如果你直接在 BenchmarkXxx 里调用 http.Get,结果会严重受本地 DNS 缓存、连接复用、Go 的 http.Transport 默认配置(如 MaxIdleConns)影响,和线上压测工具(如 wrk、hey)结果偏差极大。

真正要模拟并发 HTTP 负载,得自己构造 client + goroutine 控制 + 显式管理连接生命周期:

  • http.Client 必须复用,但要禁用长连接或控制 idle 连接数,否则 benchmark 会“越跑越快”
  • 每个 goroutine 应该独立发请求,避免共享 time.Now() 或共用 sync.Pool 引入干扰
  • 务必用 b.ReportAllocs() 和 b.SetBytes(n) 标记有效负载大小,否则 ns/op 没可比性

如何写一个可复现的 HTTP Benchmark 函数?

核心是把“启动服务”和“发起压测”拆开:服务用 httptest.NewUnstartedServer 启动,压测用固定 goroutine 数 + 固定请求数,绕过 Go test 的串行执行限制。示例中用 10 个 goroutine 并发打 1000 次:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

func BenchmarkHTTPHandler(b *testing.B) {

    srv := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

        w.WriteHeader(200)

        w.Write([]byte("ok"))

    }))

    srv.Start()

    defer srv.Close()

 

    client := &http.Client{

        Transport: &http.Transport{

            MaxIdleConns:        0,          // 关闭连接复用

            MaxIdleConnsPerHost: 0,

        },

    }

 

    b.ResetTimer()

    b.ReportAllocs()

    for i := 0; i < b.N; i++ {

        var wg sync.WaitGroup

        for g := 0; g < 10; g++ {

            wg.Add(1)

            go func() {

                defer wg.Done()

                _, _ = client.Get(srv.URL)

            }()

        }

        wg.Wait()

    }

}

注意:MaxIdleConns: 0 是关键,否则前几次请求快,后面全走复用连接,ns/op 会虚低;b.ResetTimer() 必须在服务启动、client 初始化之后调用,否则初始化耗时会计入基准。

立即学习“go语言免费学习笔记(深入)”;

Cloudflare Dns Updater

创建或更新经过代理的 Cloudflare DNS A 记录,用于通过编程方式将子域名指向 IP 地址。输入参数为记录名称、区域名称和 IP 地址。

下载

net/http/httptest 和真实 server 的性能差异在哪?

httptest.NewServer 底层用的是内存管道(net.Pipe),完全绕过 TCP/IP 协议栈和系统 socket,所以它测的是 handler 逻辑 + Go HTTP 解析器的开销,不是网络延迟。它适合验证 handler 正确性、中间件吞吐量,但不能替代对真实部署环境(Nginx + TLS + 网络抖动)的压测。

如果你发现 httptest 下 QPS 是 50k,但用 hey -n 10000 -c 100 http://localhost:8080 只有 8k,大概率是:

  • 真实 server 开了 TLS,加解密吃 CPU
  • 操作系统层面的 TIME_WAIT 连接堆积(尤其短连接场景)
  • Go runtime 的 GOMAXPROCS 设置不合理,或没启用 GOEXPERIMENT=fieldtrack(1.22+)优化 GC

什么时候该放弃 go test -bench 改用外部工具?

当你需要以下任一能力时,go test 就不够用了:

  • 模拟真实客户端行为:带 Cookie、JWT、随机 User-Agent、阶梯式增压(ramp-up)
  • 测量 P95/P99 延迟分布,而不仅是平均 ns/op
  • 跨机器压测(比如从另一台云服务器打你的服务),涉及 NAT、防火墙、跨 AZ 延迟
  • 观察系统指标:CPU、内存、goroutine 数、GC pause —— 这些 pprof 能看,但 go test 不提供实时聚合视图

这时候直接用 hey 或 wrk 更实际。例如:hey -z 30s -c 50 -m POST -H "Content-Type: application/json" -d {"id":1} http://your-api.com/v1/item,再配合 go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30 抓 CPU profile。

真正难的从来不是写 benchmark,而是定义清楚:你在测什么——是 handler 逻辑?序列化开销?TLS 性能?还是整个服务链路?选错工具,结论就偏了。

“如何使用Golang Benchmark测试HTTP性能_Golang HTTP性能测试实践” 的相关文章

竟然有如此便宜的云服务器?

竟然有如此便宜的云服务器? 那天,我正坐在咖啡馆里,手里拿着笔记本电脑,本来想找个地方测试我的新网站。但我突然意识到,我需要一个稳定的服务器来托管它。过去,我一直以为云服务器至少要几百块钱一个月,结果一番搜索后,我愣住了——竟然有如此便宜的云服务器?有些服务商标价只要几十块钱就能用一个月,这简直是天方夜谭! 回想起来,去年我刚开始创业时,做了一个小型电子商务网站。起初,我用免费的共享主机,但速度慢…

云服务器特惠:选购与使用实战攻略

云服务器特惠:选购与使用实战攻略 嗨,大家好!我是小李,一个刚起步的创业公司老板。去年,我们团队开发了一个简单的网站,用来卖一些手工艺品。起初,一切都风平浪静,网站访问量不高,一台便宜的共享主机就能应付。但随着产品越来越受欢迎,我们的订单量直线上升,网站开始频繁卡顿,甚至偶尔崩溃。用户抱怨说,打开页面慢得让人等得心急。这让我意识到,我们需要升级服务器了。 那段时间,我像个热锅上的蚂蚁,到处找解决方…

(html)如何发布_发布HTML文件到网络的方法【网络】

(html)如何发布_发布HTML文件到网络的方法【网络】

可通过四种方式将HTML文件部署为公开网站:一、GitHub Pages免费托管;二、云存储服务(如阿里云OSS)启用静态网站托管;三、VPS配置Nginx/Apache服务器;四、Netlify/Vercel无服务器快速部署。 如果您已创建好一个 HTML 文件,但希望他人能通过互联网访问它,则需要将该文件部署到可公开访问的服务器上。以下是实现此目标的多种方法: 一、使用 GitHub Pa…

2021年云服务器优惠套餐活动

2021年云服务器优惠套餐活动 全球数字化转型浪潮持续深入,云计算作为新型基础设施建设的重要组成部分,其市场增长速度远超传统IT行业。根据Gartner最新发布的《中国云计算市场份额》报告显示,2020年第三季度至2021年第三季度期间,中国云计算市场规模从226亿美元增长至342亿美元,年复合增长率达30.7%。这一增长态势在2021年得到进一步巩固,各大云服务商纷纷推出优惠套餐以抢占市场份额。…

1000元做出价值10万的小程序

1000元做出价值10万的小程序

一、预算有限也能出奇迹:低成本小程序的成功密码 很多人认为开发一个高质量小程序至少要花几万元,但其实只要掌握“精准定位 + 资源复用 + 数据驱动”的方法论,仅用1000元也能做出价值10万的效果。关键在于: 突出核心功能:剔除冗余模块,集中资源打造用户最需要的核心体验。 善用免费资源:借助开源框架、模板平台和免费云服务大幅压缩成本。 以数据为导向:通过用户行为反馈不断优化产品,提升转化效率。从…

163邮箱官方网站地址 163邮箱网页版登录页面

163邮箱官方网站地址 163邮箱网页版登录页面

163邮箱官方网站地址在哪里?这是引起网友们普遍关注的,接下来由PHP小编为大家带来163邮箱网页版登录页面,感兴趣的网友一起随小编来瞧瞧吧! https://mail.163.com/ 账号注册与登录方式 1、支持使用手机号码快速注册新账号,以“手机号@163.com”形式生成专属邮箱地址,既记忆又操作便捷。 2、允许通过传统字母和数字组合的方式创建账号,需要以字母字母,满足不同用户的个性化…