性能优化分析工具
原则:
- 要靠数据,不要靠猜测
- 要定位最大瓶颈而不是细枝末节
- 不要过早优化
- 不要过度优化(防止出现新功能无法兼容)
pprof
希望知道应用在什么地方消耗了多少CPU,memory pprof是用于可视化和分析性能分析数据的工具
pprof功能简介
打开项目,输入localhost:6060/debug/pprof/的地址,如下图
包含了对内存,阻塞,协程,内存的处理,锁的操作
通过命令
go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10"
来采集服务的性能数据
输入top
flat:本身执行的耗时
flat%:占cpu总时间的比例
sum:每一行flat%的总和
cum:当前函数本身的消耗,加上它可能调用的其他函数的总消耗耗时
cum%:占cpu总时间的比例
通过结果我们不难发现,tiger.eat文件占用了最多(最大的性能瓶颈)
Flat==Cum,函数中没有调用其他函数 Flat=0,函数中只有其他函数的调用
通过list Eat来看看具体是哪里出了问题
找到了问题所在
关于内存:
通过命令:
go tool pprof -http=:8080 "<http://localhost:6060/debug/pprof/heap>"
想使用可视化web窗口,需要先安装graphviz Download | Graphviz 下载并将bin添加到path当中,并重新启动项目!
关于协程 通过命令:
go tool pprof -http=:8080 "<http://localhost:6060/debug/pprof/goroutine>"
关于锁 通过命令:
go tool pprof -http=:8080 "<http://localhost:6060/debug/pprof/mutex>"