go 1.10 以后对go tool pprof做了一个较大的改变:增加了Web UI,以后可以和go trace一起通过图形化的方法对Go程序进行调优了。可视化的pprof使用起来十分简单,我们以gocmpp为例,试用一下go 1.10的pprof。
###1、首先我们生成cpu profile文件:
$GOPATH/src/github.com/bigwhite/gocmpp git:(master) ✗ $go test -run=^$ -bench=. -cpuprofile=profile.out
goos: darwin
goarch: amd64
pkg: github.com/bigwhite/gocmpp
BenchmarkRecvAndUnpackPkt-4 1000000 1534 ns/op
BenchmarkCmppConnReqPktPack-4 1000000 1398 ns/op
BenchmarkCmppConnReqPktUnpack-4 3000000 450 ns/op
BenchmarkCmpp2DeliverReqPktPack-4 1000000 1156 ns/op
BenchmarkCmpp2DeliverReqPktUnpack-4 3000000 567 ns/op
BenchmarkCmpp3DeliverReqPktPack-4 1000000 1173 ns/op
BenchmarkCmpp3DeliverReqPktUnpack-4 3000000 465 ns/op
BenchmarkCmpp2FwdReqPktPack-4 1000000 2079 ns/op
BenchmarkCmpp2FwdReqPktUnpack-4 1000000 1276 ns/op
BenchmarkCmpp3FwdReqPktPack-4 1000000 2507 ns/op
BenchmarkCmpp3FwdReqPktUnpack-4 1000000 1286 ns/op
BenchmarkCmpp2SubmitReqPktPack-4 1000000 1845 ns/op
BenchmarkCmpp2SubmitReqPktUnpack-4 1000000 1251 ns/op
BenchmarkCmpp3SubmitReqPktPack-4 1000000 1863 ns/op
BenchmarkCmpp3SubmitReqPktUnpack-4 2000000 656 ns/op
PASS
ok github.com/bigwhite/gocmpp 26.621s
###2、启动pprof web ui:
$go tool pprof -http=:8080 profile.out
pprof会自动打开默认浏览器,进入下面页面:
在view菜单中,我们可以看到”top”、”graph”、”peek”、”source”和”disassemble”几个选项,这些选项可以帮助你在各种视图间切换,默认初始为graph view。不过目前view菜单中并没有”Flame Graph(火焰图)”选项,要想使用Flame Graph,我们需要使用原生的pprof工具,
###3、安装pprof
该工具可通过go get -u github.com/google/pprof获取,install后原生pprof将出现在$GOPATH/bin下面。
使用原生pprof启动Web UI:
$pprof -http=:8080 profile.out
原生pprof同样会自动打开浏览器,进入下面页面:
原生的pprof的web ui看起来比go 1.10 tool中的pprof更为精致,且最大的不同在于VIEW菜单下出现了”Flame Graph”菜单项!我们点击该菜单项,一幅Flame Graph便呈现在眼前:
###4、一个实际使用pprof分析的例子
Go 代码重构:23 倍性能提升!(原文1,原文2)
参考: