性能分析工具 pprof
- 背景:想知道什么地方耗费多少cpu、内存等资源
- pprof:用于可视化和分析性能以及分析数据的工具
功能介绍
搭建之前给github的pprof实践项目:github.com/wolfogre/go…
-
查看Makefile,执行相应的命令,然后运行可执行文件也行,运行go run main.go也可以
-
浏览器查看指标:
localhost:6060/debug/pprof
- 指标:allocs block heap mutex profile
排查实战
终端输入
go tool pprof "<http://localhost:6060/debug/pprof/profile?seconds=10>"
-
cpu
-
命令:topN 查看占用资源最多的函数
- 参数说明:
-
- 对于flat和cum参数
-
命令:list
- 根据指定的正则表达式查找代码行(可看到函数中循环占很多大多时间)
-
命令:web
- 调用关系可视化(可生成图)
- 这一步可能会出graphviz的问题,请参考www.h5tpl.com/blog/372,下方的在网页端查看火焰图等图时产生的问题也是这个问题。
-
Heap-堆内存
-
go tool pprof -http=:8080 "<http://localhost:6060/debug/pprof/heap>"在8080端口看到可视化内存占用图
-
top、source视图
-
sample中有四种采样说明:
- alloc_objects:程序累计申请的对象数
- alloc_space:程序累计申请的内存大小
- inuse_objects:程序当前持有的对象数
- inuse_space:程序当前占用的内存大小
-
-
goroutine-协程
-
在heap指令改后缀,从heap->goroutine
-
可视化
- 由上到下表示调用顺序
- 每一块代表一个函数,越长代表越占cpu
- 动态火焰图,能够点击分析
-
有搜索功能
-
-
mutex-锁
- 同样改后缀mutex
- 找阻塞block,解决相应问题
- 展示阻塞block并不会全部展示,占比小的函数忽略,便于开发者找到关键阻塞