这是我参与「第五届青训营」伴学笔记创作活动的第 4 天
一、本堂课重点内容:
- 性能调优实战
- 简介
- 性能分析工具pprof
- 性能调优案例
二、详细知识点介绍:
-
- 简介
- 性能调优原则
- 要依靠数据而不是猜测
- 要定位最大瓶颈而不是细枝末节
- 不要过早优化
- 不要过度优化
-
2.性能分析工具pprof:
- pprof 功能简介
- 希望知道应用在什么地方耗费了多少CPU、Memory
- pprof是用于可视化和分析性能分析数据的工具
- pprof 排查实战
-
运行程序
-
浏览器查看指标
-
CPU
- go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10"
-
命令:topN 查看占用资源最多的函数
- flat 当前函数本身的执行耗时
- flat% flat占CPU总时间的比例
- sum% 上面每一行的flat%总和
- cum 指当前函数本身加上其调用函数的总耗时
- cum% cum占CPU总时间的比例
-
命令:list 根据指定的正则表达式查找代码行
-
命令:web 调用关系可视化
-
- go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10"
-
Heap-堆内存
- go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap"
- Top视图
- Source视图
- alloc_object:程序累计申请的对象数
- alloc_space:程序累计申请的内存大小
- inuse_objects:程序当前持有的对象数
- inuse_space:程序当前占用的内存大小
-
goroutine-协程
- go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine"
- 由上到下表示调用顺序
- 每一块代表一个函数,越长代表占用cpu时间更长
- 火焰图是动态的,支持点击块进行分析
- 支持搜索,在Source视图下搜索wolf
-
mutex-锁
- go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/mutex"
-
block - 阻塞
- go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/block"
-
- pprof 的采样过程和原理
- CPU 采样
- 堆内存采样
- 协程和系统线程采样
- 阻塞操作和锁竞争采样
- pprof 功能简介
-
3.性能调优案例
- 业务服务优化
- 建立压测评估链路
- 分析性能火焰图,定位性能瓶颈
- 重点优化项分析
- 上线验证评估
- 进一步优化,服务整体链路分析
- 基础库优化
- AB 实验 SDK 的优化
- 分析基础库核心逻辑和性能瓶颈
- 完善改造方案,按需获取,序列化协议优化
- 内部压测验证
- 推广业务服务落地验证
- AB 实验 SDK 的优化
- Go语言优化
- 优化方式
- 优化内存分配策略
- 优化代码编译流程,生成更高效的程序
- 内部压测验证
- 推广业务服务落地验证
- 优化方式
- 业务服务优化
-
4.总结
- 性能调优原则
- 要依靠数据不是猜测
- 性能分析工具pprof
- 熟练使用pprof工具排查性能问题并了解其基本原理
- 性能调优
- 保证正确性
- 定位主要瓶颈
- 性能调优原则
三、课后个人总结:
- 好好学习 天天向上