性能分析工具pprof | 青训营笔记

144 阅读3分钟
这是我参与「第五届青训营 」伴学笔记创作活动的第4天。

主要是记录课程视频当中性能分析工具pprof的使用。

一、运行课程项目

运行go-pprof-practice-master目录下main.go文件,打开浏览器,输入网址http://localhost:6060/debug/pprof/,可以看到性能的采样数据,比如allocs指的是内存分配的情况,block指的是阻塞的情况。

1.jpg

二、命令行定位代码性能问题

打开终端,输入以下命令

go tool pprof “<http://localhost:6060/debug/pprof/profile?second=10>”

该命令可以直接采集10秒(由second参数决定)的服务数据。能够帮助我们定位哪里的代码性能有问题。 在(pprof)后面输入top命令会展示下图结果,其中这五个参数分别指代:

flat 当前函数本身执行耗时(占比最大的一般都是性能需要优化的)

flat% 占CPU总时间的比例

sum% 上面每一行的flag%总和

cum 指当前函数本身加上其调用函数的总耗时

cum% cum占CPU总时间的比例 2.jpg 我们从上图可以很清晰的发现tiger.Eat函数占用运行时间过长,输入list Eat指令定位到函数中哪个区域占用时间过长。 image.png 这里可以看到有一个for循环占用时间过长,回到编译器把23-26行代码注释掉。

三、web命令调用浏览器查询命令关系图

重新运行main.go,在终端输入命令

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

其中pprof/后面跟的参数决定查询的性能问题,这里heap是指查询堆内存问题,如果是block则查询阻塞问题,goroutine查询协程占用问题,mutex查询锁问题。

此时我们如果发现并不能像课程中那样打开浏览器页面,并且出现下列语句报错。

Could not execute dot; may need to install graphviz.

说明需要安装graphviz文件

安装包链接graphviz-2.38.msi

下载完后双击msi文件,除了图二问你Select Installation Folder让你选择安装位置,一路点next就行。

配置环境变量。对桌面上的“此电脑”右键,点击属性,点击高级系统设置,点击环境变量,在系统变量中下拉找到Path双击。在Path处末尾如下图把你安装的graphviz的文件夹下的bin文件路径粘贴进来。 3.jpg 这里bin文件的地址可以打开你刚刚选择安装的graphviz文件地址,找到bin文件所在的地址,把它的地址复制粘贴到环境变量的path当中。 4.jpg 在终端输入dot -version,出现版本信息,即安装成功。(如果还是不理解配置的话建议打开文章末尾的csdn文章链接,里面讲了graphviz的安装教程)

回到刚刚的实验步骤,再次输入命令

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

此时能够打开网页出现下图结果。 5.jpg 我们能够发现mouse.steal函数占用内存空间过大,点击view菜单下的source。 6.jpg 可以出现原代码中内存占用的代码位置 7.jpg 在红线处输入mouse敲回车,就能找到原代码占用内存过大的位置。 8.jpg 回到原代码注释掉此处代码,重新运行代码,再次从终端中输入命令

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

image.png 同理我们可以查询其他几种性能优化的问题,也就是将命令末尾的heap改为block,goroutine,mutex等等,同样的方法查询并注释原代码当中的性能问题。

总结

没有总结

参考

Graphviz安装配置教程(图文详解)_振华OPPO的博客-CSDN博客_graphviz安装