内存泄漏检测方法、装置以及计算机可读存储介质

阅读: 评论:0

著录项
  • CN201910799442.X
  • 20190827
  • CN112445686A
  • 20210305
  • OPPO(重庆)智能科技有限公司
  • 郑健平
  • G06F11/34
  • G06F11/34 G06F11/36

  • 重庆市渝北区玉峰山镇玉龙大道188号
  • 重庆(50)
  • 深圳市世纪恒程知识产权代理事务所
  • 胡海国
摘要
本发明公开了一种内存泄漏检测方法、装置以及计算机可读存储介质,在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值;根据所述堆栈申请信息和预设定位条件确定内存泄漏位置。实现了通过对应用进程的占用内存进行监控,在占用内存处于预设范围内时,对该时间段内的应用进程的堆栈申请信息进行记录、分析确定内存泄漏位置,选择性的记录分析能够提升内存泄漏检测期间用户终端的运行性能,进而提升用户体验。
权利要求

1.一种内存泄漏检测方法,其特征在于,所述内存泄漏检测方法包括以下步骤:

在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值;

根据所述堆栈申请信息和预设定位条件确定内存泄漏位置。

2.如权利要求1所述的内存泄漏检测方法,其特征在于,所述堆栈申请信息包括申请内存大小,所述根据所述堆栈申请信息和预设定位条件确定内存泄漏位置的步骤包括:

将申请内存大小大于或者等于第三内存阈值的堆栈作为目标堆栈;

根据所述目标堆栈与代码位置的对应关系确定发生内存泄漏的代码位置。

3.如权利要求1所述的内存泄漏检测方法,其特征在于,所述堆栈申请信息包括申请次数,所述根据所述堆栈申请信息和预设定位条件确定内存泄漏位置的步骤包括:

将申请次数大于或者等于申请次数阈值的堆栈作为目标堆栈;

根据所述目标堆栈与代码位置的对应关系确定发生内存泄漏的代码位置。

4.如权利要求1所述的内存泄漏检测方法,其特征在于,所述在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值的步骤之前,包括:

在当前应用进程的占用内存小于第一内存阈值时,通过第一调试库为所述当前应用进程分配内存。

5.如权利要求4所述的内存泄漏检测方法,其特征在于,所述在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值的步骤包括:

在监控到当前应用进程的占用内存增长至第一内存阈值时,通过第二调试库为所述当前应用进程分配内存,并通过所述第二调试库对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值。

6.如权利要求5所述的内存泄漏检测方法,其特征在于,所述在当前应用进程的占用内存大于第一内存阈值且小于第二内存阈值时,对所述当前应用进程的堆栈申请信息进行记录的步骤之后,包括:

在当前应用进程的占用内存大于第二预设阈值时,通过所述第一调试库为所述当前应用进程分配内存。

7.如权利要求1所述的内存泄漏检测方法,其特征在于,所述根据所述堆栈申请信息和预设定位条件确定内存泄漏位置的步骤之后,还包括:

在检测到所述内存泄漏位置对应的内存被释放时,删除记录的所述当前应用进程的堆栈申请信息。

8.如权利要求1所述的内存泄漏检测方法,其特征在于,所述在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值的步骤之前,还包括:

在接收到内存泄漏检测指令时,获取所述内存泄漏检测指令携带的进程标识、第一内存阈值和第二内存阈值;

根据所述第一内存阈值和第二内存阈值对所述进程标识对应的当前应用进程的占用内存进行监控。

9.一种内存泄漏检测装置,其特征在于,所述内存泄漏检测装置包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的内存泄漏检测程序,所述内存泄漏检测程序被所述处理器执行时实现如权利要求1至8中任一项所述的内存泄漏检测方法的步骤。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有内存泄漏检测程序,所述内存泄漏检测程序被处理器执行时实现如权利要求1至8中任一项所述的内存泄漏检测方法的步骤。

说明书
技术领域

本发明涉及信息传输技术领域,尤其涉及一种内存泄漏检测方法、装置以及计算机可读存储介质。

内存泄露这类问题的一大特点是它在开发的过程中难以发现,大部分内存泄露问题都是在生产环境阶段发现的,因为内存泄露在通常情况下,并不会影响应用的功能,直到应用运行时间足够长,请求或者操作足够多的话,问题才会暴露,同时也会带来一些损失。而且让开发者更头疼的是,即使发现的应用存在内存泄露,由于缺乏充足的理论知识和调试方法,导致泄露的位置也很难定位。

