Golang 小技巧:使用 httptrace 分析 HTTP 请求耗时
【摘要】 在 Go 中,如果一个 HTTP 请求很慢,只看最终耗时往往不知道慢在哪里。可能是:DNS 查询慢TCP 连接慢TLS 握手慢服务响应慢这时候可以使用标准库里的 httptrace 分析请求过程。例如:trace := &httptrace.ClientTrace{ DNSStart: func(info httptrace.DNSStartInfo) { fmt.Println("开始 ...
在 Go 中,如果一个 HTTP 请求很慢,只看最终耗时往往不知道慢在哪里。
可能是:
- DNS 查询慢
- TCP 连接慢
- TLS 握手慢
- 服务响应慢
这时候可以使用标准库里的 httptrace 分析请求过程。
例如:
trace := &httptrace.ClientTrace{
DNSStart: func(info httptrace.DNSStartInfo) {
fmt.Println("开始 DNS 查询")
},
ConnectStart: func(network, addr string) {
fmt.Println("开始连接:", addr)
},
GotFirstResponseByte: func() {
fmt.Println("收到首字节")
},
}
ctx := httptrace.WithClientTrace(
context.Background(),
trace,
)
req, _ := http.NewRequestWithContext(
ctx,
"GET",
"https://example.com",
nil,
)
resp, err := http.DefaultClient.Do(req)
if err != nil {
return
}
defer resp.Body.Close()
运行时可以看到类似:
开始 DNS 查询
开始连接: 93.xxx.xxx.xxx:443
收到首字节
这样可以快速判断请求慢在哪个阶段。
小结
当需要排查 HTTP 请求耗时时,可以使用:
httptrace.WithClientTrace(ctx, trace)
它非常适合:
- 接口性能排查
- 网络问题定位
- HTTP 客户端优化
- 微服务调用分析
相比只统计整个请求耗时,httptrace 可以帮助你定位具体瓶颈。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)