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

65 阅读3分钟

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

一、本堂课重点内容:

  • 性能调优实战
    • 简介
    • 性能分析工具pprof
    • 性能调优案例

二、详细知识点介绍:

    1. 简介
    • 性能调优原则
      • 要依靠数据而不是猜测
      • 要定位最大瓶颈而不是细枝末节
      • 不要过早优化
      • 不要过度优化
  • 2.性能分析工具pprof:

    • pprof 功能简介
      • 希望知道应用在什么地方耗费了多少CPU、Memory
      • pprof是用于可视化和分析性能分析数据的工具
    • pprof 排查实战
      • 运行程序
        image.png

      • 浏览器查看指标image.png

      • CPU

        • go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10" image.png
          • 命令:topN 查看占用资源最多的函数image.png

            • flat 当前函数本身的执行耗时
            • flat% flat占CPU总时间的比例
            • sum% 上面每一行的flat%总和
            • cum 指当前函数本身加上其调用函数的总耗时
            • cum% cum占CPU总时间的比例
          • 命令:list 根据指定的正则表达式查找代码行image.png

          • 命令:web 调用关系可视化

      • Heap-堆内存

        • go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap"
        • Top视图
        • Source视图
          • alloc_object:程序累计申请的对象数
          • alloc_space:程序累计申请的内存大小
          • inuse_objects:程序当前持有的对象数
          • inuse_space:程序当前占用的内存大小
      • goroutine-协程

        • go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine"
        • 由上到下表示调用顺序
        • 每一块代表一个函数,越长代表占用cpu时间更长
        • 火焰图是动态的,支持点击块进行分析
        • 支持搜索,在Source视图下搜索wolf
      • mutex-锁

      • block - 阻塞

    • pprof 的采样过程和原理
      • CPU 采样
      • 堆内存采样
      • 协程和系统线程采样
      • 阻塞操作和锁竞争采样
  • 3.性能调优案例

    • 业务服务优化
      • 建立压测评估链路
      • 分析性能火焰图,定位性能瓶颈
      • 重点优化项分析
      • 上线验证评估
      • 进一步优化,服务整体链路分析
    • 基础库优化
      • AB 实验 SDK 的优化
        • 分析基础库核心逻辑和性能瓶颈
        • 完善改造方案,按需获取,序列化协议优化
        • 内部压测验证
        • 推广业务服务落地验证
    • Go语言优化
      • 优化方式
        • 优化内存分配策略
        • 优化代码编译流程,生成更高效的程序
        • 内部压测验证
        • 推广业务服务落地验证
  • 4.总结

    • 性能调优原则
      • 要依靠数据不是猜测
    • 性能分析工具pprof
      • 熟练使用pprof工具排查性能问题并了解其基本原理
    • 性能调优
      • 保证正确性
      • 定位主要瓶颈

三、课后个人总结:

  • 好好学习 天天向上