Go高质量编程与性能调优 | 青训营笔记(续)

82 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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.推广业务服务落地验证。