共计 891 个字符,预计需要花费 3 分钟才能阅读完成。
Go 语言自带的 pprof 库就能够分析程序的运行状况,并且提供可视化的性能。它蕴含两个相干的库:
- runtime/pprof
对于只跑一次的程序,例如每天只跑一次的离线预处理程序,调用 pprof 包提供的函数,手动开启性能数据采集。 - net/http/pprof
对于在线服务,对于一个 HTTP Server,拜访 pprof 提供的 HTTP 接口,取得性能数据。当然,实际上这里底层也是调用的 runtime/pprof 提供的函数,封装成接口对外提供网络拜访。
因为本人用 gin 比拟多,所以应用 github.com/gin-contrib/pprof,其实外部也就是下面两个库。应用非常简单。
var debugHttp *http.Server
func runPPROF() {g := gin.New()
g.Use(gin.Recovery())
g.Use(gin.Logger())
pprof.Register(g)
// 应用 9000 端口开启 http 服务
debugHttp = &http.Server{
Addr: ":9000",
Handler: g,
}
debugHttp.ListenAndServe()}
开启之后能够 web 拜访 http://127.0.0.1:9000/debug/p… 能够查看实时数据,
当然也能够查看某个时间段的性能状况:
// 监听 60s 性能状况,默认进入命令行
go tool pprof http://127.0.0.1:9000/debug/pprof/profile\?seconds\=60
// 本地启动 http 服务查看,须要装 graphviz 插件
go tool pprof -http=:8080 ~/pprof/pprof.go.samples.cpu.032.pb.gz
能够切换看占用最高的,还有火焰图等等,相当好用,个别性能瓶颈就在占用比拟多的。
PS: 有时候线上可能没有开启,也能够应用 perf 去 debug 查看占用资源比拟多的。
// 19323 端口号
perf record -p 19323
perf report
首发于 blog https://github.13sai.com/2022/01/29/385/
正文完