现有用户机器的进程发生内存泄露时,通常要通过在用户机器中加入调试手段,然后进行压力复现才能发现相关的内存泄露位置,但是内存泄露的问题有些是低概率的,所以压力不一定能复现,而且在用户机器中直接加入调试手段,巨大的运算量和长时间的运算又会导致用户机器性能变差,定位效率低下,用户体验较差。

本发明的主要目的在于提供一种内存泄漏检测方法、装置以及计算机可读存储介质,旨在有选择性的记录、分析堆栈申请信息,以提升内存泄漏检测期间用户终端的运行性能。

为实现上述目的,本发明提供一种内存泄漏检测方法,所述内存泄漏检测方法包括以下步骤:

在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值;

根据所述堆栈申请信息和预设定位条件确定内存泄漏位置。

可选地,所述堆栈申请信息包括申请内存大小,所述根据所述堆栈申请信息和预设定位条件确定内存泄漏位置的步骤包括:

将申请内存大小大于或者等于第三内存阈值的堆栈作为目标堆栈;

根据所述目标堆栈与代码位置的对应关系确定发生内存泄漏的代码位置。

可选地,所述堆栈申请信息包括申请次数,所述根据所述堆栈申请信息和预设定位条件确定内存泄漏位置的步骤包括:

将申请次数大于或者等于申请次数阈值的堆栈作为目标堆栈;

根据所述目标堆栈与代码位置的对应关系确定发生内存泄漏的代码位置。

可选地,所述在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值的步骤之前,包括:

在当前应用进程的占用内存小于第一内存阈值时,通过第一调试库为所述当前应用进程分配内存。

可选地,所述在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值的步骤包括:

在监控到当前应用进程的占用内存增长至第一内存阈值时,通过第二调试库为所述当前应用进程分配内存,并通过所述第二调试库对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值。

可选地,所述在当前应用进程的占用内存大于第一内存阈值且小于第二内存阈值时,对所述当前应用进程的堆栈申请信息进行记录的步骤之后,包括:

在当前应用进程的占用内存大于第二预设阈值时,通过所述第一调试库为所述当前应用进程分配内存。

可选地,所述根据所述堆栈申请信息和预设定位条件确定内存泄漏位置的步骤之后,还包括:

在检测到所述内存泄漏位置对应的内存被释放时,删除记录的所述当前应用进程的堆栈申请信息。

可选地,所述在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值的步骤之前,还包括:

在接收到内存泄漏检测指令时,获取所述内存泄漏检测指令携带的进程标识、第一内存阈值和第二内存阈值;

根据所述第一内存阈值和第二内存阈值对所述进程标识对应的当前应用进程的占用内存进行监控。

进一步地,为实现上述目的,本发明还提出一种内存泄漏检测装置,所述内存泄漏检测装置包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的内存泄漏检测程序,所述内存泄漏检测程序被所述处理器执行时实现如上述所述的内存泄漏检测方法的步骤。

进一步地,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有内存泄漏检测程序,所述内存泄漏检测程序被处理器执行时实现如上所述的内存泄漏检测方法的步骤。

本发明提出的内存泄漏检测方法,在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值;根据所述堆栈申请信息和预设定位条件确定内存泄漏位置。实现了通过对应用进程的占用内存进行监控,在占用内存处于预设范围内时,对该时间段内的应用进程的堆栈申请信息进行记录、分析确定内存泄漏位置,选择性的记录分析能够提升内存泄漏检测期间用户终端的运行性能,进而提升用户体验。

图1为本发明内存泄漏检测装置的功能模块示意图;

图2为本发明内存泄漏检测方法第一示例性实施例的流程示意图;

图3为本发明内存泄漏检测方法第二示例性实施例的流程示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明实施例的主要解决方案是:在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值;根据所述堆栈申请信息和预设定位条件确定内存泄漏位置。实现了通过对应用进程的占用内存进行监控,在占用内存处于预设范围内时,对该时间段内的应用进程的堆栈申请信息进行记录、分析确定内存泄漏位置,选择性的记录分析能够提升内存泄漏检测期间用户终端的运行性能,进而提升用户体验。

