这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
一、目录
本节课主要分为四个部分:
1.Go 语言编码规范
2.Go 语言性能优化建议
3.性能分析工具pprof的使用
4.性能调优实际案例
这里主要介绍后两个部分。
二、性能分析工具pprof的使用
pprof 是用于可视化和分析性能分析数据的工具,可以通过列表、火焰图、反汇编等视图去展示收集到的性能指标,方便分析。
然后是通过排查实战熟悉pprof的使用。
1.CPU问题排查
命令:go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/cpu"
输入top命令可以展示出CPU占用最高的函数,参数的意义如下:
flat: 当前函数本身的执行耗时。
flat%:flat占CPU总时间的比例。
sum%:上面每一行的flat%总和。
cum:指当前函数本身加上其调用函数的总耗时。
cum%:cum占CPU总时间的比例。
若flat == cum,则证明函数中没有调用其他函数;若flat == 0,则证明函数中只有其他函数的调用。
2.堆内存问题排查
命令:go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap"
SAMPLE的四个选项如下:
inuse_space:程序当前占用的内存大小。
alloc_space:程序累积申请的内存大小。
inuse_objects:程序当前持有对象数。
alloc_objects:程序累积申请的对象数。
3.协程问题排查
命令:go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/goroutine"
4.锁问题排查
命令:go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/mutex"
5.阻塞问题排查
命令:go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/block"
三、性能调优实际案例
基本概念
服务:能单独部署,承载一定功能的程序
依赖:Service A 的功能实现依赖 Service B 的响应结果,称为 Service A 依赖 Service B
调用链路:能支持一个接口请求的相关服务集合及其相互之间的依赖关系
基础库:公共的工具包、中间件
业务服务优化
1.建立服务性能评估手段
2.分析性能数据并定位瓶颈。
3.重点优化项改造。
4.优化效果验证。
基础库优化
1.分析基础库的核心逻辑和性能瓶颈。
2.内部压测验证。
3.推广业务服务落地验证。
Go 语言优化
1.优化内存分配策略。
2.优化代码编译流程,生成更高效的程序。
3.内部压测验证。
4.推广业务服务落地验证。