14.2 Go性能优化
14.2 Go性能优化
优化手段
1.减少HTTP请求数,合并CSS、JS、图片 2.使用CDN,就近访问 3.启用nginx gzip压缩,降低传输内容大小 4.优化后端api性能
api服务性能优化目标
1.线上程序是黑盒状态 2.通过性能分析,可知程序占用多少资源 3.找到系统瓶颈
go性能优化方向
1.Cpu维度优化 2.Mem维度优化 3.锁竞争维度的优化
1.1. 性能优化原理
1.知道程序占用了多少资源,如cpu,内存量 2.知道程序的函数占用资源比例 3.如有A,B两个数据就可以快速定位到系统瓶颈 4.通过pprof,每隔一段时间10ms采集当前堆栈信息,获取各个函数占用的cpu以及内存资源 pprof完毕后,通过对数据进行分析,形成分析报告。
CPU性能优化
import ("runtime/pprof")//采集性能分析的数据 开始cpu性能分析,pprof.StartCPUProfile(w io.Writer) 停止CPU性能分析 pprof.StopCPUProfile()
1.1.1. PProf
想要进行性能优化,首先瞩目在 Go 自身提供的工具链来作为分析依据,本文将带你学习、使用 Go 后花园,涉及如下:
- runtime/pprof:采集程序(非 Server)的运行数据进行分析
- net/http/pprof:采集 HTTP Server 的运行时数据进行分析
pprof 是用于可视化和分析性能分析数据的工具
pprof 以 profile.proto 读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告)
profile.proto 是一个 Protocol Buffer v3 的描述文件,它描述了一组 callstack 和 symbolization 信息, 作用是表示统计分析的一组采样的调用栈,是很常见的 stacktrace 配置文件格式
1.1.2. 支持什么使用模式
- Report generation:报告生成
- Interactive terminal use:交互式终端使用
- Web interface:Web 界面
1.1.3. 可以做什么
- CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置
- Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏
- Block Profiling:阻塞分析,记录 goroutine 阻塞等待同步(包括定时器通道)的位置
- Mutex Profiling:互斥锁分析,报告互斥锁的竞争情况