Go语言性能调优 | 青训营笔记

58 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第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

可以看到控制台在不断打印日志

image.png

使用浏览器访问http://localhost:6060/debug/pprof/ 来查看指标

image.png 通过任务管理器,发现炸弹程序CPU占用较高,我们在控制台输入

go tool pprof http://localhost:6060/debug/pprof/profile

等待一会儿,进入交互终端

image.png

输入top命令 image.png

可以看到github.com/wolfogre/go-pprof-practice/animal/felidae/tiger.(*Tiger).Eat 造成了大量CPU的占用

输入list Eat,定位问题代码的具体位置

image.png 发现line 24的空循环造成了大量的CPU时间,定位问题成功

进入Download | Graphviz,下载并安装graphviz,windows系统安装时可以选择添加环境变量

输入web,可以看到

image.png

图中tiger(*Tiger)Eat函数比较大,输入exit即可退出pprof的交互终端。

修复代码后,我们重新编译并再次使用pprof命令

go tool pprof http://localhost:6060/debug/pprof/heap

image.png 可以看到github.com/wolfogre/go-pprof-practice/animal/muridae/mouse.(*Mouse).Steal 造成了大量的内存占用

三、课程总结

通过这门课,学习到了pprof的使用,在开发过程中,我们可以通过pprof排查资源异常占用并快速定位问题代码,帮助程序性能调优。