内存泄漏的监控方法、装置及电子设备制造方法及图纸

技术编号:26597015 阅读:14 留言:0更新日期:2020-12-04 21:18
本公开关于一种内存泄漏的监控方法、装置及电子设备,属于计算机应用技术领域。其中,该方法包括:响应于获取的应用程序启动指令,轮询应用程序对应的目标虚拟机堆内存占用状态;在目标虚拟机堆内存占用状态满足堆转储条件时,创建应用程序对应的子进程;执行子进程,以获取与目标虚拟机堆中的数据对应的堆转储文件;对堆转储文件进行分析,确定应用程序中包含的各个内存泄漏对象。由此,通过这种内存泄漏的监控方法,不仅可以有效定位应用程序中存在的内存泄露对象,有效解决内存溢出问题,而且通过独立的进程进行内存泄露监控,无需冻结虚拟机,不会影响应用程序的正常使用。

【技术实现步骤摘要】
内存泄漏的监控方法、装置及电子设备
本公开涉及计算机应用
,尤其涉及一种内存泄漏的监控方法、装置及电子设备。
技术介绍
内存溢出(OutOfMemory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于能提供的最大内存。OOM是安卓应用程序开发中常见的疑难问题。相关技术中,内存泄露是导致内存溢出的一个重要原因。但是,在应用程序投入线上使用之后,对于发生内存泄露的对象很难进行定位,从而导致OOM问题难以解决。
技术实现思路
本公开提供一种内存泄漏的监控方法、装置、电子设备、存储介质及计算机程序产品,以至少解决相关技术中,在应用程序投入线上使用之后,对于发生内存泄露的对象很难进行定位,从而导致OOM问题难以解决的问题。本公开的技术方案如下:根据本公开实施例的第一方面,提供一种内存泄漏的监控方法,包括:响应于获取的应用程序启动指令,轮询所述应用程序对应的目标虚拟机堆内存占用状态;在所述目标虚拟机堆内存占用状态满足堆转储条件时,创建所述应用程序对应的子进程;执行所述子进程,以获取与所述目标虚拟机堆中的数据对应的堆转储文件;对所述堆转储文件进行分析,确定所述应用程序中包含的各个内存泄漏对象。可选地,在本公开第一方面实施例一种可能的实现方式中,所述对所述堆转储文件进行分析,确定所述应用程序中包含的各个内存泄漏对象,包括:创建堆转储分析进程;执行所述堆转储分析进程,以对所述堆转储文件进行分析,确定所述应用程序中包含的各个内存泄漏对象。可选地,在本公开第一方面实施例另一种可能的实现方式中,所述在所述目标虚拟机堆内存占用状态满足堆转储条件时,创建所述应用程序对应的子进程,包括:在当前轮询时刻所述目标虚拟机堆的内存占用率大于第一阈值、且当前轮询时刻的内存占用率大于相邻的前一轮询时刻的内存占用率时,将堆转储触发次数加一;在当前的所述堆转储触发次数大于第二阈值时,创建所述应用程序对应的子进程。可选地,在本公开第一方面实施例再一种可能的实现方式中,所述对所述堆转储文件进行分析,以确定所述应用程序中包含的各个内存泄漏对象,包括:对所述堆转储文件进行解析,以构建所述堆转储文件的索引;依据所述堆转储文件的索引,对所述堆转储文件进行遍历分析,以确定所述应用程序中包含的各个内存泄漏对象。可选地,在本公开第一方面实施例又一种可能的实现方式中,所述堆转储文件的索引包括各个第一类实例对象索引,所述依据所述堆转储文件的索引,对所述堆转储文件进行遍历分析,以确定所述应用程序中包含的各个内存泄漏对象,包括:依据所述堆转储文件中各个第一类实例对象索引,对所述堆转储文件中的各个第一类实例对象进行遍历,以将目标字段值为预设值的每个第一类实例对象确定为所述应用程序中的内存泄漏对象。可选地,在本公开第一方面实施例又一种可能的实现方式中,所述堆转储文件的索引包括各个第二类实例对象索引,所述依据所述堆转储文件的索引,对所述堆转储文件进行遍历分析,以确定所述应用程序中包含的各个内存泄漏对象,包括:依据所述堆转储文件中各个第二类实例对象索引,对所述堆转储文件中的各个第二类实例对象进行遍历,以获取每个第二类实例对象的字段值;将每个字段值大于第三阈值的第二类实例对象,确定为所述应用程序中的内存泄漏对象。可选地,在本公开第一方面实施例另一种可能的实现方式中,所述堆转储文件的索引包括各个数组对象索引,所述依据所述堆转储文件的索引,对所述堆转储文件进行遍历分析,以确定所述应用程序中包含的各个内存泄漏对象,包括:依据所述堆转储文件中各个数组对象索引,对所述堆转储文件中的各个数组对象进行遍历,以获取每个数组对象的长度;将长度大于第四阈值的数组对象,确定为所述应用程序中的内存泄漏对象。可选地,在本公开第一方面实施例再一种可能的实现方式中,在所述确定所述应用程序中包含的各个内存泄漏对象之后,还包括:获取每个内存泄漏对象对应的垃圾收集路径。可选地,在本公开第一方面实施例又一种可能的实现方式中,所述获取每个内存泄漏对象对应的垃圾收集路径,包括:获取待遍历的节点队列;依次从所述节点队列中取出一个节点,以校验所述取出的节点标识是否与所述应用程序的任一内存泄漏对象的标识匹配;在所述取出的节点标识与所述应用程序的任一内存泄漏对象的标识匹配时,根据所述取出的节点及关联的各级父节点,确定所述内存泄漏对象对应的垃圾收集路径。可选地,在本公开第一方面实施例又一种可能的实现方式中,在所述校验所述取出的节点标识是否为所述应用程序的任一内存泄漏对象的标识之后,还包括:在所述取出的节点标识与所述应用程序的任一内存泄漏对象的标识未匹配时,将所述取出的节点的子节点加入所述节点队列,返回继续执行从所述节点队列中取出节点的操作,直至所述节点队列中的节点为空。可选地,在本公开第一方面实施例另一种可能的实现方式中,在所述将所述取出的节点的子节点加入所述节点队列之前,还包括:确定所述取出的节点的子节点所属的目标类;确定已加入所述节点队列中、且属于所述目标类的节点数量小于第五阈值。可选地,在本公开第一方面实施例再一种可能的实现方式中,在所述取出的节点为类节点时,在所述将所述取出的节点的子节点加入所述节点队列之前,还包括:遍历所述堆转储文件的类索引,以获取所述取出的节点包含的类静态变量;确定所述类静态变量为所述取出的节点的子节点。可选地,在本公开第一方面实施例又一种可能的实现方式中,在所述取出的节点为实例时,在所述将所述取出的节点的子节点加入所述节点队列之前,还包括:遍历所述堆转储文件的类索引,以获取所述堆转储文件中的各非静态变量字段中引用所述取出的节点的目标类;遍历所述堆转储文件的实例索引,以确定所述目标类对应的各实例;确定所述目标类对应的各实例为所述取出的节点的子节点。可选地,在本公开第一方面实施例又一种可能的实现方式中,在所述取出的节点为数组时,在所述将所述取出的节点的子节点加入所述节点队列之前,还包括:遍历所述堆转储文件的数组索引,以根据所述取出的节点中包含的各实例确定所述取出的节点的子节点。可选地,在本公开第一方面实施例另一种可能的实现方式中,所述获取待遍历的节点队列,包括:根据所述应用程序对应的各个垃圾收集根节点,生成所述待遍历的节点队列。根据本公开实施例的第二方面,提供一种内存泄漏的监控装置,包括:轮询模块,被配置为执行响应于获取的应用程序启动指令,轮询所述应用程序对应的目标虚拟机堆内存占用状态的步骤;创建模块,被配置为执行在所述目标虚拟机堆内存占用状态满足堆转储条件时,创建所述应用程序对应的子进程的步骤;第一获取模块,被配置为执行执行所述子进程,以获取与所述目标虚拟机堆中的数据对应的堆转储文件的步骤;确定模块,被配置为执行对所述堆转储文件进行分析,确定本文档来自技高网...

【技术保护点】
1.一种内存泄漏的监控方法,其特征在于,包括:/n响应于获取的应用程序启动指令,轮询所述应用程序对应的目标虚拟机堆内存占用状态;/n在所述目标虚拟机堆内存占用状态满足堆转储条件时,创建所述应用程序对应的子进程;/n执行所述子进程,以获取与所述目标虚拟机堆中的数据对应的堆转储文件;/n对所述堆转储文件进行分析,确定所述应用程序中包含的各个内存泄漏对象。/n

【技术特征摘要】
1.一种内存泄漏的监控方法,其特征在于,包括:
响应于获取的应用程序启动指令,轮询所述应用程序对应的目标虚拟机堆内存占用状态;
在所述目标虚拟机堆内存占用状态满足堆转储条件时,创建所述应用程序对应的子进程;
执行所述子进程,以获取与所述目标虚拟机堆中的数据对应的堆转储文件;
对所述堆转储文件进行分析,确定所述应用程序中包含的各个内存泄漏对象。


2.如权利要求1所述的方法,其特征在于,所述对所述堆转储文件进行分析,确定所述应用程序中包含的各个内存泄漏对象,包括:
创建堆转储分析进程;
执行所述堆转储分析进程,以对所述堆转储文件进行分析,确定所述应用程序中包含的各个内存泄漏对象。


3.如权利要求1所述的方法,其特征在于,所述在所述目标虚拟机堆内存占用状态满足堆转储条件时,创建所述应用程序对应的子进程,包括:
在当前轮询时刻所述目标虚拟机堆的内存占用率大于第一阈值、且当前轮询时刻的内存占用率大于相邻的前一轮询时刻的内存占用率时,将堆转储触发次数加一;
在当前的所述堆转储触发次数大于第二阈值时,创建所述应用程序对应的子进程。


4.如权利要求2所述的方法,其特征在于,所述对所述堆转储文件进行分析,以确定所述应用程序中包含的各个内存泄漏对象,包括:
对所述堆转储文件进行解析,以构建所述堆转储文件的索引;
依据所述堆转储文件的索引,对所述堆转储文件进行遍历分析,以确定所述应用程序中包含的各个内存泄漏对象。


5.如权利要求4所述的方法,其特征在于,所述堆转储文件的索引包括各个第一类实例对象索引,所述依据所述堆转储文件的索引,对所述堆转储文件进行遍历分析,以确定所述应用程序中包含的各个内存泄漏对象,包括:
依据所述堆转储文件中各个第一类实例对象索引,对所述堆转储文件中的各个第一类实例对象进行遍历,以将目标字段值为预设值的每个第一类实例对象确定为所述应用程序中的内存泄漏对象。<...

【专利技术属性】
技术研发人员:李锐薛秋实
申请(专利权)人:北京达佳互联信息技术有限公司
类型:发明
国别省市:北京;11

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

1