Go性能优化分析工具 | 青训营笔记

127 阅读2分钟

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

性能优化分析工具

这节课讲解了性能优化分析工具,介绍性能调优原则和性能调优工具pprof工具的功能说明、调优的实践应用以及采样过程和原理。

性能调优原则

(1). 要依靠数据而不是纯粹的猜测
(2). 要定位最大的瓶颈处,而不是细枝末节
(3). 不要过早、过度地优化

性能分析工具pprof

在性能调优中,人们希望知道应用在什么地方耗费了多少CPU和内存,而pprof的出现就是用于可视化和分析性能、分析数据的工具。

pprof功能简介

pprof的功能可以简要分为四大类,分别是分析(Profile)、工具(Tool)、展示(View)、采样(Sample)四种,其中分析通过网页和可视化终端呈现;工具有runtime/pprof和net/http/pprof;展示有Top、调用图(Graph)、火焰图、Peek、源码、反汇编;采样有CPU、堆内存、协程、锁、阻塞、线程创建。
image.png

pprof排查实战

要搭建一个pprof实践项目,首先下载源代码,达到能够编译运行的目的,且这一操作会占用1个CPU核心以及超过1GB的内存,提前埋入了一些炸弹代码,注意电脑性能。通过Github链接学习:
go-pprof-practice

对CPU检查:
除了在浏览器内打开本地服务器网页端进行检查,还可以通过go tool:

go tool pprof "http://localhost:6060/debug/pprof/profile?seconds=10"

输入top命令,查看CPU占用情况,可以找到占用资源最多的函数。其中有一些指标:

flat 当前函数本身的执行耗时
flat% flat占CPU总时间的比例
sum% 上面每一行的flat% 总和
cum 指当前函数本身加上其调用函数的总和
cun% cum占CPU总时间的比例

输入list命令,可以根据指定的正则表达式查找代码行。
输入web命令,可以调用关系可视化。

对堆内存检查:

go tool pprof -http=:8080 "http://localhost:6060/debug/pprof/heap"

输入命令后,点击视图View可以选择不同的种类View,Sample有alloc_objects作为程序累计申请的对象数量、inuse_objects作为程序当前持有的对象数量、alloc_space作为程序累计申请的内存大小, inuse_space作为程序当前占用的内存大小。

pprof采样过程及原理