现有用户机器的进程发生内存泄露时,通常要通过在用户机器中加入调试手段,然后进行压力复现才能发现相关的内存泄露位置,但是内存泄露的问题有些是低概率的,所以压力不一定能复现,而且在用户机器中直接加入调试手段,巨大的运算量和长时间的运算又会导致用户机器性能变差,定位效率低下,给用户带来较差的体验。

基于此,本发明实施例提出一种解决方案,可以通过对应用进程的占用内存进行监控,在占用内存处于预设范围内时,对该时间段内的应用进程的堆栈申请信息进行记录、分析确定内存泄漏位置,选择性的记录分析能够提升内存泄漏检测期间用户终端的运行性能,进而提升用户体验。

具体地,参照图1,图1为本发明内存泄漏检测装置的功能模块示意图。该内存泄漏检测装置可为PC或者移动终端等可进行数据处理的终端、服务器,或者为独立的内存泄漏检测装置,该独立的内存泄漏检测装置可以承载于上述终端或服务器上,本实施例以内存泄漏检测装置承载于移动终端进行举例。

在本实施例中,该内存泄漏检测装置至少包括输出模块110、处理器120、存储器130以及通信模块140。

存储器130中存储有操作系统以及内存泄漏检测程序,内存泄漏检测装置在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值后,可将对所述当前应用进程的堆栈申请信息的记录信息存储于该存储器130中,并可以在存储器130中设置相应的存储目录,可用于按照时间轴存储所述记录信息;输出模块110可为显示屏,显示屏可用于在完成内存泄漏位置定位后,将内存泄漏位置显示在屏幕上。通信模块140可以包括WIFI模块以及移动通信模块,通过通信模块140与外部云端或服务器进行交互以获取内存泄漏检测指令。

其中,存储器130中的内存泄漏检测程序被处理器执行时实现以下步骤:

在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值;

根据所述堆栈申请信息和预设定位条件确定内存泄漏位置。

本实施例通过上述方案,在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值;根据所述堆栈申请信息和预设定位条件确定内存泄漏位置。实现了通过对应用进程的占用内存进行监控,在占用内存处于预设范围内时,对该时间段内的应用进程的堆栈申请信息进行记录、分析确定内存泄漏位置,选择性的记录分析能够提升内存泄漏检测期间用户终端的运行性能,进而提升用户体验。

本发明内存泄漏检测装置的具体实施方式与下述内存泄漏检测方法各实施例基本相同,在此不再赘述。

基于上述装置架构,提出本发明方法实施例。

参照图2,图2为本发明内存泄漏检测方法第一示例性实施例的流程示意图。该实施例中,所述内存泄漏检测方法包括以下步骤:

步骤S10,在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值;

本实施例方法的执行主体可以为手机、平板电脑等用户终端。

现有用户机器的进程发生内存泄露时,通常要通过在用户机器中加入调试手段,然后进行压力复现才能发现相关的内存泄露位置,但是内存泄露的问题有些是低概率的,所以压力不一定能复现,而且在用户机器中直接加入调试手段,巨大的运算量和长时间的运算又会导致用户机器性能变差,定位效率低下,用户体验较差。

为解决现有技术中内存泄漏定位效率低下的技术问题,在本发明实施例中,对当前应用进程所占用的内存大小进行监控,在监控到当前应用进程的占用内存增长至第一内存阈值时,开始对当前应用进程的堆栈申请信息进行记录,直至当前应用进程的占用内存增长至第二内存阈值时停止记录该进程的堆栈申请信息。

进一步地,在步骤S10之前还包括,在接收到内存泄漏检测指令时,获取所述内存泄漏检测指令携带的进程标识;根据所述进程标识获取与所述进程标识对应的第一内存阈值和第二内存阈值,根据所述第一内存阈值和第二内存阈值对所述进程标识对应的当前应用进程的占用内存进行监控。所述内存泄漏检测指令携带的进程标识可以包括一个或者多个,即本实施例可以对多个应用进程进行内存泄漏检测。

