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

70 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天 这节课主要介绍了性能调优的概念、性能分析工具、性能调优案例以及基础库优化和Go语言优化。

性能调优简介

  • 性能调优原则

    • 要依靠数据不是猜测
    • 要定位最大瓶颈而不是细枝末节
    • 不要过早优化
    • 不要过度优化

性能分析工具

性能调优的核心是性能瓶颈的分析,对于 Go 应用程序,最方便的就是 pprof 工具

  • pprof 功能说明
    • pprof 是用于可视化和分析性能分析数据的工具
    • 可以知道应用在什么地方耗费了多少 CPU、memory 等运行指标
  • pprof 的采样过程和原理
    • CPU 采样
    • 堆内存采样
    • 协程和系统线程采样
    • 阻塞操作和锁竞争采样

性能调优案例

  • 基本概念
    • 服务:能单独部署,承载一定功能的程序
    • 依赖:Service A 的功能实现依赖 Service B 的响应结果,称为 Service A 依赖 Service B
    • 调用链路:能支持一个接口请求的相关服务集合及其相互之间的依赖关系
    • 基础库:公共的工具包、中间件
  • 业务优化
    • 流程

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

      • 服务性能评估
      • 构造请求流量
      • 压测范围
      • 性能数据采集
    • 分析性能火焰图,定位性能瓶颈

      • pprof 火焰图
    • 重点优化项分析

      • 规范组件库使用
      • 高并发场景优化
      • 增加代码检查规则避免增量劣化出现
      • 优化正确性验证
    • 上线验证评估

      • 逐步放量,避免出现问题
    • 进一步优化,服务整体链路分析

      • 规范上游服务调用接口,明确场景需求
      • 分析业务流程,通过业务流程优化提升服务性能
  • 基础库优化
    • 适应范围更广,覆盖更多服务

    • AB 实验 SDK 的优化

      • 分析基础库核心逻辑和性能瓶颈
      • 完善改造方案,按需获取,序列化协议优化
      • 内部压测验证
      • 推广业务服务落地验证
  • Go 语言优化
    • 适应范围最广,Go 服务都有收益

    • 优化方式

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