执行上面 2 个命令如下图:
用浏览器查看生成的 svg 图:
(文件太大,只截取了一小部分图,完整的图请自行生成查看)
关于图形的一点说明:
每个框代表一个函数,理论上框越大表示占用的 cpu 资源越多
每个框之间的线条代表函数之间的调用关系,线条上的数字表示函数调用的次数
每个框中第一行数字表示当前函数占用 cpu 的百分比,第二行数字表示当前函数累计占用 cpu 的百分比
B. 火焰图 Flame Graph火焰图 (Flame Graph) 是性能优化专家 Bredan Gregg 创建的一种性能分析图。Flame Graphs visualize profiled code。
火焰图形状如下:
(来自:https://github.com/brendangregg/FlameGraph)
上面用 pprof 生成的采样数据,要把它转换成火焰图,就要使用一个转换工具 go-torch,这个工具是 uber 开源,它是用 go 语言编写的,可以直接读取 pprof 采集的数据,并生成一张火焰图, svg 格式的文件。
安装 go-torch:
go get -v github.com/uber/go-torch
安装 flame graph:
git clone https://github.com/brendangregg/FlameGraph.git
安装 perl 环境:
生成火焰图的程序 FlameGraph 是用 perl 写的,所以先要安装执行 perl 语言的环境。
安装 perl 环境:https://www.perl.org/get.html
把执行文件 bin 加入 Path 中
在终端下执行命令:perl -h ,输出了帮助信息,则说明安装成功
验证 FlameGraph 是否安装成功:
进入到 FlameGraph 安装目录,执行命令,./flamegraph.pl --help
输出信息说明安装成功
生成火焰图:
重新进入到文件 democpu.pprof 的目录,然后执行命令:
go-torch -b democpu.pprof
上面命令默认生成名为 torch.svg 的文件,用浏览器打开查看:
自定义输出文件名,后面加 -f 参数:
go-torch -b democpu.pprof -f cpu_flamegraph.svg
火焰图说明:
火焰图 svg 文件,你可以点击上面的每个方块来查看分析它上面的内容。
火焰图的调用顺序从下到上,每个方块代表一个函数,它上面一层表示这个函数会调用哪些函数,方块的大小代表了占用 CPU 使用时长长短。
go-torch 的命令格式:
go-torch [options] [binary] <profile source>go-torch 帮助文档:
想了解更多 go-torch 用法,请用 help 命令查看帮助文档,go-torch --help。
或查看 go-torch README 文档 。
四、参考pprof
README
Profiling Go Programs