这是我参与「第五届青训营 」笔记创作活动的第5天。注:笔记大部分图片内容及代码段为青训营课程视频提供,仅交流,不得做个人使用
一、本节主要内容
性能优化分析工具pprof
性能调优案例
二、本节详细内容
性能分析工具pprof采样过程和原理
CPU | 堆 | 协程、线程 | Block & mutex
性能调优案例
业务服务优化 基础库优化 Go语言优化
CPU 采样
采样对象:函数调用和它们占用的时间
采样率:100次/秒,固定值
采样时间:从手动启动到手动结束
·操作系统
每10ms向进程发送一次SIGPROF信号
·进程
每次接收到SIGPROF会记录调用堆栈
·写缓冲
每100ms读取已经记录的调用栈并写入输出流
- 堆内存 采样
采样程序通过内存分配器在堆上分配和释放的内存,记录分配/释放的大小和数量
采样率:每分配512KB记录一次,可在运行开头修改,1为每次分配均记录
采样时间:从程序运行开始到采样时
采样指标: alloc_space, alloc_objects, inuse_space, inuse_objects
计算方式: inuse = alloc-free
go的gc(gabage collection)有自己的机制,上述采样只能得到在堆上的内存。栈上或底层的内存接收不到。
- Groutine协程& ThreadCreat-线程创建
-Goroutine ·记录所有用户发起且在运行中的goroutine(即入口非runtime开头的) runtime.main调用的栈信息
-ThreadCreate ·记录程序创建的所有系统线程的信息
- Block-阻塞 & Mutex-锁 阻塞操作
采样阻塞操作的次数和耗时
采样率:阻塞耗时超过阈值的才会被记录(阈值可手动设置),1时为每次阻塞均记录
锁竞争
·采样争抢锁的次数和耗时
采样率:只记录固定比例的锁操作,1为每次加锁均记录
- 小结 后续深入学习方向
掌握常用pprof工具功能
灵活运用pprof工具分析解决性能问题
了解pprof的采样过程和工作原理
性能调优案例
介绍实际业务服务性能优化的案例,对逻辑相对复杂的程序如何进行性能调优
业务服务优化
基础库优化
Go语言优化
性能调优案例-业务服务优化
· 基本概念
服务:能单独部署,承载一定功能的程序
依赖:ServiceA的功能实现依赖Service B应结果, Service A 依赖Service B
调用链路:能支持一个接口请求的相关服务集合及其相互之间的依赖关系
基础库:公共的工具包、中间件
- 优化流程 建立服务性能评估手段-> 分析性能数据,定位性能瓶颈-> 重点优化项改造-> 优化效果验证
benchmark可以对部分性能进行分析,但我们需要对于整体有一个分析方式;我们要对于服务性能有足够的了解,再利用pprof等工具寻找瓶颈;寻找占用资源较多的;不断提升效率
- 建立服务性能评估手段
服务性能评估方式
·单独benchmark无法满足复杂逻辑分析
·不同负载情况下性能表现差异
请求流量构造
·不同请求参数覆盖逻辑不同
·线上真实流量情况
压测范围
·单机器压测
·集群压测性能
数据采集
·单机性能数据
·集群性能数据
单机压力逐渐增大时qps情况
实际项目火焰图
合理利用交互点击
压力测试可视化报告
根据数据结果发现我们需要调优的问题
- 使用库不规范 的问题
发现问题
多余的json解析
无用的日志
高并发场景优化不足
- 重点优化项改造 正确性是基础
响应数据diff(若优化前后响应结果差异不大则说明优化对功能影响不大)
线上请求数据录制回放
新旧逻辑接口数据diff
新旧对比示例
出现了diff,需要进一步修正
- 效果优化验证
重复压测验证
之后进一步发布上线。 上线也需要评估优化效果
关注服务监控
逐步放量
收集性能数据
上述步骤为针对某单个服务的优化过程。我们要继续针对整体进行优化
- 进一步优化,服务整体链路分析
规范上游服务调用接口,明确场景需求;
分析链路,通过业务流程优化提升服务性能
发现调用链路中有课合并的调用
实际中会有特定的功能和情况。具体分析。
性能调优案例-基础库优化
- AB实验SDK的优化
Software Development Kit的缩写,译作软件开发工具包 ABTest-SDK适用于AB分流实验、灰度发布系统等互联网场景; 优化流程:
分析基础库核心逻辑和性能瓶颈
·设计完善改造方案
·数据按需获取数据
·序列化协议优化
内部压测验证
推广业务服务落地验证
上线前后对比CPU使用率降低了2%左右
性能调优案例-Go语言优化
是适用范围最广的优化
- 编译器&运行时优化
优化内存分配策略
优化代码编译流程,生成更高效的程序
内部压测验证
推广业务服务落地验证
优点
接入简单,只需要调整编译配置
通用性强
总结
性能调优原则
-要依靠数据不是猜测
性能分析工具pprof
-熟练使用pprof工具排查性能问题并了解其基本原理
性能调优
-保证正确性
-定位主要瓶颈