Golang火焰图

文章目录

  • 火焰图
    • 1 原生 PProf 工具
    • 2 安装FlameGraph
    • 3 安装graphviz
    • 4 安装go-torch
    • 5 结果

火焰图

火焰图(Flame Graph)是 Bredan Gregg 创建的一种性能分析图表,因为它的样子近似火而得名。上面的 profiling 结果也转换成火焰图。Uber开源工具 go-torch可以直接读取 golang profiling 数据,并生成一个火焰图的 svg 文件。

使用火焰图之前,需要安装如下工具:

1 原生 PProf 工具

go get github.com/google/pprof

需要将产生的pprof可执行程序所在路径添加到环境变量中。

用法

pprof -http=:8080 cpu.prof

2 安装FlameGraph

git clone https://github.com/brendangregg/FlameGraph.git

将FlameGraph所在路径添加到环境变量中。

export PATH=$PATH:$GOPATH/FlameGraph

3 安装graphviz

graphviz 用于绘图

CentOS:

yum install graphviz

Ubuntu

sudo apt-get install graphviz

4 安装go-torch

安装go-torch用于采集数据,生产火焰图。

go get github.com/uber/go-torch

需要将产生的pprof可执行程序所在路径添加到环境变量中。

go-torch 工具的使用非常简单,没有任何参数的话,它会尝试从 http://localhost:8080/debug/pprof/profile 获取 profiling 数据。它有三个常用的参数可以调整:

-u --url:要访问的 URL,这里只是主机和端口部分
-s --suffix:pprof profile 的路径,默认为 /debug/pprof/profile
-t --seconds:要执行 profiling 的时间长度,默认为 30s

火焰图 svg 文件可以通过浏览器打开,它对于调用图的最优点是它是动态的:可以通过点击每个方块来 zoom in 分析它上面的内容。

火焰图的调用顺序从下到上,每个方块代表一个函数,它上面一层表示这个函数会调用哪些函数,方块的大小代表了占用 CPU 使用的长短,火焰图的配色并没有特殊的意义。

5 结果

运行程序(监听于9090端口),输入如下指令

go-torch -u http://localhost:9090 -t 30

随后在执行go-torch的目录下会生成torch.svg文件,通过浏览器打开,如下:
在这里插入图片描述
点击图中的任意部分,可以看到更详细信息:在这里插入图片描述
备注:
在Windows下安装同样方式操作时,会有如下错误:

could not generate flame graph: fork/exec F:\Pr
ogramTest\Golang\src\github.com\FlameGraph\flamegraph.pl: %1 is not a valid Win32 application.

问题原因是windows不能直接执行pl文件。pl文件是perl文件,于是安装perl,并且将路径添加到环境变量中。依然报错。因为windows直接可执行的是exe文件。可能需要将下载的flamegraph进行编译,然后进行安装。或者直接下载flamegraph可执行程序,并进行安装。这部分后面完善。
​​
扫描二维码,关注“清远的梦呓”公众号,手机端查看文章

Golang火焰图_第1张图片

你可能感兴趣的:(Golang)