golang火焰图

1、install go-torch(火焰图)

go get -v github.com/uber/go-torch
go-torch -h

2、install FlameGraph

go get -v github.com/brendangregg/FlameGraph
cd github.com/brendangregg/FlameGraph  
cp flamegraph.pl /usr/local/bin
flamegraph.pl -h

3、install graphviz

yum install graphviz

4、golang自带工具(go tool pprof)

Golang提供了 runtime/pprof和 net/http/pprof两个库来对应用进行profile进行采集。 在Golang语言中,主要关注的应用下面几个方面: * · CPU profile: 按照一定频率去采集应用程序在CPU和寄存器上面的数据 * · Memory Profile: 内存使用情况 * · Block Profile: 分析groutines的死锁等情况 * · Goroutine Profile:报告goroutines的使用情况

5、工具型的应用的pprof分析办法

对工具型的应用运行一次就结束的情况。 一般而言

在import的开头加入

"runtime/pprof"

在main方法的开头加入下面代码

	//CPU
	cpufile, _ := os.Create("cpu.prof")
	pprof.StartCPUProfile(cpufile)
	defer func() {
		pprof.StopCPUProfile()
		cpufile.Close()
	}()
	//Mem
	memfile, _ := os.Create("mem.prof")
	pprof.WriteHeapProfile(memfile)
	defer memfile.Close()

运行完成后即可生成 cpu.prof 和 mem.prof两个文件 运行

go tool pprof qrcode cpu.prof
(pprof) top
Showing nodes accounting for 3330ms, 78.72% of 4230ms total
Dropped 59 nodes (cum <= 21.15ms)
Showing top 10 nodes out of 95
      flat  flat%   sum%        cum   cum%
     780ms 18.44% 18.44%      790ms 18.68%  runtime.mallocgc
     620ms 14.66% 33.10%     2170ms 51.30%  image.(*RGBA).Set
     530ms 12.53% 45.63%      530ms 12.53%  runtime.cgocall
     460ms 10.87% 56.50%      550ms 13.00%  compress/flate.(*compressor).deflate
     230ms  5.44% 61.94%     1390ms 32.86%  image/color.rgbaModel
     190ms  4.49% 66.43%     1050ms 24.82%  runtime.convT2Inoptr
     160ms  3.78% 70.21%     1550ms 36.64%  image/color.(*modelFunc).Convert
     130ms  3.07% 73.29%      150ms  3.55%  image/png.filter
     120ms  2.84% 76.12%      120ms  2.84%  runtime.memmove
     110ms  2.60% 78.72%      110ms  2.60%  image/color.(*Gray16).RGBA
(pprof) web
(pprof) 

备注: 第1,2列是该函数在CPU上运行时间和百分比

第3列是当前所有函数累加使用CPU的比例

第4,5列是该函数和其子函数所占用的时间和比例

第6列是函数的名字。从这里我们可以大致看出来耗时的地方。

其实从web生成的svg图片也是可以调用和耗时的,比如这里较为耗时的是

image.(*RGBA).Set 耗时 0.62s
image/color.(*modelFunc).Convert 耗时0.16s
image/color.rgbaModel 耗时 0.23s
runtime.convT2Inoptr 耗时 0.19s

6、工具型的应用生成火焰图

go-torch -b cpu.prof -f cpu.svg 将svg在浏览器中就可以看到cpu.svg

火焰图怎么看懂它。主要看上面平的部分,从火焰图可以看出 compress/flate.(*compressor).deflate runtime.mallocgc image.(*RGBA).Set 这几个部分耗时是非常严重的

7、常驻后台服务的pprof性能分析和生成火焰图

在import的开头加入

_ "net/http/pprof"

在main方法的开头加入下面代码

go http.ListenAndServe("0.0.0.0:8000", nil)

直接使用工具进行分析 * go tool pprof http://0.0.0.0:8000/debug/pprof/profile

生成火焰图 * go-torch -u http://0.0.0.0:8000 -t 60