可以理解的,第一内存阈值小于第二内存阈值。本实施例不对第一内存阈值和第二内存阈值的大小做具体限定,本领域技术人员可根据需要设置,例如,对于视频、图像编辑类软件,由于此类软件平均占用内存要高于普通文字编辑类软件,因此可对其设置较高的内存阈值,例如可设置第一内存阈值为3G,第二内存阈值为3.3G;而对于普通文字编辑类软件,则可设置较低的内存阈值,例如可设置第一内存阈值为1G,第二内存阈值为1.2G。

步骤S20,根据所述堆栈申请信息和预设定位条件确定内存泄漏位置。

在本实施例中,每个应用进程都有与之相对应的堆栈申请信息,但若是对所有应用进程的所有堆栈申请信息进行记录,则会占用大量的系统内存,对所有应用进程的所有堆栈申请信息的分析更会长时间的占用大量系统CPU,不仅定位效率低下,还会大大降低用户终端的性能甚至导致用户终端无法正常使用。因此本实施仅对当前应用进程的特定时间段内的堆栈申请信息进行记录和分析,因而能够提高内存泄漏的定位效率,并且能将对用户终端的性能影响尽可能的降低,影响时长也尽可能的减短,从而能够提升用户体验。

具体地,堆栈申请信息包括申请内存大小和/或申请次数,申请内存大小指的是在占用内存从第一内存阈值增长至第二内存阈值这段时间内,当前应用进程的某一个堆栈每次所申请的内存空间的大小,申请次数指的是在这段时间内当前应用进程的同一堆栈申请内存空间的总次数。在获取到当前应用进程的堆栈申请信息后,根据申请内存大小和/或申请次数和预设内存阈值和/或申请次数阈值确定最有可能发生内存泄漏的目标堆栈,从而根据目标堆栈确定内存泄漏位置。

本实施例公开的内存泄漏检测方法,在监控到当前应用进程的占用内存增长至第一内存阈值时,对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值;根据所述堆栈申请信息和预设定位条件确定内存泄漏位置。实现了通过对应用进程的占用内存进行监控,在占用内存处于预设范围内时,对该时间段内的应用进程的堆栈申请信息进行记录、分析确定内存泄漏位置,选择性的记录分析能够提升内存泄漏检测期间用户终端的运行性能,进而提升用户体验。

进一步地,参照图3,图3为本发明内存泄漏检测方法第一示例性实施例的流程示意图。提出本发明内存泄漏检测方法第二实施例,上述步骤S10之前包括:

步骤S101,在当前应用进程的占用内存小于第一内存阈值时,通过第一调试库为所述当前应用进程分配内存。

在本实施例中,在用户终端中安装有第一调试库,第一调试库仅具有内存分配功能,没有堆栈申请信息记录功能,由于记录堆栈申请信息会降低用户终端的运行性能,影响用户的正常使用,因此在运行第一调试库时,用户终端的运行性能会高于运行有堆栈申请信息记录功能的调试库时的用户终端。

具体地,对当前应用进程所占用的内存大小进行监控,在当前应用进程的占用内存小于第一内存阈值时,说明当前应用进程正常运行,未发生内存泄漏,不需要对该进程进行堆栈申请信息记录,更不需要对其进行内存泄漏位置定位,因此,在保证用户终端运行性能的基础上,运行第一调试库为当前应用进程分配内存。

进一步地,上述步骤S10包括:

步骤S11,在监控到当前应用进程的占用内存增长至第一内存阈值时,通过第二调试库为所述当前应用进程分配内存,并通过所述第二调试库对所述当前应用进程的堆栈申请信息进行记录,直至所述占用内存增长至第二内存阈值。

在本实施例中,在用户终端中还安装有第二调试库,第二调试库既具有内存分配功能,也具有堆栈申请信息记录功能,由于记录堆栈申请信息会降低用户终端的运行性能,影响用户的正常使用,因此在运行第二调试库时,用户终端的运行性能会低于运行第一调试库时的用户终端。

为降低对用户终端的运行性能的影响,仅对当前应用进程的占用内存处于第一内存阈值至第二内存阈值这一阶段的堆栈申请信息进行记录,以将对用户终端的运行性能的影响尽可能的减小。

进一步地,所述第一调试库可选为libc.so库,所述第二调试库可选为libc_deubg.so库。

进一步地,上述步骤S20之后,包括:

步骤S201,在当前应用进程的占用内存大于第二预设阈值时,通过所述第一调试库为所述当前应用进程分配内存。

