这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记
pprof是用于可视化和分析性能分析数据的工具
CPU
终端输入 go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10"
输入命令top查看占用资源最多的函数
分别的含义为
- flat 当前函数本身的执行耗时
- flat% flat占CPU总时间的比例
- sum% 上面每一行的flat%总和
- cum 指当前函数本身加上其调用函数的总耗时
- cum% cum占CPU总时间的比例
- Flat == Cum ,函数中没有调用其他函数
- Flat == 0,函数中只有其他函数的调用
输入命令list根据指定的正则表达式来查找代码行
输入web命令调用可视化
如果失败了则需要去graphviz官网下载找到对应系统版本
可以在安装时配置环境变量或者自己新建一个环境变量将bin路径放入
在通过管理员打开命令行先win+R 输入cmd ctrl+shift+回车, 输入dot -c,在输入dot -version, 出现下面的画面则成功,否则检查环境变量是否配好,并重启生效
堆内存
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap"
Graph视图:
Top视图:
Source视图
- alloc_objects:程序累计申请的对象数
- alloc_space:程序累计申请的内存大小
- inuse_objects:程序当前持有的对象数
- inuse_space:程序当前占有的内存大小
goroutine-协程
goroutine泄露也会导致内存泄露
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine"
使用火焰图展示
- 由上到下表示调用顺序每一块代表一个函数
- 每一块代表一个函数,越长代表占用CPU时间更长
- 火焰图是动态的支持点击块进行分析
支持搜索功能可以找到对应函数
注释问题代码后goroutine明显减少
mutex-锁
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/mutex"
block-阻塞
go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/block"