这是我参与[第五届青训营]伴学笔记创作活动的第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无法满足复杂逻辑分析 不同负载情况下性能表现差异
- 请求流量构造 不同请求参数覆盖逻辑不同 线上真实流量情况
- 压测范围 单机器压测 集群压测
- 性能数据采集
- 单机性能数据
- 集群性能数据
完成打卡作业,有不对的欢迎指出