文章目录
一、本次学习重点内容:
本堂课的知识要点有哪些?
1、性能发现工具pprof
2、性能调优案例
二、详细知识点介绍:
1、性能调优简介
性能调优原则:
要依靠数据不是猜测
要定位最大瓶颈而不是细枝末节
不要过早优化
不要过度优化
2、性能发现工具pprof
说明:
1、希望知道应用在什么地方耗费了多少CPU、Memory
2、pprof是用于可视化和分析性能分析数据的工具
pprof 功能简介
3、pprof 排查实战
下载示例项目,GitHub地址:https://github.com/wolfogre/go-pprof-practice
项目提前埋入了许多炸弹代码,会产生许多可观测性能问题。
运行项目,浏览器输入网址:http://localhost:6060/debug/pprof/
看到界面到:
CPU:
使用任务管理器:
使用pprof工具:
进入pprof:go tool pprof “http://localhost:6060/debug/pprof/profile?seconds=10”
使用top命令查看CPU状态:
相关含义:
可以清晰看到是那个函数消耗大量资源。
根据指定的正则表达式查找代码行:
命令:list
调用关系可视化:命令:web
这里输出图片相关格式需要先安装graphviz,graphviz安装地址如下
https://graphviz.org/download/
安装后检查环境变量:
dot -version
记住,安装时勾选创建环境变量,安装完成后重启Goland才能读取到最新的环境变量。
一定要重启Goland!!!!!
删除问题代码再次运行:
Heap堆内存:
进入可视化pprof:
命令:
go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/heap”
浏览器输入:
localhost:8082
top视图:
source视图:
注释问题代码后:
可以看到内存占用由85%降到68%
goroutine——协程
查看协程数:
进入可视化pprof:
命令:
go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/goroutine”
浏览器输入:
localhost:8082
火焰图查看
注:
由上到下表示调用顺序
每一块代表一个函数,越长代表占用CPU 的时间更长
火焰图是动态的,支持点击块进行分析
source视图:
注释问题代码后:
mutex——锁
查看锁数:
进入可视化pprof:
命令:
go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/mutex”
浏览器输入:
localhost:8082
source视图:
注释问题代码后:
block——阻塞
查看阻塞数:
进入可视化pprof:
命令:
go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/block”
浏览器输入:
localhost:8082
source视图:
注释问题代码后:
小结:
4、性能调优案例
介绍实际业务服务性能优化的案例,对逻辑相对复杂的程序如何进行性能调优
分类:
业务服务优化
基础库优化
Go语言优化。
业务服务调优:
基本概念:
服务:能单独部署,承载一定功能的程序
依赖:Service A 的功能实现依赖Service B的响应结果,称为 Service A依赖 Service B
调用链路:能支持一个接口请求的相关服务集合及其相互之间的依赖关系
基础库:公共的工具包、中间件
流程
1、建立服务性能评估手段
2、分析性能数据,定位性能瓶颈
3、重点优化项改造
4、优化效果验证
建立服务性能评估手段
服务性能评估方式:
1、单独benchmark无法满足复杂逻辑分析
2、不同负载情况下性能表现差异
请求流量构造:
1、不同请求参数覆盖逻辑不同
2、线上真实流量情况
压测范围:
单机器压测、集群压测
性能数据采集:
单机性能数据、集群性能数据
基础库优化:
AB实验SDK的优化:
1、分析基础库核心逻辑和性能瓶颈
设计完善改造方案
数据按需获取
数据序列化协议优化
2、内部压测验证
3、推广业务服务落地验证
Go语言优化:
编译器&运行时优化:
1、优化内存分配策略
2、优化代码编译流程,生成更高效的程序
3、内部压测验证
4、推广业务服务落地验证
优点:
接入简单,只需要调整编译配置
通用性强
总结:
性能调优原则:
1、要依靠数据不是猜测性能分析工具 pprof
2、熟练使用pprof工具排查性能问题并了解其基本原理性能调优
3、保证正确性·定位主要瓶颈
三、个人总结:
本次学习算是比较深入的了解了性能优化的相关知识。特别是见识到了pprof工具的强大,可以精准地定位问题代码,可视化地展示程序运行中CPU、内存、协程的资源的分配使用。后续的性能调优专业知识也讲的通俗易懂。
版权归原作者 爱打辅助的小可爱 所有, 如有侵权,请联系我们删除。