性能调优实战 | 青训营笔记

86 阅读2分钟

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

pprof是用于可视化和分析性能分析数据的工具

http://localhost:6060/debug/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"