性能分析(pprof)"/>
golang 性能分析(pprof)
采样方式
net/http/pprof
- 适用于程序长期运行的线上服务
- 底层也是调用的
runtime/pprof
提供的函数,封装成接口对外提供网络访问
- 底层也是调用的
- 如果是使用了HTTP包的路由,则只需要
import _ "net/http/pprof"
即可- 此时会自动把相关路由路径注册到了默认的
http.DefaultServeMux
上
- 此时会自动把相关路由路径注册到了默认的
package pproffunc init() {http.HandleFunc("/debug/pprof/", Index)http.HandleFunc("/debug/pprof/cmdline", Cmdline)http.HandleFunc("/debug/pprof/profile", Profile)http.HandleFunc("/debug/pprof/symbol", Symbol)http.HandleFunc("/debug/pprof/trace", Trace)
}
- 如果使用了第三方server(例如gin),则需要手动注册路由
- gin还可以直接使用
github/DeanThompson/ginpprof
包,只需要ginpprof.Wrap(router)
即可
- gin还可以直接使用
package mainimport ("github/gin-gonic/gin""github/DeanThompson/ginpprof"
)func main() {router := gin.Default()// automatically add routers for net/http/pprof// e.g. /debug/pprof, /debug/pprof/heap, etc.ginpprof.Wrap(router)// ginpprof also plays well with *gin.RouterGroup// group := router.Group("/debug/pprof")// ginpprof.WrapGroup(group)
}
benchmark pprof
-
命令行
- 生成分析文件:
go test -bench <bench_func> -run none -cpuprofile <cpu.prof>
- 除了
-cpuprofile
, 还有-benchmem -memprofile
、-blockprofile
等指标
- 除了
- 生成分析文件:
-
Goland
runtime/pprof
- 适用于程序只运行一次就停的,例如每天只跑一次的离线预处理程序
- 运行程序后生成
cpu.prof
和mem.prof
两个文件
import "runtime/pprof"func main() {f, _
更多推荐
golang 性能分析(pprof)
发布评论