性能调优实战案例 | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
ppof原理
采样过程和原理
利用了CPU的定时器以及CPU的时钟的
Heap堆内存
- 采样程序通过内存分配器在堆上分配和释放的内存,记录分配/释放的大小和数量
- 采样率:每分配512KB记录一次,可在运行开头修改,1为每次分配均记录
- 采样时间:从程序运行开始到采样时
- 采样指标:alloc_space,alloc_objects,inuse_space,inuse_objects
- 计算方式:inuse = alloc - free
协程和线程创建
Goroutine
- 记录所有用户发起且在运行中的goroutine runtime.main 的调用栈信息
ThreadCreate
- 记录程序创建的所有系统线程的信息
Block-阻塞 & Mutex-锁
性能调优案例
- 业务服务优化
- 基础库优化
- Go语言优化
业务服务优化
流程
- 建立服务性能评估手段
- 分析性能数据、定位性能瓶颈
- 重点优化项改造
- 优化效果验证
一般问题
- 使用库不规范
- 高并发场景优化不足
基础库优化
- 分析基础库核心逻辑和性能瓶颈
- 设计完善改造方案
- 数据按需获取
- 数据序列化协议优化
go语言优化
-
编译器&运行时优化
- 优化内存分配策略
- 优化代码编译逻辑,生成更高效的程序
- 内部压测验证
- 推广业务服务落地验证
-
优点
- 接入简单,只需要调整编译配置
- 通用性强
总结
性能调优原则
要依靠数据而不是猜测
性能分析工具pprof
熟练使用pprof工具排查性能问题并了解其基本原理
性能调优
- 保证正确性
- 定位主要瓶颈