go工具pprof部署

2023-02-13,,

在做内存分析时,用到了pprof,这里做一下部署介绍和入门级别的使用。

pprof是golang的性能工具,有两种交互方式:命令行交互和web交互,同时还支持性能分析数据的图形化展示。

部署pprof:

在我们的kubeedge代码的edgecore.go里,import导入两个包,再加入访问pprof数据的http server并用goroutine启用。端口号无特殊要求,只要未被占用就行:

编译出包,netstat –anp | grep 6060查看到端口占用情况。

访问pprof数据:

1、打开浏览器访问http://ip:port/debug/pprof,可以看到如下的界面:

2、Pprof数据还可用命令行工具进行访问分析:

确保环境上安装了go,使用如下命令显示heap数据:

go tool pprof http://127.0.0.1:6060/debug/pprof/heap

然后可以输入top10,top20 –cum等命令来分析内存占用情况。

在命令行中可以加入–inuse_space,-alloc_space等参数,分别表示“当前使用的”和”已分配的”。

top下的参数(查看的是内存信息的话,单位就是内存占用量和百分比;查看的是CPU信息的话,单位就是时间):

(1)    flat: 占用的内存量

(2)    flat%: 内存占使用中内存总量的百分比

(3)    sum%: 前面每一行flat%的和

(4)    cum:累积量,如果当前函数调用了另一个函数,另一个函数占用的内存也会被计算

(5)    cum%: 累积量占总量的百分比

分析goroutine泄漏:

在分析内存的时候,常见的内存泄漏可能是goroutine导致的,比如某个goroutine中有channel阻塞,导致goroutine回收不了,总之就是goroutine没有按照预期退出,而是程序结束时才退出。

定位goroutine泄漏,可以再web上点开goroutine,点开默认是debug=1:

Url请求中设置debug=2:

以上是一些我在定位过程中使用到的,pprof还有很多命令可供使用,还支持图形界面的访问,能自动绘制出内存的使用情况包括函数的调用关系,但是我在尝试的时候一直没有成功,感兴趣的可以试一下。

推荐两篇关于pprof定位内存泄漏问题的文章:

https://www.cnblogs.com/sunsky303/p/11077030.html

https://lrita.github.io/2017/05/26/golang-memory-pprof

go工具pprof部署的相关教程结束。

《go工具pprof部署.doc》

下载本文的Word格式文档,以方便收藏与打印。