一、官方文档
https://blog.golang.org/profiling-go-programs
$cd your_programe_dir
$go build
$./your_programe -cpuprofile=xxx.prof
$go tool pprof ./your_programe xxx.prof
Entering interactive mode (type "help" for commands)
(pprof) top 10
...
1.如果出现提示:
Cannot find dot, have you installed Graphviz?
需要用root用户安装Graphviz
$sudo brew install Graphviz
2.如果出现提示:
profile is empty
那是因为默认的pprof的采样频率是每秒100次,如果你的程序运行太快,在第一次采样前就结束了,就会出现这个情况。
要不就在程序里面加for循环或者sleep,要不就调整采样频率(见二)
二、
一开始,有人写了一个package,可以定制化profiing:
https://github.com/davecheney/profile
但是后来又更新了,具体原因如下:
http://dave.cheney.net/2014/10/22/simple-profiling-package-moved-updated
因为有些项目已经用了旧的API,所以作者直接给了个新package:
https://blog.golang.org/profiling-go-programs
$cd your_programe_dir
$go build
$./your_programe -cpuprofile=xxx.prof
$go tool pprof ./your_programe xxx.prof
Entering interactive mode (type "help" for commands)
(pprof) top 10
...
(pprof) web 生成svg文件并打开
注:mac默认用sublime打开,需要修改成chrome: http://blog.csdn.net/jiaolongdy/article/details/50945684
1.如果出现提示:
Cannot find dot, have you installed Graphviz?
需要用root用户安装Graphviz
$sudo brew install Graphviz
2.如果出现提示:
profile is empty
那是因为默认的pprof的采样频率是每秒100次,如果你的程序运行太快,在第一次采样前就结束了,就会出现这个情况。
要不就在程序里面加for循环或者sleep,要不就调整采样频率(见二)
二、
一开始,有人写了一个package,可以定制化profiing:
https://github.com/davecheney/profile
但是后来又更新了,具体原因如下:
http://dave.cheney.net/2014/10/22/simple-profiling-package-moved-updated
因为有些项目已经用了旧的API,所以作者直接给了个新package:
https://github.com/pkg/profile
import "github.com/pkg/profile"
func main() {
defer profile.Start().Stop()
...
}
$go build
$./your_programe
2016/08/10 13:44:02 profile: cpu profiling enabled, /var/folders/sk/4bwcy4nj24s02zkgcw0194rm0000gn/T/profile756682622/cpu.pprof
...
$go tool pprof /var/folders/sk/4bwcy4nj24s02zkgcw0194rm0000gn/T/profile756682622/cpu.pprof
三、详细参数说明
https://software.intel.com/en-us/blogs/2014/05/10/debugging-performance-issues-in-go-programs