定位golang内存泄露

栏目: Go · 发布时间: 5年前

内容简介:内存问题一直是服务器一个老大难,最近线上有遇到一个棘手的内存泄露。记录分享一下 希望可以起到抛砖引玉的效果。同时给方便自己好记性不如烂笔头。使用 gin web框架所以使用了 github.com/DeanThompson/ginpprof

内存问题一直是服务器一个老大难,最近线上有遇到一个棘手的内存泄露。记录分享一下 希望可以起到抛砖引玉的效果。同时给方便自己好记性不如烂笔头。

使用 gin web框架

所以使用了 github.com/DeanThompson/ginpprof

用法 跟 pprof 一样 只是 复用ginweb端口

go tool pprof -inuse_space http://***.com/debug/pprof/heap

定位golang内存泄露

pprof.png

我这个懒捣鼓半天,最好想看下堆栈

定位golang内存泄露

看内存堆栈1.png

定位golang内存泄露

查看堆栈2.png

定位golang内存泄露

坑爹代码.png

结果是gorm 事务 begin了,在特定条件下 没有 Commit 或者 Rollback 。导致内存泄露。socket 句柄泄露。

#使用指令 查看句柄
lsof
定位golang内存泄露

查看句柄.png

#统计句柄数量
lsof |grep TCP|wc -l
定位golang内存泄露

统计句柄数.png

#进程句柄
ll /proc/pid/fd
#统计进程句柄数
ll /proc/pid/fd|wc -l
定位golang内存泄露

根据进程号查句柄.png

变量使用范围特别重要,因为分支会导致结果不一样。加大定位难度。

想c++(cppcheck) java(findbugs) 有代码分析 工具 可以分出这个bug避免用写轮眼找bug(我的眼快瞎了都是血丝)。go 的话 golint 和 gometalinter。不过 不知道 是我有点傻不拉几。一直分析出来的结果跟我要的有差役(持续学习ing)。goland集成的是可以分析到函数未使用更深级别的分析还找到有这样牛逼的软件。如果有找到 可以分享给我,一起交流成长。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

CSS3实用指南

CSS3实用指南

吉伦瓦特 / 屈超、周志超 / 人民邮电出版社 / 2012-3 / 49.00元

CSS3为Web的视觉样式语言注入了强大的新功能,让设计人员更加轻松自如地设计优美而引人入胜的内容。借助CSS3,不使用图片就可以创建半透明背 景、渐变、阴影等夺人眼球的视觉效果;还可以使用漂亮、独特、非Web安全的字体显示文本;不用Flash就可以创建动画;不用JavaScript就可 以定制适应用户的设备和屏幕尺寸的设计。 本书通过一系列实用且新颖的范例,向读者展示如何实现以上功能和更多......一起来看看 《CSS3实用指南》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具