使用pprof排查Go内存占用OOM原因:
1.在api里启用pprof在route.go中写:
//pprof系统性能分析
func systemPprof(r *http.GinRouteRegister) {
pprofAPI := r.Engine.Group(“/pprof”)
{
pprofAPI.GET(“/”, gin.WrapF(pprof.Index))
pprofAPI.GET(“/cmdline”, gin.WrapF(pprof.Cmdline))
pprofAPI.GET(“/profile”, gin.WrapF(pprof.Profile))
pprofAPI.Any(“/symbol”, gin.WrapF(pprof.Symbol))
pprofAPI.GET(“/trace”, gin.WrapF(pprof.Trace))
pprofAPI.GET(“/allocs”, gin.WrapH(pprof.Handler(“allocs”)))
pprofAPI.GET(“/block”, gin.WrapH(pprof.Handler(“block”)))
pprofAPI.GET(“/goroutine”, gin.WrapH(pprof.Handler(“goroutine”)))
pprofAPI.GET(“/heap”, gin.WrapH(pprof.Handler(“heap”)))
pprofAPI.GET(“/mutex”, gin.WrapH(pprof.Handler(“mutex”)))
pprofAPI.GET(“/threadcreate”, gin.WrapH(pprof.Handler(“threadcreate”)))
}
}
2.生成svg
go tool pprof https://api.xxx.com/pprof/heap
在提示中输入命令:web
于是打开了一个可视化的web svg页面。
3.分析
看大线最底下的节点,里面有函数名