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

67 阅读2分钟

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

性能调优原则

  • 要依靠数据不是猜测
  • 要定位最大瓶颈而不是细枝末节
  • 不要过早优化、过度优化,防止业务改动。

性能分析工具pprof

  • 支持可视化和性能分析数据

    pprof功能简介

pprof采样过程和原理

cpu

  • 操作系统 每1Oms向进程发送一次SIGPROF信号

  • 进程 每次接收到SIGPROF会记录调用堆栈 写缓冲

  • 每100ms读取已经记录的调用栈并写入输出流

    heap

  • 采样程序通过内存分配器在堆上分配和释放的内存,记录分配/释放的大小和数量

  • 采样率:每分配512KB记录一次,可在运行开头修改,1为每次分配均记录

  • 采样时间:从程序运行开始到采样时

  • 采样指标:alloc.space,alloc_objects,inuse.space,inuse._objects

  • 计算方式:inuse=alloc-free

协程&线程创建

  • Goroutine 记录所有用户发起且在运行中的goroutine(即入口非runtime;开头的) runtime.main的调用栈信息

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

    阻塞&锁

  • 阻塞操作

    • 采样阻塞操作的次数和耗时
    • 采样率阻塞耗时超过阈值的才会被记录, 1为每次阻塞均记录
  • 锁竞争

    • 采样争抢锁的次数和耗时

    • 采样率:只记录固定比例的锁操作,1为每 次加锁均记录

      业务服务优化

      基本概念

  • 服务:能单独部署,承载一定功能的程序

  • 依赖:Service A的功能实现依赖 Service B的响应结果,称为Service A 依赖Service B

  • 调用链路:能支持一个接口请求的相关服 务集合及其相互之间的依赖关系

  • 基础库:公共的工具包、中间件

建立服务性能评估手段

建立服务性能评估手段

  • 服务性能评估方式 单独benchmark无法满足复杂逻辑分析 不同负载情况下性能表现差异
  • 请求流量构造 不同请求参数覆盖逻辑不同 线上真实流量情况
  • 压测范围 单机器压测 集群压测
  • 性能数据采集
    • 单机性能数据
    • 集群性能数据

完成打卡作业,有不对的欢迎指出