Golang学习实战笔记-基础 > golang代码性能优化
pprof 工具使用以及如何生成火焰图

pprpf 作用

pprof 是用于可视化和分析性能分析数据的工具

pprof 以 profile.proto 读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告)

profile.proto 是一个 Protocol Buffer v3 的描述文件,它描述了一组 callstack 和 symbolization 信息, 作用是表示统计分析的一组采样的调用栈,是很常见的 stacktrace 配置文件格式


安装pprof工具和graphviz

1. 如果没有安装 graphivz 可以从下面地址下载

https://www.graphviz.org/download/

2. 安装pprof

go get github.com/pkg/profile


下面说一下介绍一下如何使用pprof


生成 pprof文件

1.  最简单直接的方式

import "github.com/pkg/profile"

func main() {
    defer profile.Start().Stop()
    ...
}

如果  profile.start() 不指定任何参数的话 默认是生成cpuProfile 默认的生成 .pprof 文件在tmp目录下面


2.  加上一些配置参数 

 profile.MemProfile      生成内存的profile,

 profile.ProfilePath(".") 指定pprof文件存放路径

p := profile.Start(profile.MemProfile, profile.ProfilePath("."), profile.NoShutdownHook)

分析pprof 文件

在网页上打开 14_12_21/mem.pprof文件

pprof  -http=:8989   14_12_21/mem.pprof

支持参数

  • -inuse_space:分析应用程序的常驻内存占用情况

  • -alloc_objects:分析应用程序的内存临时分配情况

  • -functions [default],

  •  -filefunctions,

  •  -files,

  •  -lines,显示行

  •  -addresses:

  • -show= regex 只显示匹配的条目

#下面命令只展示匹配到GMQ的条目
pprof -http=:8989 -lines -show=GMQ 14_12_21/mem.pprof
#显示匹配GMQ条目同时内存消耗在10kb到100kb范围之内的条目
pprof -http=:8989 -lines -show=gw123 -tagfocus 10kb:100kb 14_12_21/mem.pprof

输入上面命令会在浏览器自动打开 http://localhost:8989/ui/ 网页


默认打开的是Graph ,它显示函数的调用关系图,以及每个步骤内存消耗

点击top查看内存消耗top榜单

flat:给定函数上运行耗时

flat%:同上的 CPU 运行耗时总比例

sum%:给定函数累积使用 CPU 总比例

cum:当前函数加上它之上的调用运行总耗时

cum%:同上的 CPU 运行耗时总比例


点击Source 可以查看 源代码,支持搜索过滤

还有个比较有用的 Flame Graph 火焰图

,它的最大优点是动态的。调用顺序由上到下(A -> B -> C -> D),每一块代表一个函数,越大代表占用 CPU 的时间更长。同时它也支持点击块深入进行分析