首页 > 系统相关 >【MLA】一种内存泄漏分析方法

【MLA】一种内存泄漏分析方法

时间:2024-01-23 12:11:07浏览次数:27  
标签:__ 泄漏 MLA do mla sv sh 内存

项目地址:skullboyer/MLA (github.com)

介绍

MLA 即 Memory Leak Analyzer,是一个排查内存泄漏的分析器

实现机制是在malloc时记录分配位置信息,在free时记录释放位置信息,通过两者计数作差可得是否存在泄漏

快速开始

你可以使用提供的脚本do.sh来快速使用本代码库

可以使用./do.sh help命令

-*- help -*-
usage: ./do.sh [generate] [make] [exec] [clean] [help]
    [generate]: -g -G generate

Example usage of the MLA mechanism
$ ./do.sh -g MLA
$ ./do.sh make

Self-validation of MLA mechanisms
$ ./do.sh -g SV
$ ./do.sh make

LOG mechanism implementation analysis
$ ./do.sh -g LOG
$ ./do.sh make

Execute the program to view the results
$ ./do.sh exec

Remove unnecessary code
$ ./do.sh clean

如何使用

你只需两步就可以开始使用了

1、适配mla.h文件中的两个接口malloc和free

/* MLA内部使用的内存管理接口 */
#define MLA_MALLOC(size)    malloc(size)
#define MLA_FREE(addr)      free(addr)

/* 对外提供使用的内存泄漏检查的分配释放接口 */
#define PORT_MALLOC(size)    MlaMalloc(size, __FILENAME__, __func__, __LINE__)
#define PORT_FREE(addr)      MlaFree(addr, __FILENAME__, __func__, __LINE__)

2、在你的代码初始化部分加入接口MlaInit,在查看内存泄漏信息的地方调用接口MlaOutput即可

示例:

通过自证清白来演示MLA的用法

$ ./do.sh -g SV
Generate a example version of the MLA file.

执行上述命令后会生成一些文件,这些是MLA自证的测试文件

$ ./do.sh make
$ ./do.sh exec

执行上述命令后会输出MLA的分析信息,借助Diff字段可以清晰看出有没有内存泄漏

MLA Verbose部分可以看到详细的内存分配和释放信息,包括代码文件名、行数、函数以及分配大小、释放次数等信息

-- SV_MlaOutput:
*                                                                                                                                *
****************************************************** Memory Leak Analyzer ******************************************************
*                                                                                                                                *
*                                                         M L A  N O N E                                                         *

-- MlaOutput:
*                                                                                                                                *
****************************************************** Memory Leak Analyzer ******************************************************
*                                                                                                                                *
 Caller                                                                Hash            Malloc          Free            Diff
 sv_mla.c:316 SV_MlaMalloc                                             52f06d09        3               3               0
 sv_mla.c:214 MlaMallocRecorder                                        1239e656        1               1               0
 sv_mla.c:286 MlaFreeRecorder                                          49583dd0        2               2               0

*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  MLA  Verbose  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*

>1
 Caller                                                                Size            Malloc          Free            Diff
 sv_mla.c:316 SV_MlaMalloc                                             12              3               3               0
*--------------------------------------------------------------------------------------------------------------------------------*
|Verbose:        malloc                          free                                                                            |
|  1.            (12)B - [3]                     sv_mla.c:357 SV_MlaFree - [3]                                                   |
*--------------------------------------------------------------------------------------------------------------------------------*
>2
 Caller                                                                Size            Malloc          Free            Diff
 sv_mla.c:214 MlaMallocRecorder                                        104             1               1               0
*--------------------------------------------------------------------------------------------------------------------------------*
|Verbose:        malloc                          free                                                                            |
|  1.            (104)B - [1]                    sv_mla.c:201 MlaDelItem - [1]                                                   |
*--------------------------------------------------------------------------------------------------------------------------------*
>3
 Caller                                                                Size            Malloc          Free            Diff
 sv_mla.c:286 MlaFreeRecorder                                          88              2               2               0
*--------------------------------------------------------------------------------------------------------------------------------*
|Verbose:        malloc                          free                                                                            |
|  1.            (88)B - [2]                     sv_mla.c:153 MlaProcessFreeNode - [2]                                           |
*--------------------------------------------------------------------------------------------------------------------------------*

共同进步

欢迎大家使用并issue反馈

标签:__,泄漏,MLA,do,mla,sv,sh,内存
From: https://www.cnblogs.com/skullboyer/p/17982038

相关文章

  • namenode内存过大的危害
    1、启动时间变长。NameNode的启动过程可以分成FsImage数据加载、editlogs回放、Checkpoint、DataNode的BlockReport几个阶段。数据规模较小时,启动时间可以控制在~10min以内,当元数据规模达到5亿(Namespace中INode数超过2亿,Block数接近3亿),FsImage文件大小将接近到20GB,加载FsImage数据......
  • hadoop优化namenode内存优化
    Namenode内存配置在Hadoop2.x里,如何配置NameNode内存?NameNode默认内存2000M。如果你的服务器内存是4G,那一般可以把NN内存设置成3G,留1G给服务器维持基本运行(如系统运行需要、DataNode运行需要等)所需就行。在hadoop-env.sh文件中设置:HADOOP_NAMENODE_OPTS=-Xmx3072mHadoop3.x系列,如......
  • 2024新版Windows 11要来了!16GB内存需求引热议 只是推荐配置
    最近,TrendForce集邦咨询的一份报告指出,微软已经将AIPC的内存基线设置为16GB。有媒体表示,这也意味着,新版Windows11的AI功能需要至少16GB内存才能运行。消息曝光后引发热议。对此,WC报道称,微软尚未就上述内存需求发表官方评论。16GB内存很可能只是微软的推荐配置,而非最低配置要求......
  • java内存泄露的排查思路?CPU飙高排查方案与思路?
    java内存泄露的排查思路?1.通过工具,VisualVM去分析dump文件,VisualVM可以加载离线的dump文件2.idea-->文件-->装入--->选择dump文件即可查看堆快照信息3.通过查看堆信息的情况,可以大概定位内存溢出是哪行代码出了问题4.找到对应的代码,通过阅读上下文的情况,进行修复即可CPU飙高......
  • 使用多进程库计算科学数据时出现内存错误
    问题背景我经常使用爬虫来做数据抓取,多线程爬虫方案是必不可少的,正如我在使用Python进行科学计算时,需要处理大量存储在CSV文件中的数据。由于每个处理过程需要很长时间才能完成,而您拥有多核处理器,所以您尝试使用多进程库中的Pool方法来提高计算效率。您按照如下方式构建了多......
  • 梦幻内存!全何为AMD撕裂者打造192GB DDR5-7200
    1月16日消息,全何科技(V-Color)宣布,面向AMD锐龙线程撕裂者7000系列处理器,推出顶级的192GBDDR5内存套装,频率最高可达7200MHz。AMD撕裂者7000系列支持四通道DDR5内存,单系统可以插四根,虽然不及撕裂者PRO7000系列的八通道,但在消费级领域也是无敌的存在。全何新内存采用精选的SK海力士......
  • IDEA 内存设置不生效
    项目内存不够时,特别卡。按照网上的教程,在帮助下更改内存设置,以及编辑虚拟机选项都没有用最终通过启动图标,找到软件安装位置,查看bin.dat文件,发现高级环境配置中指向的IDEA_VM_OPTIONS,指向的是破解文件中的文件位置,手动修改即可参考链接:IDEA内存设置不生效_idea修改内存不生效......
  • ClickHouse中“大列”造成的JOIN的内存超限问题
    ClickHouse中“大列”造成的JOIN的内存超限问题“大列”是指单行数据量非常大的列,通常是100KiB以上。这样的列会导致JOIN(通常LEFTJOIN和INNERJOIN)出现内存超限的异常。常用的JOIN算法这里讨论的是常用的JOIN算法:partialmergejoin与hashjoin。Directjoin算法不在本文......
  • .NET(C#) 内存堆和栈
    ​  参考文档:.Net(C#)内存堆和栈-CJavaPy1、栈(Stack)栈是一种线性数据结构,它以先进先出(LIFO)的方式管理数据。栈主要用于存储方法调用的信息,包括局部变量、方法参数和返回地址等。每个线程都有自己的栈。栈上的数据存储空间由编译器自动管理,因此它具有高速读写的特点。栈上的......
  • js 栈追踪与内存管理
    期约与异步函数的功能有相当程度的重叠,但它们在内存中的表示则差别很大。看看下面的例子,它展示了拒绝期约的栈追踪信息:functionfooPromiseExecutor(resolve,reject){setTimeout(reject,1000,'bar');}functionfoo(){newPromise(fooPromiseExecutor);}fo......