高性能编程与性能调优实战 | 青训营笔记

122 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记。

课程导学链接

【Go 语言原理与实践学习资料(上)】第三届字节跳动青训营-后端专场 - 掘金

课程项目地址

github.com/wolfogre/go…

课程PPT链接

高质量编程与性能调优实战PPT

这是我第一次接触跟性能调优有关的知识。课程的内容还没有完全消化,特别是第三部分讲到案例的时候,好多专业名词也是第一次听说。先记录一下实战部分,待整理消化了老师讲的内容的时候再更新。

实战

又到了我最爱的实战环节

运行程序

image.png 访问

http://localhost:6060/debug/pprof/

image.png

确实很占CPU资源

image.png

终端输入

go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10"

image.png

输入top

image.png

  • flat:当前函数本身的执行耗时
  • falt%:flat占CPU总时间的比例
  • sum%: 上面每一行的falt%总和
  • cum: 当前函数本身加上其调用函数的总耗时
  • cum%:cum占CPU总时间的比例

可以看到tigger占的比例最大

  • falt = cum, 函数中没有调用其他函数,所以总执行耗时就是它本身的耗时
  • flat = 0, 函数中只有其他函数的调用,它本身执行耗时=0

输入 list Eat image.png 可以看到cpu消耗最大的命令行代码

将tiger.go里面的这个代码注释掉之后查看CPU占用情况

image.png

好像是CPU低了一点,这个数值一直变来变去的不好确定

image.png

到内存了

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap"

Oh,需要安装一个Graphviz

image.png

去官网下载安装

https://graphviz.org/download/

可以看到mouse占用内存最多

image.png 在view切换到source视图,可以看到那个占用内存的代码

image.png 把那个代码注释掉,再次运行程序

image.png 可以发现内存确实小了

image.png 任务管理器那里好像没怎么变

image.png

Goroutine协程

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine"

image.png 切换到source,在搜索栏搜索wolf

可以看到有一行代码占用了30个协程,我们把这一行代码注释掉看看

image.png image.png 可以看到已经有改变了

image.png

mutex-锁

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/mutex"

操作和上面都是类似的

block-阻塞

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/block"