Go语言性能调优工具——pprof
2018-10-31 本文已影响0人
陈先生_9e91
Go语言性能调优工具——pprof
Go语言对性能要求比较高,所以内置了调优工具pprof
,本文简单介绍下工具的使用方法。
http
推荐直接使用http,侵入的代码量最少~。
go1.10\src\net\http\pprof\pprof.go
// To use pprof, link this package into your program:
// import _ "net/http/pprof"
//
// If your application is not already running an http server, you
// need to start one. Add "net/http" and "log" to your imports and
// the following code to your main function:
//
// go func() {
// log.Println(http.ListenAndServe("localhost:6060", nil))
// }()
//
// Then use the pprof tool to look at the heap profile:
//
// go tool pprof http://localhost:6060/debug/pprof/heap
//
// Or to look at a 30-second CPU profile:
//
// go tool pprof http://localhost:6060/debug/pprof/profile
//
// Or to look at the goroutine blocking profile, after calling
// runtime.SetBlockProfileRate in your program:
//
// go tool pprof http://localhost:6060/debug/pprof/block
//
// Or to collect a 5-second execution trace:
//
// wget http://localhost:6060/debug/pprof/trace?seconds=5
//
// Or to look at the holders of contended mutexes, after calling
// runtime.SetMutexProfileFraction in your program:
//
// go tool pprof http://localhost:6060/debug/pprof/mutex
//
// To view all available profiles, open http://localhost:6060/debug/pprof/
// in your browser.
注释里面已经详细地介绍了使用方法,简单总结下:
- 在main函数所在go文件,增加
import _ "net/http/pprof"
, - 这样会隐式执行里面的init方法,即注册pprof的路由
- 用一个goroutine执行
log.Println(http.ListenAndServe("localhost:6060", nil))
,开启web服务,仅限非web服务。
pprof
进程起来之后,我们就可以通过/debug/pprof/
端点访问服务,但是内容不太好读,所以我们还需要借助pprof
工具
交互式
通过go tool pprof http://localhost:6060/debug/pprof/profile
,就可以交互式地读取性能数据。pprof提供了一些命令,比如top,list等等。
web
除了命令行以外,我们还可以通过pprof
开启一个web服务,通过UI更直观地查看。
go tool pprof -http="0.0.0.0:6061" http://localhost:6060/debug/pprof/profile
ps. web最重要的功能是火焰图,如果你的UI页面没有火焰图,建议获取最新的pprof
go get -u github.com/google/pprof