性能调优实战案例 | 青训营笔记

88 阅读2分钟

性能调优实战案例 | 青训营笔记

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天

ppof原理

采样过程和原理

利用了CPU的定时器以及CPU的时钟的 image.png

image.png

Heap堆内存

  • 采样程序通过内存分配器在堆上分配和释放的内存,记录分配/释放的大小和数量
  • 采样率:每分配512KB记录一次,可在运行开头修改,1为每次分配均记录
  • 采样时间:从程序运行开始到采样时
  • 采样指标:alloc_space,alloc_objects,inuse_space,inuse_objects
  • 计算方式:inuse = alloc - free

协程和线程创建

Goroutine

  • 记录所有用户发起且在运行中的goroutine runtime.main 的调用栈信息

ThreadCreate

  • 记录程序创建的所有系统线程的信息

image.png

Block-阻塞 & Mutex-锁

image.png

性能调优案例

  • 业务服务优化
  • 基础库优化
  • Go语言优化

业务服务优化

image.png

流程

  • 建立服务性能评估手段
  • 分析性能数据、定位性能瓶颈
  • 重点优化项改造
  • 优化效果验证

一般问题

  • 使用库不规范
  • 高并发场景优化不足

基础库优化

  • 分析基础库核心逻辑和性能瓶颈
    • 设计完善改造方案
    • 数据按需获取
    • 数据序列化协议优化

go语言优化

  • 编译器&运行时优化

    • 优化内存分配策略
    • 优化代码编译逻辑,生成更高效的程序
    • 内部压测验证
    • 推广业务服务落地验证
  • 优点

    • 接入简单,只需要调整编译配置
    • 通用性强

总结

性能调优原则

要依靠数据而不是猜测

性能分析工具pprof

熟练使用pprof工具排查性能问题并了解其基本原理

性能调优

  • 保证正确性
  • 定位主要瓶颈