在本实施例中,由于通过步骤S11对当前应用进程的占用内存处于第一内存阈值至第二内存阈值这一阶段的堆栈申请信息进行记录,通过这段时间的堆栈申请信息已经可以确定内存泄漏位置,因此,在当前应用进程的占用内存增长至大于第二预设阈值以后,若再对当前应用进程的堆栈申请信息进行记录,于内存泄漏定位没有更大的帮助,反而会严重降低用户终端的运行性能,影响用户的正常使用,故而在当前应用进程的占用内存增长至大于第二预设阈值以后,由第二调试库切换为第一调试库,仅对当前应用进程分配内存,而不记录堆栈申请信息,以提升用户终端的运行性能,进而提升用户体验。

进一步地,提出本发明内存泄漏检测方法第三实施例,进一步地,所述堆栈申请信息包括申请内存大小,上述步骤S20包括:

步骤S21,将申请内存大小大于或者等于第三内存阈值的堆栈作为目标堆栈;

在本实施例中,申请内存大小指的是在占用内存从第一内存阈值增长至第二内存阈值这段时间内,当前应用进程的某一个堆栈通过内存申请函数每次所申请的内存空间的大小。在这段时间内,当前应用进程的堆栈可能有一个或者多个,本实施例需要根据堆栈申请信息确定当前应用进程的每个堆栈是否为目标堆栈,因而目标堆栈也可能有一个或者多个。

可以理解的是,在这段时间内,当前应用进程的某一个堆栈可能会申请一次或者多次内存空间,若在这段时间内,当前应用进程的某一个堆栈仅申请了一次内存空间,则判断该次申请的申请内存大小是否大于或者等于第三内存阈值,若是,则将该堆栈作为有可能发生内存泄漏的目标堆栈;若在这段时间内,当前应用进程的某一个堆栈申请了多次内存空间,则判断这些申请中是否存在申请内存大小大于或者等于第三内存阈值的申请,若存在,则将该堆栈作为有可能发生内存泄漏的目标堆栈。

本实施例不对第三内存阈值的大小做具体限定,本领域技术人员可根据需要设置。例如,第三内存阈值可为20M,若当前应用进程的某一个堆栈某次申请内存大小大于或者等于20M,则将该堆栈作为目标堆栈。

步骤S22,根据所述目标堆栈与代码位置的对应关系确定发生内存泄漏的代码位置。

在本实施例中,由于在堆栈中有显示具体是由哪一段代码发起的此次内存分配,即目标堆栈与代码位置具有对应关系,因此,在确定有可能发生内存泄漏的目标堆栈后,即可根据目标堆栈与代码位置的对应关系确定出现内存泄漏问题的代码位置。

进一步地,所述堆栈申请信息包括申请次数,上述步骤S20包括:

步骤S23,将申请次数大于或者等于申请次数阈值的堆栈作为目标堆栈;

在本实施例中,申请次数指的是在占用内存从第一内存阈值增长至第二内存阈值这段时间内,当前应用进程的同一个堆栈通过内存申请函数申请内存空间的总次数。在这段时间内,当前应用进程的堆栈可能有一个或者多个,目标堆栈也可能有一个或者多个。

可以理解的是,判断在这段时间内当前应用进程的某一个堆栈申请内存空间的申请次数是否大于或者等于申请次数阈值,若是,则将该堆栈作为有可能发生内存泄漏的目标堆栈。本实施例不对申请次数阈值的大小做具体限定,本领域技术人员可根据需要设置。

进一步地,本实施例还可以将在这段时间内当前应用进程的所有堆栈的内存申请次数按照大小排序,将申请次数最多且申请内存大小相同的一个或者多个堆栈作为目标堆栈。例如,若当前应用进程的某一个堆栈50000次申请的申请内存大小为2066字节,则将该堆栈作为目标堆栈。

步骤S24,根据所述目标堆栈与代码位置的对应关系确定发生内存泄漏的代码位置。

在本实施例中,由于在堆栈中有显示具体是由哪一段代码发起的此次内存分配,即目标堆栈与代码位置具有对应关系,因此,在确定有可能发生内存泄漏的目标堆栈后,即可根据目标堆栈与代码位置的对应关系确定出现内存泄漏问题的代码位置。

