性能优化 | 青训营笔记

76 阅读2分钟

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

2.2性能分析工具pprof

image.png

2.2.2 排查实战

CPU

image.png

heap-堆内存

goroutine-协程

协程泄露也会导致内存泄漏 image.png

mutex-锁 go tool pprof -http=8080"http://localhost:6060/pprof/mutex

block-阻塞 go tool pprof -http=8080"http://localhost:6060/pprof/block

image.png

2.2.3 pprof采样过程和原理

CPU

  • 采样对象:函数调用和它们占用的时间
  • 采样率:100次/秒,固定值
  • 采样时间:从手动启动到手动结束

image.png

Heap-堆内存

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

Goroutine-协程&ThreadCreate-线程创建·

Goroutine

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

ThreadCreate

记录程序创建的所有系统线程的信息 image.png

image.png

2.3 性能调优案例

  1. 业务服务优化
  2. 基础库优化
  3. GO语言优化

2.3.1 业务服务优化

基本概念

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

API(接口)是什么?举个常见的例子,在京东上下单付款之后,商家选用顺丰发货,然后你就可以在京东上实时查看当前的物流信息。京东和顺丰作为两家独立的公司,为什么会在京东上实时看到顺丰的快递信息,这就要用到API,当查看自己的快递信息时,京东利用顺丰提供的API接口,可以实时调取信息呈现在自己的网站上。除此,你也可以在快递100上输入订单号查取到快递信息。只要有合作,或是有允许,别的公司都可以通过顺丰提供的API接口调取到快递信息。既然有多方调用,那提供一个统一的调用规范会方便很多

image.png

流程

  1. 建立服务性能评估手段
  2. 分析性能数据,定位性能瓶颈
  3. 重点优化项改造
  4. 优化效果验证