插入关键字 文章采集器 Golang Profiling: 关于 pprof
优采云 发布时间: 2022-06-18 18:44插入关键字 文章采集器 Golang Profiling: 关于 pprof
go tool pprof http://localhost:8080/debug/pprof/heap<br />> top<br />...<br />> exit<br />
关于进一步的说明要在后续章节中详细剖析,详见 []。
如果你没有采用默认的 DefaultServeMux 方式,那就需要手动地链接端点到你的 mux。例如对于 gin 来说,可能会是这样:
r := gin.Default()<br />r.GET("/debug/pprof/allocs", WrapH(pprof.Handler("allocs")))<br />r.GET("/debug/pprof/block", WrapH(pprof.Handler("block")))<br />r.GET("/debug/pprof/goroutine", WrapH(pprof.Handler("goroutine")))<br />r.GET("/debug/pprof/heap", WrapH(pprof.Handler("heap")))<br />r.GET("/debug/pprof/mutex", WrapH(pprof.Handler("mutex")))<br />r.GET("/debug/pprof/threadcreate", WrapH(pprof.Handler("threadcreate")))<br />r.Run(":8080")<br /><br />func WrapH(h http.Handler) gin.HandlerFunc {<br /> return func(c *gin.Context) {<br /> h.ServeHTTP(c.Writer, c.Request)<br /> }<br />}<br />
一般应用程序
如果你的 app 并非持续性 web 服务,那么也可以通过 runtime/pprof 包来手工插入 prof 专用代码到应用程序中,然后在运行结束后拿着产生的 cpu.prof 或 mem.prof 等数据收集文件到 pprof 中进行分析。
借助于 pkg/profile
这里有一个简单的应用程序:
<p>package main<br /><br />import (<br /> "fmt"<br /> "github.com/pkg/profile"<br />)<br /><br />func main(){<br /> defer profile.Start(profile.ProfilePath(".")).Stop()<br /> a()<br />}<br /><br />func a(){<br /> for i:=0;i