Go性能调优及相关工具使用(四)——性能调优工具pprof的使用

一、本次学习重点内容:

本堂课的知识要点有哪些?

1、性能发现工具pprof

2、性能调优案例

二、详细知识点介绍:

1、性能调优简介

性能调优原则:

要依靠数据不是猜测

定位最大瓶颈而不是细枝末节

不要过早优化

不要过度优化

2、性能发现工具pprof

说明:

1、希望知道应用在什么地方耗费了多少CPU、Memory

2、pprof是用于可视化和分析性能分析数据的工具

pprof 功能简介

image-20230205183453347

3、pprof 排查实战

下载示例项目,GitHub地址:https://github.com/wolfogre/go-pprof-practice

项目提前埋入了许多炸弹代码,会产生许多可观测性能问题。

扫描二维码关注公众号,回复: 14626254 查看本文章

image-20230205190052825

运行项目,浏览器输入网址:http://localhost:6060/debug/pprof/

看到界面到:

image-20230205190158565

CPU:

使用任务管理器:

image-20230205190525316

使用pprof工具:

**进入pprof:**go tool pprof “http://localhost:6060/debug/pprof/profile?seconds=10”

image-20230205191241899

使用top命令查看CPU状态:

image-20230205191742443

相关含义:

image-20230205191859533

可以清晰看到是那个函数消耗大量资源。

根据指定的正则表达式查找代码行:

命令:list

image-20230205192532151

调用关系可视化:命令:web

这里输出图片相关格式需要先安装graphviz,graphviz安装地址如下

https://graphviz.org/download/

安装后检查环境变量:

dot -version

image-20230205194741042

记住,安装时勾选创建环境变量,安装完成后重启Goland才能读取到最新的环境变量。

一定要重启Goland!!!!!

删除问题代码再次运行:

image-20230205193514393

Heap堆内存:

image-20230205193711928

进入可视化pprof:

命令:

go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/heap”

浏览器输入:

localhost:8082

image-20230205204907978
top视图:

image-20230205205100542

source视图:

image-20230205205226760

注释问题代码后:

image-20230205205751487

可以看到内存占用由85%降到68%

goroutine——协程

查看协程数:

image-20230205214219554

进入可视化pprof:

命令:

go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/goroutine”

浏览器输入:

localhost:8082

image-20230205210106779

火焰图查看

注:

由上到下表示调用顺序

每一块代表一个函数,越长代表占用CPU 的时间更长

火焰图是动态的,支持点击块进行分析

image-20230205210311618

source视图:

image-20230205213949311

注释问题代码后:

image-20230205214340076

mutex——锁

查看锁数:

image-20230205214649797

进入可视化pprof:

命令:

go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/mutex”

浏览器输入:

localhost:8082

image-20230205214831082

source视图:

image-20230205214950274

注释问题代码后:

image-20230205215203788

block——阻塞

查看阻塞数:

image-20230205215324536

进入可视化pprof:

命令:

go tool pprof -http=:8082 “http://localhost:6060/debug/pprof/block”

浏览器输入:

localhost:8082

image-20230205215437546

source视图:

image-20230205215640070

注释问题代码后:

image-20230205215829382

小结:

image-20230205220029629

4、性能调优案例

介绍实际业务服务性能优化的案例,对逻辑相对复杂的程序如何进行性能调优

分类:

业务服务优化

基础库优化

Go语言优化。

业务服务调优:

基本概念:

服务:能单独部署,承载一定功能的程序

依赖:Service A 的功能实现依赖Service B的响应结果,称为 Service A依赖 Service B

调用链路:能支持一个接口请求的相关服务集合及其相互之间的依赖关系

基础库:公共的工具包、中间件

image-20230205220754227
流程

1、建立服务性能评估手段

2、分析性能数据,定位性能瓶颈

3、重点优化项改造

4、优化效果验证

建立服务性能评估手段

服务性能评估方式:

1、单独benchmark无法满足复杂逻辑分析

2、不同负载情况下性能表现差异

请求流量构造:

1、不同请求参数覆盖逻辑不同

2、线上真实流量情况

压测范围:

单机器压测、集群压测

性能数据采集:

单机性能数据、集群性能数据

基础库优化:

AB实验SDK的优化:

1、分析基础库核心逻辑和性能瓶颈

设计完善改造方案

数据按需获取

数据序列化协议优化

2、内部压测验证

3、推广业务服务落地验证

Go语言优化:

编译器&运行时优化:

1、优化内存分配策略

2、优化代码编译流程,生成更高效的程序

3、内部压测验证

4、推广业务服务落地验证

优点:

接入简单,只需要调整编译配置

通用性强

总结:

性能调优原则:

1、要依靠数据不是猜测性能分析工具 pprof

2、熟练使用pprof工具排查性能问题并了解其基本原理性能调优

3、保证正确性·定位主要瓶颈

三、个人总结:

​ 本次学习算是比较深入的了解了性能优化的相关知识。特别是见识到了pprof工具的强大,可以精准地定位问题代码,可视化地展示程序运行中CPU、内存、协程的资源的分配使用。后续的性能调优专业知识也讲的通俗易懂。

猜你喜欢

转载自blog.csdn.net/qq_54353206/article/details/128894551