{eval=Array;=+count(Array);}

问答专栏Q & A COLUMN

怎样解决Linux内存泄漏?

zhonghanwenzhonghanwen 回答0 收藏1
收藏问题

1条回答

jerry

jerry

回答于2022-06-27 17:09

这个问题,不属于我的专长,我转载一个解答:


内存泄露的查询有很多方式,可以借助自动化工具(github或相关网络资源上找),往往出现内存泄露时可以有以下几种方式来排查:

review代码。如果代码量不是很大,并且有交叉review的习惯。可以在初期解决掉。

使用内存泄露检查工具,网上有很多工具,我列举几个可以尝试的:

vagrind 这个工具会帮你检查出怀疑点,它分好几个等级来怀疑内存泄露,注意确定那个等级。

还有vagrind 跑进程需要添加符号表,这样很容易显示出具体代码哪个位置出现泄露。

添加符号表导致动态库太大,无法在板子中复现。可以通过内置的gdb外挂,或者仅仅添加基础libc库的符号表(libc.so 应该是这个?)。

mtrace

原理:对malloc 函数进行封装和记录改造,使每次调用内存相关的底层函数有依据可查找,。

使用时需要在每个使用过内存函数的地方增加该工具自带的头文件。这点会比较麻烦。

当上面的几种都分析不出来时,需要了解更底层的内存管理机制。

例如:生成的每个线程都会有自己arean内存用于本身线程使用,所以在多线程的情况下会导致arean内存变多,且在达到一定数量后会继续复用。导致最终内存大范围的丢失掉。此时需要将arean 每次生成大小要减少。

作者:danny113

链接:https://www.jianshu.com/p/fa2d7df5966e

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

评论0 赞同0
  •  加载中...

相关问题

最新活动

您已邀请0人回答 查看邀请

我的邀请列表

  • 擅长该话题
  • 回答过该话题
  • 我关注的人
向帮助了您的网友说句感谢的话吧!
付费偷看金额在0.1-10元之间
<