记一次内存泄漏

背景

上个月,有一个跑了很久的服务,突然出现部分机器疯狂内存增长的现象,查看了最近2个月的提交记录,均无发现可疑的情况。排查了上下游的上线情况,也排查了上下游导致的内存情况。
这个服务,其实我也不是很熟悉业务,一方面是我入职后需求不是特别多,另一方面能够问的同事比较少,因为之前相关的人基本在我入职前后就都已离职了。
但是一开始还是挺有自信的,因为排查内存的工具还是挺多的。

排查过程

但是过程并没有那么顺利。
首先想到的是采用的是 valgrind ,但是并没有那么理想。首先我在测试环境测试,并没有复现。其次我在线上环境的时候发现一旦启动了valgrind。由于valgrind导致服务的性能急剧下降(之前看到的文献是能下降了20-30倍), 导致在复杂的线上环境中,一旦启动了valgrind我们的这个服务根本无法正常运行。
bcc套件中还有一个体验更好的工具memcheck, 但是官网提示需要centos7.6之后的内核才能支持。 查了几篇文章,发现有人在7.5上也成功了。所以尝试在7.5的机器上安装,但最后失败。
于是看起来只能通过其他工具来检测。
想到内存泄漏会不会有什么规则,比如每隔一段时间增大多大。这样再根据strace可以找到这部分内存使用的内存的目的,这样也就有了相关线索。
于是用pidstat 对进程进行了内存检测。
但是从秒级到小时级别的检测,均未发现相关线索。
以上方案是我之前排查内存泄漏时候用的主要方式,之前可谓是屡试不爽。但是在这次内存泄漏的排查过程中折了腰。当时心想吃的盐还是太少了。无奈下只能Google。
Google最终的确没让我失望, 发现我们使用的jemalloc中带有一个jeprof的工具。它有一个很大的好处就是不仅可以profile进程当时整个状态的内存使用分布情况, 这样的如果有内存泄漏其实一目了然。
jeprof的使用很简单,首先不需要修改或者植入任何代码。但是如果之前使用的jemalloc没有打开enable prof功能需要重新编译。在启动的时候添加一下参数,然后会生成对应的profile文件供你进行分析。具体这边就不介绍了,可以另行google,网上资料不少。
但是我这有一个疑问目前还没解决,jeprof是不是对内核也有一定要求,因为我在centos 6的机器上使用的时候发现最后的绘图只有address没有显示具体symbols。

总结

jeprof工具大概会影响进程一半的性能,在调试的过程最好将服务的qps调低到平常正常的一半
可以每隔一段时间画一个内存Profile图来分析,我这边在最近一次无聊的中,又新发现了一个内存泄漏(有一个对象没有写析构函数)。通过分析jeprof的内存分布图,可以找到很多平时可能顾及不到的内存问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • 01 机器内存告警,查看jvm内存及gc情况 老年代占比接近90% S0 S1 E O ...
    joefit阅读 1,376评论 1 0
  • 这次c++底层的内存泄漏怎么说呢,让你了解了更多指针内存的东西,说更多了解,反而发现有更多的不了解了,比如指针和整...
    hehehehe阅读 838评论 0 0
  • 最近测试项目,偶然间发现某个地方有内存泄漏的问题,每点开一次该界面,内存都会暴涨10M左右,于是打开XCode自带...
    迷路的字母C阅读 344评论 0 0
  • 问题描述某应用上线几天后,出现了访问速度非常慢的情况,通过日志发现是堆内存溢出错误:java.lang.OutOf...
    kingjang阅读 597评论 0 0
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 5,700评论 0 5