go工具pprof部署
在做内存分析时,用到了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
本文来自博客园,作者:易先讯,转载请注明原文链接:https://www.cnblogs.com/gongxianjin/p/16406390.html