上述通过申请内存大小或者申请次数确定内存泄漏位置的方法可以各自单独实施,也可以组合在一起实施,本实施例不做限制。

在本实施例中,通过申请内存大小和/或申请次数对当前应用进程的堆栈进行筛选,得到可能发生内存泄漏的目标堆栈,从而确定内存泄漏位置,能够简化内存泄漏定位过程,降低运算量,提升内存泄漏定位效率。

进一步地,提出本发明内存泄漏检测方法第四实施例,上述步骤S10之前还包括:

步骤S102,在接收到内存泄漏检测指令时,获取所述内存泄漏检测指令携带的进程标识、第一内存阈值和第二内存阈值;

在本实施例中,内存泄漏检测指令的发送有两种方式,一种是运维人员在需要对用户终端进行内存泄漏监控和检测时,可通过与用户终端通信连接的服务器向用户终端发送内存泄漏检测指令,另一种是,在运维人员设置的预设检测时间,与用户终端通信连接的服务器自动向用户终端发送内存泄漏检测指令,该内存泄漏检测指令携带有一个或者多个进程标识。用户终端在接收到内存泄漏检测指令时,可从该内存泄漏检测指令中获取需要进行监控和检测的应用进程的进程标识。

可以理解的,第一内存阈值小于第二内存阈值。本实施例不对第一内存阈值和第二内存阈值的大小做具体限定,本领域技术人员可根据需要设置,例如,对于视频、图像编辑类软件,由于此类软件平均占用内存要高于普通文字编辑类软件,因此可对其设置较高的内存阈值,例如可设置第一内存阈值为3G,第二内存阈值为3.3G;而对于普通文字编辑类软件,则可设置较低的内存阈值,例如可设置第一内存阈值为1G,第二内存阈值为1.2G。

步骤S103,根据所述第一内存阈值和第二内存阈值对所述进程标识对应的当前应用进程的占用内存进行监控。

在获取到需要进行监控的进程标识后,用户终端根据第一内存阈值和第二内存阈值对进程标识对应的当前应用进程的占用内存进行监控。若进程标识有多个,则对多个进程标识对应的当前应用进程的占用内存分别进行监控,进而分别确定多个进程对应的内存泄漏位置。

进一步地,上述步骤S20之后还包括:

在检测到所述内存泄漏位置对应的内存被释放时,删除记录的所述当前应用进程的堆栈申请信息。

在本实施例中,在确定内存泄漏位置后,运维人员可对用户终端的当前应用进程发生内存泄露的原因进行分析,例如activity或fragment被静态持有;在activity销毁时,handler的任务还在执行中;资源未关闭等原因引起的内存泄漏问题,进而采用对应的方法消除该内存泄漏,例如对于访问本地数据库的时候,为了不经常启动和关闭数据库,会保持一段时间对数据库的联系造成的内存泄漏,及时关闭数据库即可实现内存释放。

由于记录的当前应用进程的堆栈申请信息的记录信息会占用系统内存,若长时间保存在系统用内存中,会减少用户终端的正常可用内存,为避免这种情况,可在检测到内存泄漏位置对应的内存被释放时,及时删除对当前应用进程的堆栈申请信息的记录信息,实现内存的及时释放。

此外,本发明实施例还提出一种内存泄漏检测装置,所述内存泄漏检测装置包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的内存泄漏检测程序,所述内存泄漏检测程序被所述处理器执行时实现如上述实施例所述的内存泄漏检测方法的步骤。

由于本内存泄漏检测程序被处理器执行时,采用了前述所有实施例的全部技术方案,因此至少具有前述所有实施例的全部技术方案所带来的所有有益效果,在此不再一一赘述。

此外,本发明实施例还提出一种计算机可读存储介质。所述计算机可读存储介质上存储有内存泄漏检测程序,所述内存泄漏检测程序被处理器执行时实现如上所述的内存泄漏检测方法的步骤。

由于本内存泄漏检测程序被处理器执行时,采用了前述所有实施例的全部技术方案,因此至少具有前述所有实施例的全部技术方案所带来的所有有益效果,在此不再一一赘述。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,被控终端,或者网络设备等)执行本发明每个实施例的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

本文发布于:2023-04-14 11:21:46,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/1/87143.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图