pprof
使用
import (_ "net/http/pprof")
func AddPprofEndpointsToGin(ginEngine *gin.Engine) {
prefixRouter := ginEngine.RouterGroup.Group("/debug/pprof")
prefixRouter.GET("/", gin.WrapF(pprof.Index))
prefixRouter.GET("/cmdline", gin.WrapF(pprof.Cmdline))
prefixRouter.GET("/profile", gin.WrapF(pprof.Profile))
prefixRouter.POST("/symbol", gin.WrapF(pprof.Symbol))
prefixRouter.GET("/symbol", gin.WrapF(pprof.Symbol))
prefixRouter.GET("/trace", gin.WrapF(pprof.Trace))
prefixRouter.GET("/allocs", gin.WrapH(pprof.Handler("allocs")))
prefixRouter.GET("/block", gin.WrapH(pprof.Handler("block")))
prefixRouter.GET("/goroutine", gin.WrapH(pprof.Handler("goroutine")))
prefixRouter.GET("/heap", gin.WrapH(pprof.Handler("heap")))
prefixRouter.GET("/mutex", gin.WrapH(pprof.Handler("mutex")))
prefixRouter.GET("/threadcreate", gin.WrapH(pprof.Handler("threadcreate")))
}
导出
curl -o profile.out http://localhost:6060/debug/pprof/profile
curl -o heap.out http://localhost:13579/debug/pprof/heap
分析
go tool pprof xxx.out
> top xx
> list xx
go tool pprof -http=:8080 xxx.out
One is around looking at the current allocations (bytes or object count), called
inuse. The other is looking at all the allocated bytes or object count throughout the run-time of the program, calledalloc
refs
golang pprof 实战 | Wolfogre's Blog
How we tracked down (what seemed like) a memory leak in one of our Go microservices - Detectify Blog