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 的时间更长。同时它也支持点击块深入进行分析