本发明涉及内存泄漏,特别是涉及一种基于统计和数据挖掘的内存泄漏识别方法和装置。
背景技术:
1、内存泄漏识别是计算机领域的一大难题。内存泄漏的原因在于,当应用程序执行完毕后,其所占用的内存没有被合理回收,进而导致这部分内存不能被再次使用而造成内存的泄漏。在软件的各类缺陷中,内存泄漏较难发现。当内存的泄漏量累积到一定程度时,将影响整个系统的正常运行、甚至导致系统故障。
2、现在多数内存泄漏监控和识别的相关技术和工具通过跟踪内存分配和释放操作,以及跟踪对象的引用关系来检测内存泄漏。有些高级的内存泄漏识别工具可能需要对应用程序进行一些修改,以便在运行时进行更深入的内存分析,这些修改可能包括在源代码中插入特定的标记或调用诊断函数。这些工具的优点在于能够深入到代码层次监控内存分配和释放操作,以及跟踪对象的引用关系。但对于大型或复杂的系统或应用程序,有大量的子程序、子任务和大量的代码需要监控和识别内存泄漏风险时,使用这类工具将可能对系统性能产生较大影响和负担,且识别效率也低。
3、有鉴于此,如何克服现有技术所存在的缺陷,解决内存泄漏监控和识别工具对系统性能的影响和负担大、识别效率低的问题,是本技术领域待解决的难题。
技术实现思路
1、针对现有技术中的缺陷或改进需求。本发明提供一种基于统计和数据挖掘的内存泄漏识别方法和装置,本发明的方法和装置无需嵌入代码、且采用轻量级计算方式进行内存泄漏检测,本发明的方法并非取代现有的各类内存泄漏识别工具,而是作为一种前置手段提升总体的识别效率。本发明利用被监控对象(比如系统、进程、线程等)的内存使用量数据来判断该对象是否存在内存泄漏风险。一旦识别到该对象存在内存泄漏风险,可以再使用现有的监控工具针对该监控对象、甚至嵌入到相应的代码作进一步排查,进而总体提升内存泄漏识别的效率,减轻对系统性能的影响和负担。
2、本发明采用如下技术方案:
3、第一方面,本发明提供了一种基于统计和数据挖掘的内存泄漏识别方法,包括:
4、获取被监控对象的内存使用量时间序列数据;
5、通过平稳性检验来检验内存使用量时间序列数据是否平稳;
6、若非平稳,则对内存使用量时间序列数据进行时频分析并获取最大周期;
7、按获取的最大周期进行时序过滤,确定每个最大周期内的内存使用量基线数据;
8、对内存使用量基线数据进行回归分析和统计假设检验,以确定内存使用量基线数据是否存在明显增长趋势,若存在明显增长趋势,则判定为存在内存泄漏风险。
9、进一步的,所述获取被监控对象的内存使用量时间序列数据具体包括:
10、获取被监控对象的当前和历史内存使用量;
11、根据时间和内存使用量的对应关系,建立内存使用量时间序列数据。
12、进一步的,所述通过平稳性检验来检验内存使用量时间序列数据是否平稳具体包括:
13、通过检验内存使用量时间序列数据中是否存在单位根来判断内存使用量时间序列数据是否平稳;
14、若检验结果存在单位根则为非平稳时间序列,判断内存使用量时间序列数据为非平稳;
15、若检验结果不存在单位根则为平稳时间序列,判断内存使用量时间序列数据为平稳。
16、进一步的,通过统计假设检验来进行是否存在单位根的检验,具体的:
17、原假设h0:存在单位根;
18、备择假设h1:不存在单位根;
19、若针对单位根的检验统计量对应的p值大于或等于预设的显著性水平,则接受原假设,判定内存使用量时间序列数据存在单位根;若p值小于预设的显著性水平,则拒绝原假设,并接受备择假设,判定内存使用量时间序列不存在单位根。
20、进一步的,所述对内存使用量时间序列数据进行时频分析并获取最大周期具体包括:
21、获取内存使用量时间序列数据的信号功率密度分布;
22、去除信号功率密度分布中临近零频率的部分,并计算其累积分布函数;
23、取该累积分布函数的两个百分位值作为该信号功率密度分布的主要频率范围,该主要频率范围的下限对应的周期即为获取的最大周期。
24、进一步的,所述按获取的最大周期进行时序过滤,确定每个周期内的内存使用量基线数据具体包括:
25、将内存使用量时间序列数据按照获取的最大周期为间隔进行切分;
26、取每一段周期内的内存使用量的最小值,作为相应周期内的内存使用量基线数据。
27、进一步的,所述对内存使用量基线数据进行回归分析和统计假设检验,以确定内存使用量基线数据是否存在明显增长趋势具体包括:
28、利用回归分析对内存使用量基线数据作趋势分析,通过分析回归系数来判定是否存在明显增长趋势,若有明显增长趋势,则判定为存在内存泄漏风险;若无明显增长趋势,则判定当前无内存泄漏风险,继续监控。
29、进一步的,对回归分析结果中与趋势相关的指标进行统计假设检验来判断是否存在明显增长趋势,利用回归分析中的线性回归分析法,用直线函数y=a1*x+a0来拟合数据,并对与趋势相关的回归系数a1进行统计假设检验来验证内存使用量基线数据是否有明显增长趋势,具体的:
30、原假设h0:与趋势相关的回归系数a1为0;
31、备择假设h1:与趋势相关的回归系数a1不为0;
32、若针对与趋势相关的回归系数a1的检验统计量对应的p值大于或等于预设的显著性水平,则接受原假设,判定内存使用量基线数据为无明显趋势;若p值小于预设的显著性水平,则拒绝原假设,并接受备择假设,判定内存使用量基线数据为有明显趋势;当判定结果为有明显趋势,且同时a1的计算值大于0时,即内存使用量基线数据有明显增长趋势,判定存在内存泄漏风险。
33、进一步的,所述通过平稳性检验来检验内存使用量时间序列数据是否平稳时,若为平稳,则判断当前无内存泄漏风险,继续监控。
34、另一方面,本发明提供了一种基于统计和数据挖掘的内存泄漏识别装置,具体为:包括至少一个处理器和存储器,至少一个处理器和存储器之间通过数据总线连接,存储器存储能被至少一个处理器执行的指令,指令在被处理器执行后,用于完成第一方面中的基于统计和数据挖掘的内存泄漏识别方法。
35、与现有技术相比,本发明的有益效果在于:
36、本发明基于统计平稳性检验、时频分析、时序过滤、回归分析和统计假设检验,以轻量级计算方式进行内存泄漏的检测,适合大型、复杂的系统或程序的内存泄漏的监控和识别,可作为现有内存监控工具的前置识别手段,减少现有内存监控工具对系统资源的消耗,并总体提升内存泄漏识别的效率。
1.一种基于统计和数据挖掘的内存泄漏识别方法,其特征在于,包括:
2.根据权利要求1所述的基于统计和数据挖掘的内存泄漏识别方法,其特征在于,所述获取被监控对象的内存使用量时间序列数据具体包括:
3.根据权利要求1所述的基于统计和数据挖掘的内存泄漏识别方法,其特征在于,所述通过平稳性检验来检验内存使用量时间序列数据是否平稳具体包括:
4.根据权利要求3所述的基于统计和数据挖掘的内存泄漏识别方法,其特征在于,通过统计假设检验来进行是否存在单位根的检验,具体的:
5.根据权利要求1所述的基于统计和数据挖掘的内存泄漏识别方法,其特征在于,所述对内存使用量时间序列数据进行时频分析并获取最大周期具体包括:
6.根据权利要求1所述的基于统计和数据挖掘的内存泄漏识别方法,其特征在于,所述按获取的最大周期进行时序过滤,确定每个周期内的内存使用量基线数据具体包括:
7.根据权利要求1所述的基于统计和数据挖掘的内存泄漏识别方法,其特征在于,所述对内存使用量基线数据进行回归分析和统计假设检验,以确定内存使用量基线数据是否存在明显增长趋势具体包括:
8.根据权利要求7所述的基于统计和数据挖掘的内存泄漏识别方法,其特征在于,对回归分析结果中与趋势相关的指标进行统计假设检验来判断是否存在明显增长趋势,利用回归分析中的线性回归分析法,用直线函数y=a1*x+a0来拟合数据,并对与趋势相关的回归系数a1进行统计假设检验来验证内存使用量基线数据是否有明显增长趋势,具体的:
9.根据权利要求1-8任一所述的基于统计和数据挖掘的内存泄漏识别方法,其特征在于,所述通过平稳性检验来检验内存使用量时间序列数据是否平稳时,若为平稳,则判断当前无内存泄漏风险,继续监控。
10.一种基于统计和数据挖掘的内存泄漏识别装置,其特征在于: