一种内存泄露检测方法、装置、电子设备及存储介质制造方法及图纸

技术编号:33287210 阅读:16 留言:0更新日期:2022-04-30 23:57
本发明专利技术实施例提供了内存泄露检测方法、装置、电子设备及存储介质,监控目标进程运行过程中调用的原生内存分配函数;在所述原生内存分配函数分配待分配内存的过程中,获取所述待分配内存对应的内存栈信息,其中,所述内存栈信息包括内存分配的调用栈地址列表;根据所述内存栈信息,分配数据内存区域及第一预设长度的预留内存区域,其中,所述数据内存区域为所述待分配内存对应的内存区域,所述第一预设长度的预留内存区域为用于存储所述内存栈信息预留的内存区域;将所述内存栈信息存储在所述预留内存区域中;在检测到泄露地址时,在所述泄露地址对应的预留内存区域中读取内存栈信息。可以有效的提高内存泄露检测分析的效率。可以有效的提高内存泄露检测分析的效率。可以有效的提高内存泄露检测分析的效率。

【技术实现步骤摘要】
一种内存泄露检测方法、装置、电子设备及存储介质


[0001]本专利技术涉及计算机应用
,特别是涉及一种内存泄露检测方法、装置、电子设备及存储介质。

技术介绍

[0002]在做Native(一个计算机函数)内存泄露监控分析时,通常需要通过hook(钩子函数)对内存分配函数进行拦截,在程序每次调用内存分配函数时,将获取到的分配函数调用栈信息(以下统称为内存栈信息)进行提取、存储、维护,以便在检测到内存泄露地址后,通过检测到的地址查找对应的内存栈信息位置。
[0003]目前,业界常用的内存栈存储、维护方案是通过全局Map(查找表)和全局锁的方法,参见图1,将获取到的内存栈信息存储到全局Map,并加上锁确保多线程安全。但此方法在多线程情况下会存在明显的性能问题,由于不同线程之间会相互抢占锁资源,导致部分线程甚至主线程短暂的停滞。在此情景下可能会影响用户正常使用App(应用程序),出现明显的操作卡顿、滑动不流畅等负面效果,影响用户体验,无法做到应用程序在线上进行无感知且高效率的内存泄露监控分析。
[0004]因此,如何提高内存泄露监控分析的效率是应用程序整体监控性能提升需要解决的重要问题。

技术实现思路

[0005]本专利技术实施例的目的在于提供一种内存泄露检测方法、装置、电子设备及存储介质,以实现提高内存泄露监控分析效率的目的。具体技术方案如下:
[0006]第一方面,本申请实施例提供了一种内存泄露检测方法,所述方法包括:
[0007]监控目标进程运行过程中调用的原生内存分配函数;
[0008]在所述原生内存分配函数分配待分配内存的过程中,获取所述待分配内存对应的内存栈信息,其中,所述内存栈信息包括内存分配的调用栈地址列表;
[0009]根据所述内存栈信息,分配数据内存区域及第一预设长度的预留内存区域,其中,所述数据内存区域为所述待分配内存对应的内存区域,所述第一预设长度的预留内存区域为用于存储所述内存栈信息预留的内存区域;
[0010]将所述内存栈信息存储在所述预留内存区域中;
[0011]在检测到泄露地址时,在所述泄露地址对应的预留内存区域中读取内存栈信息。
[0012]在一种可能的实施方式中,在所述原生内存分配函数分配待分配内存的过程中,获取所述待分配内存对应的内存栈信息,包括:
[0013]在检测到原生内存分配函数的内存栈信息时,在预设钩子函数中提取所述内存栈信息。
[0014]在一种可能的实施方式中,根据所述内存栈信息,分配数据内存区域及第一预设长度的预留内存区域,包括:
[0015]获取第一预设长度,根据所述内存栈信息及所述第一预设长度,回调所述原生内存分配函数,得到数据内存区域及预留内存区域,其中,所述预留内存区域为所述数据内存区域尾部后的第一预设长度的存储区域。
[0016]在一种可能的实施方式中,将所述内存栈信息存储在所述预留内存区域中,包括:
[0017]在所述预留内存区域中预留第二预设长度的预留空间,在所述预留内存区域的预留空间后存储所述内存栈信息;
[0018]在所述预留空间中写入第二预设长度的预设特征值,并在所述内存栈信息之后写入第二预设长度的预设特征值。
[0019]第二方面,本申请实施例提供了一种内存泄露检测装置,所述装置包括:
[0020]目标进程监控模块,用于在监控目标进程运行过程中调用的原生内存分配函数;
[0021]内存栈信息获取模块,用于在所述原生内存分配函数分配待分配内存的过程中,获取所述待分配内存对应的内存栈信息,其中,所述内存栈信息包括内存分配的调用栈地址列表;
[0022]内存分配模块,用于根据所述内存栈信息,分配数据内存区域及第一预设长度的预留内存区域,其中,所述数据内存区域为所述待分配内存对应的内存区域,所述第一预设长度的预留内存区域为用于存储所述内存栈信息预留的内存区域;
[0023]内存栈信息存储模块,用于将所述内存栈信息存储在所述预留内存区域中;
[0024]内存栈信息读取模块,用于在检测到泄露地址时,在所述泄露地址对应的预留内存区域中读取内存栈信息。
[0025]在一种可能的实施方式中,所述内存栈信息获取模块,具体用于:在检测到原生内存分配函数的内存栈信息时,在预设钩子函数中提取所述内存栈信息。
[0026]在一种可能的实施方式中,所述内存分配模块,具体用于:获取第一预设长度,根据所述内存栈信息及所述第一预设长度,回调所述原生内存分配函数,得到数据内存区域及预留内存区域,其中,所述预留内存区域为所述数据内存区域尾部后的第一预设长度的存储区域。
[0027]在一种可能的实施方式中,所述内存栈信息存储模块具体用于:在所述预留内存区域中预留第二预设长度的预留空间,在所述预留内存区域的预留空间后存储所述内存栈信息;
[0028]在所述预留空间中写入第二预设长度的预设特征值,并在所述内存栈信息之后写入第二预设长度的预设特征值。
[0029]第三方面,本申请实施例提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
[0030]存储器,用于存放计算机程序;
[0031]处理器,用于执行存储器上所存放的程序时,实现本申请中任一所述的内存泄露检测方法。
[0032]第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现本申请中任一所述的内存泄露检测方法。
[0033]本申请实施例提供的内存泄露检测方法、装置、电子设备及存储介质,通过监控目
标进程运行过程中调用的原生内存分配函数;在所述原生内存分配函数分配待分配内存的过程中,获取所述待分配内存对应的内存栈信息,其中,所述内存栈信息包括内存分配的调用栈地址列表;根据所述内存栈信息,分配数据内存区域及第一预设长度的预留内存区域,其中,所述数据内存区域为所述待分配内存对应的内存区域,所述第一预设长度的预留内存区域为用于存储所述内存栈信息预留的内存区域;将所述内存栈信息存储在所述预留内存区域中;在检测到泄露地址时,在所述泄露地址对应的预留内存区域中读取内存栈信息。与现有技术相比,避免了全局Map和全局锁带来的内存分配资源的消耗,无需额外的内存分配,将内存栈信息存储在预留内存区域中,在内存泄露监控分析时可以方便、快速、高效的查找出内存栈信息,从而实现了提高内存泄露监控分析的效率,进而提升了应用程序整体的监控性能。
[0034]当然,实施本申请的任一产品或方法并不一定需要同时达到以上所述的所有优点。
附图说明
[0035]为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
[0036]图1为相关技术中内存栈存储方法的一种示意图;
[0037]图2为本申请实施例的内存泄露检测方法的第本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种内存泄露检测方法,其特征在于,所述方法包括:监控目标进程运行过程中调用的原生内存分配函数;在所述原生内存分配函数分配待分配内存的过程中,获取所述待分配内存对应的内存栈信息,其中,所述内存栈信息包括内存分配的调用栈地址列表;根据所述内存栈信息,分配数据内存区域及第一预设长度的预留内存区域,其中,所述数据内存区域为所述待分配内存对应的内存区域,所述第一预设长度的预留内存区域为用于存储所述内存栈信息预留的内存区域;将所述内存栈信息存储在所述预留内存区域中;在检测到泄露地址时,在所述泄露地址对应的预留内存区域中读取内存栈信息。2.根据权利要求1所述的方法,其特征在于,在所述原生内存分配函数分配待分配内存的过程中,获取所述待分配内存对应的内存栈信息,包括:在检测到原生内存分配函数的内存栈信息时,在预设钩子函数中提取所述内存栈信息。3.根据权利要求1或2所述的方法,其特征在于,根据所述内存栈信息,分配数据内存区域及第一预设长度的预留内存区域,包括:获取第一预设长度,根据所述内存栈信息及所述第一预设长度,回调所述原生内存分配函数,得到数据内存区域及预留内存区域,其中,所述预留内存区域为所述数据内存区域尾部后的第一预设长度的存储区域。4.根据权利要求1所述的方法,其特征在于,将所述内存栈信息存储在所述预留内存区域中,包括:在所述预留内存区域中预留第二预设长度的预留空间,在所述预留内存区域的预留空间后存储所述内存栈信息;在所述预留空间中写入第二预设长度的预设特征值,并在所述内存栈信息之后写入第二预设长度的预设特征值。5.一种内存泄露检测装置,其特征在于,所述装置包括:目标进程监控模块,用于在监控目标进程运行过程中调用的原生内存分配函数;内存栈信息获取模块,用于在所述原生内存分配函数分配待分配内存的过程中,获取所述待分配内存对应的内存栈信息,其中,所述内...

【专利技术属性】
技术研发人员:王润清
申请(专利权)人:北京奇艺世纪科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1