这是我参与「第五届青训营 」伴学笔记创作活动的第5天
一、课程内容
- 性能分析工具
- 性能调优案例
二、详细知识点
1、性能调优原则
- 要依靠数据不是猜测
- 要定位最大瓶颈而不是细枝末节
- 不要过早优化
- 不要过度优化
2、pprof
(1) 搭建pprof项目
前置准备:
①在本地环境获取“炸弹”代码 Github
go get -d github.com/wolfogre/go-pprof-practice
cd $GOPATH/src/github.com/wolfogre/go-pprof-practice
②编译并运行
go build
./go-pprof-practice
可以看到控制台在不断打印日志
使用浏览器访问http://localhost:6060/debug/pprof/ 来查看指标
通过任务管理器,发现炸弹程序CPU占用较高,我们在控制台输入
go tool pprof http://localhost:6060/debug/pprof/profile
等待一会儿,进入交互终端
输入top命令
可以看到github.com/wolfogre/go-pprof-practice/animal/felidae/tiger.(*Tiger).Eat 造成了大量CPU的占用
输入list Eat,定位问题代码的具体位置
发现line 24的空循环造成了大量的CPU时间,定位问题成功
进入Download | Graphviz,下载并安装graphviz,windows系统安装时可以选择添加环境变量
输入web,可以看到
图中tiger(*Tiger)Eat函数比较大,输入exit即可退出pprof的交互终端。
修复代码后,我们重新编译并再次使用pprof命令
go tool pprof http://localhost:6060/debug/pprof/heap
可以看到github.com/wolfogre/go-pprof-practice/animal/muridae/mouse.(*Mouse).Steal 造成了大量的内存占用
三、课程总结
通过这门课,学习到了pprof的使用,在开发过程中,我们可以通过pprof排查资源异常占用并快速定位问题代码,帮助程序性能调优。