本公开涉及计算机,具体而言,涉及一种内存异常归因方法、装置、计算机设备及存储介质。
背景技术:
1、应用程序在运行过程中经常发生内存异常的问题。内存发生异常的情况下,用户可能无法执行某些功能操作,影响使用应用程序的体验。产生内存异常的原因有很多,需要从内存日志文件中查找内存发生异常时应用程序的堆栈信息。
2、目前内存异常归因分析的分析效率较低并且准确度也较低。
技术实现思路
1、本公开实施例至少提供一种内存异常归因方法、装置、计算机设备及存储介质。
2、第一方面,本公开实施例提供了一种内存异常归因方法,包括:
3、响应于多台设备中分别部署的目标应用程序在运行过程中发生内存异常,获取多台设备分别生成的所述目标应用程序的内存使用描述文件;所述内存使用描述文件用于描述所述目标应用程序中的各个程序对象对内存的占用情况;
4、针对每台设备,创建与所述每台设备对应的分析线程,并利用与所述每台设备对应的分析线程,基于所述每台设备生成的所述内存使用描述文件,确定导致所述内存异常的候选程序对象以及所述候选程序对象导致的异常类型;
5、从所述每台设备生成的所述内存使用描述文件中,提取引用所述候选程序对象的目标业务代码;
6、针对每种所述异常类型,对匹配所述异常类型下的各候选程序对象的所述目标业务代码进行聚合,得到所述异常类型下的各候选对象的出现频次;
7、基于所述异常类型下的各候选程序对象的出现频次,筛选出导致所述内存异常的待更新的目标程序对象。
8、一种可选的实施方式中,所述异常类型包括第一类型;所述第一类型用于指示内存发生内存泄漏;所述内存使用描述文件包括:各个所述程序对象在请求释放内存后的释放状态信息;
9、所述基于所述每台设备生成的所述内存使用描述文件,确定导致所述内存异常的候选程序对象以及所述候选程序对象导致的异常类型,包括:
10、对所述每台设备生成的所述内存使用描述文件中的程序对象进行遍历,获取各个程序对象在请求释放内存后的释放状态信息;
11、在所述释放状态信息指示所述程序对象未被释放的情况下,将所述程序对象确定为导致所述内存异常的候选程序对象,并将所述候选程序对象导致的异常类型确定为所述第一类型。
12、一种可选的实施方式中,所述异常类型包括第二类型;所述第二类型指示所述候选程序对象占用的第一内存空间大小超过设定阈值;
13、所述基于所述每台设备生成的所述内存使用描述文件,确定导致所述内存异常的候选程序对象以及所述候选程序对象导致的异常类型,包括:
14、基于所述每台设备生成的所述内存使用描述文件,确定至少一个引用关系链、以及各个所述引用关系链占用的第一内存空间大小;每个所述引用关系链包括:第一程序对象、以及该第一程序对象直接和/或间接引用的第二程序对象;
15、将各个所述引用关系链占用的第一内存空间大小和所述设定阈值进行比对;
16、响应于任一引用关系链占用的第一内存空间大小大于所述设定阈值,将该任一引用关系链中的第一程序对象确定为候选程序对象,并将所述候选程序对象导致的异常类型确定为第二类型。
17、一种可选的实施方式中,所述内存使用描述文件包括:各个程序对象占用的第二内存空间大小;
18、所述基于所述每台设备生成的所述内存使用描述文件,确定至少一个引用关系链、以及各个所述引用关系链占用的第一内存空间大小,包括:
19、对所述每台设备生成的所述内存使用描述文件进行解析,得到所述各个程序对象对应的引用关系信息;
20、基于各个程序对象对应的引用关系信息,确定所述引用关系链,并基于所述引用关系链中包括的第一程序对象、和第二程序对象分别占用的第二内存空间大小,确定所述引用关系链占用的第一内存空间大小。
21、一种可选的实施方式中,所述基于所述异常类型下的各候选程序对象的出现频次,筛选出导致所述内存异常的待更新的目标程序对象,包括:
22、将每个异常类型下的候选程序对象的出现频次和预设频次阈值进行比对;
23、响应于每个异常类型下的任一候选程序对象的出现频次大于或者等于所述预设频次阈值,将每个候选程序对象确定为所述目标程序对象;
24、或者,
25、响应于每个异常类型下的任一候选程序对象的出现频次大于或者等于所述预设频次阈值,确定该任一候选程序对象占用的总内存空间大小;响应于该任一候选程序对象占用的总内存空间大小大于预设内存空间阈值,将该任一候选程序对象确定为所述目标程序对象。
26、一种可选的实施方式中,所述从所述每台设备生成的所述内存使用描述文件中,提取引用所述候选程序对象的目标业务代码,包括:
27、从所述每台设备生成的所述内存使用描述文件中,提取各个所述候选程序对象的业务代码中的首行业务代码;
28、将所述首行业务代码,作为引用所述候选程序对象的目标业务代码。
29、一种可选的实施方式中,所述针对每种所述异常类型,对匹配所述异常类型下的各候选程序对象的所述目标业务代码进行聚合,得到所述异常类型下的各候选对象的出现频次,包括:
30、针对每种所述异常类型,对匹配所述异常类型下的各候选程序对象的所述目标业务代码进行聚合,得到各所述目标业务代码的出现频次;
31、将各所述目标业务代码的出现频次,作为所述异常类型下的各候选对象的出现频次。
32、第二方面,本公开实施例还提供一种内存异常归因装置,包括:
33、获取模块,用于响应于多台设备中分别部署的目标应用程序在运行过程中发生内存异常,获取多台设备分别生成的所述目标应用程序的内存使用描述文件;所述内存使用描述文件用于描述所述目标应用程序中的各个程序对象对内存的占用情况;
34、确定模块,用于针对每台设备,创建与所述每台设备对应的分析线程,并利用与所述每台设备对应的分析线程,基于所述每台设备生成的所述内存使用描述文件,确定导致所述内存异常的候选程序对象以及所述候选程序对象导致的异常类型;
35、提取模块,用于从所述每台设备生成的所述内存使用描述文件中,提取引用所述候选程序对象的目标业务代码;
36、聚合模块,用于针对每种所述异常类型,对匹配所述异常类型下的各候选程序对象的所述目标业务代码进行聚合,得到所述异常类型下的各候选对象的出现频次;
37、筛选模块,用于基于所述异常类型下的各候选程序对象的出现频次,筛选出导致所述内存异常的待更新的目标程序对象。
38、第三方面,本公开实施例还提供一种计算机设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
39、第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
40、本公开实施例提供的内存异常归因方法,当检测到多台设备上分别部署的目标应用程序在运行过程中发生内存异常时,可以自动地获取到各台设备分别生成的目标应用程序的内存使用文件,然后可以利用创建好的与每台设备对应的分析线程,根据内存使用文件,分别自动地确定出每种异常类型下,导致内存异常的目标程序对象。上述过程实现了对检测内存异常、获取内存使用描述文件、以及分析内存使用描述文件等过程的自动化操作,并且可以通过多线程对不同设备上的内存使用文件同时进行分析,提高了对内存异常归因的分析效率。
41、并且,上述过程针对每种异常类型,通过对目标业务代码进行自动聚合的方式筛选出了导致内存异常的目标程序对象,即确定出了导致内存发生各种类型的异常时的主要原因,实现了对内存异常的精确归因。
42、为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。