1.17笔记「Go 高质量编程与性能调优」课程3:性能优化分析工具| 青训营笔记day6

105 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 6天 课程内容为:性能优化分析工具。

性能优化分析工具

实际生产中如何性能调优

简介

性能调优原则
要依靠数据不是猜测
要定位最大瓶颈而不是细枝末节
不要过早优化
不要过度优化

性能分析工具 pprof

说明
希望知道应用在什么地方耗费了多少 CPU、Memory
pprof 是用于可视化和分析性能分析数据的工具

pprof 功能简介
pprof 排查实战
pprof 的采样过程和原理

搭建 pprof 实践项目

前置准备
下载项目代码,能够编译运行
会占用1CPU核心和超过1GB的内存

CPU

命令:topN
查看占用资源最多的函数
flat 当前函数本身的执行耗时
flat% flat 占 CPU 总时间的比例
cum 指当前函数本身加上其调用函数的总耗时
cum% cum 占 CPU 总时间的比例

Flat == Cum,函数中没有调用其他函数
Flat == 0,函数中只有其他函数的调用

命令:list
根据指定的正则表达式查找代码行
命令:web 调用关系可视化

命令:web
调用关系可视化

Heap-内存堆

Top视图

Source视图

alloc_objects:程序累计申请的对象数
inuse_objects:程序当前持有的对象数
alloc_space:程序累计申请的内存大小
inuse_space:程序当前占用的内存大小

goroutine-协程

goroutine泄露也会导致内存泄露

由上到下表示调用顺序
每一块代表一个函数,越长代表占用 CPU 的时间更长
火焰图是动态的,支持点击块进行分析

总结

性能分析工具 pprof

分析-Profile:网页、可视化终端
展示-View:Top、调用图-Graph、火焰图-FlameGraph、Peek、源码-Source
工具-Tool:runtime/pprof、net/http/pprof
采样-Sample:CPU、堆内存-Heap、协程-Goroutine、锁-Mutex、阻塞-Block、线程创建-ThreadCreate