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.

注释里面已经详细地介绍了使用方法,简单总结下:

  1. 在main函数所在go文件,增加import _ "net/http/pprof"
  2. 这样会隐式执行里面的init方法,即注册pprof的路由
  3. 用一个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
上一篇下一篇

猜你喜欢

热点阅读