一种内存泄露的检测方法、装置、设备及存储介质与流程
未命名
08-22
阅读:203
评论:0
1.本技术涉及软件内存管理技术领域,更具体地,涉及或者一种内存泄露的检测方法、装置、设备及存储介质。
背景技术:
2.目前linux系统已经被广泛应用到了各种科技领域,随着这些领域的发展,对linux系统下的软件程序提出了更高的要求。为了实现这些需求,软件程序设计和开发会变得更为复杂。在软件程序研发过程中,会大量使用内存,如何有效地分配和释放内存,防止内存泄漏,变得越来越重要。
3.内存泄露是因为软件程序已动态分配的堆内存由于某种原因未释放或者无法释放,造成系统内存的浪费,进而导致软件程序运行速度慢甚至系统崩溃等严重后果。内存泄露具有隐蔽性和积累型的特征。因为内存泄露的产生原因是内存未被释放,短期内无法直接观察到,所以很难被发现。日积月累,等到内存泄露到达一定程度,才会暴露出一些问题,比如系统性能下降、系统崩溃等。按照内存泄露的产生方式来说,可以分为以下几类:
4.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.(1)本发明通过使用内存统计数组和内存数据哈希表配合统计软件程序的内存使用情况,对未释放内存数量进行实时监控,当未释放内存数量达到内存泄漏阈值,生成内存泄漏告警日志。可以高效检测软件程序的内存使用情况,有效避免因软件程序大量占用内存,造成系统内存的浪费,进而导致软件程序运行速度慢甚至系统崩溃等严重后果,占用资源少,统计效率高,且不会影响软件程序的正常运行。
36.(2)采用本发明提供的内存分配方式和内存泄漏方式,可以动态监控动态监控进程的内存使用情况,快速定位存在内存泄露的地方,通过内存对应索引找到内存统计节点,然后通过内存数据哈希表更新内存申请次数,同时把申请类型的地址作为哈希键值,加入到哈希表中,在内存释放时,通过哈希表更新内存释放次数,进而通过统计内存释放次数确定是否发生了内存泄漏,并通过内存分配索引定位产生内存泄漏的数据结构,进而及时进行内存的释放,可以有效避免因为用户设计上存在缺陷导致的内存占用时间导致的伪内存泄漏现象。
附图说明
37.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例中所需使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
38.图1为本技术实施例提供的一种内存泄露的检测方法的流程示意图;
39.图2为本技术实施例提供的一种采用内存泄漏检测方法的内存分配流程示意图;
40.图3为本技术实施例提供的一种采用内存泄漏检测方法的内存释放流程示意图;
41.图4为本技术实施例提供的一种内存泄露检测装置示意图。
具体实施方式
42.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
43.此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单
元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
44.下面结合图1-图4描述本发明实施例所提供的内存泄露的检测方法。
45.在一个实施例中,对系统内存分配和释放的接口进行封装,提供新的内存分配和释放的接口。软件程序分配内存时,调用新的内存分配接口。
46.图1是本发明提供的内存泄露的检测方法的流程示意图,如图1所示,包括但不限于以下步骤:
47.步骤110:与内存进行交互,内存统计数组获取内存操作信息,记录内存的内存统计信息。
48.其中,内存统计信息包括内存分配次数、内存释放次数和内存泄露阈值以及数据长度,用于统计每个待存储的数据结构的内存统计信息;内存统计数组的下标为内存分配索引,用于通过内存分配索引标记内存统计信息;内存操作信息包括内存分配信息和内存释放信息;
49.与内存进行交互,内存统计数组获取内存操作信息,记录内存的内存统计信息,用于跟踪和记录程序运行时的内存使用情况,数组下标为内存分配索引,也就是用于标记内存块依据分配索引标记所述内存统计信息。其中,内存统计数组的节点成员包括数据长度、内存分配次数、内存释放次数和内存泄露阈值;新的内存分配接口按照内存分配索引记录内存分配次数和内存释放次数,需要说明的是,内存分配索引可以由软件程序根据使用的数据结构或者数据类型进行定义,每个内存分配索引表示一种内存数据。也就是说,每当应用程序调用内存分配函数(例如ma11c函数)进行动态内存分配时,内存统计数组会创建一个新的节点来记录这次分配操作。同样地,当应用程序调用内存释放函数(如free)释放先前分配的内存时,内存统计数组也会更新相应的节点以记录这次释放操作。
50.步骤120:与内存进行交互,内存数据哈希表获取内存操作信息,记录内存的地址信息和内存分配索引。
51.具体的,创建内存数据哈希表,此时哈希表为空。在接受到内存分配申请时,内存数据哈希表会创建新节点,以记录申请的内存地址和内存分配索引,并把新节点加入到内存数据哈希表;在接受到内存释放申请时,删除内存数据哈希表节点,然后根据内存数据哈希表节点中的内存分配索引映射内存统计数组节点,进行内存释放次数的更新。也就是说,依据内存数据的数据结构类型,获取到内存对应的内存分配索引,然后找到内存统计节点,进一步更新内存申请次数,同时会把申请类型的地址作为哈希键值,加入到内存数据哈希表中,在收到该内存释放的释放信息时,因该释放信息只传递了内存地址,就通过内存数据哈希表找到该待释放内存的对应的哈希表节点,就可以再去定位到所述内存统计节点,进而可以统计更新内存释放次数。
52.步骤130:对所述内存分配次数和所述内存释放次数进行监测,当内存未释放数量到内存泄漏阈值生成内存泄露告警日志,所述内存未释放数量为内存分配次数和所述内存释放次数的差值,所述内存泄露告警日志表示为提示可能存在内存泄露。
53.优选的,通过对内存统计数组中的内存分配索引记录的所述内存分配次数和所述内存释放次数进行计算获得内存未释放数量,并将内存未释放数量与预设内存泄漏阈值进行比较,当内存未释放数量达到内存泄漏阈值时,生成内存泄露告警日志,提示该内存分配
索引表示的内存数据可能存在内存泄漏。值得说明的是,通过对内存分配次数和内存释放次数的动态监控,快速定位存在内存泄露的地方,实时生成内存泄露告警日志,可以及时提醒开发人员存在内存泄露问题,及时排查和修复内存泄露缺陷,以确保程序的稳定性和高效性。通过查看内存泄露告警日志,可以确定哪个类型的内存数据导致了内存泄漏,并进行相应地优化和改进。此外,还可以利用内存泄漏提示来监测资源使用情况并进行性能测试,从而避免更严重的问题。
54.换而言之,当内存分配时,程序会记录这段内存所对应的数组索引,并将该索引标记为已分配。而当释放内存时,程序会查找该内存所对应的索引,并将该索引标记为未分配,并在内存统计数组中记录。但这种方式只适用于静态的分配,即在程序运行期间分配一次内存后,不会再动态调整大小,此时就需要在内存释放时找到内存数据哈希表,通过释放时传递的内存地址信息,因为内存数据哈希表包括内存地址信息和内存分配索引,进而可以通过作为键值的内存地址信息在内存数据哈希表中找到之前申请的那个哈希表节点,进而通过哈希表中存储的内存分配索引,映射内存统计节点,也就是更新内存统计数据中的内存释放次数。进而实现内存动态分配,在通过在分配和释放过程中插入内存分配阈值,进行内存泄露的监控和报警。通过对内存统计数组和内存哈希表进行结合分析,开发人员可以了解内存分配和释放的情况,并确定是否存在潜在的内存管理问题。
55.在一个优选的实施例中,以采用本技术方式的内存分配进行举例说明,如图2所示,公开了一种采用内存泄漏检测方法的内存分配流程示意图,包括步骤:
56.获取内存分配信息,进行分析获得已分配内存的内存分配索引,依据所述内存分配索引映射内存统计数组;
57.若查询到所述内存统计数组中对应的内存分配索引,则判定内存泄漏阈值;
58.若未查询到所述内存统计数组中对应的内存分配索引,则生成内存分配异常告警日志。
59.其中,判定内存泄漏阈值包括:
60.若所述内存泄漏阈值不为零,则判定所述内存释放数量是否到达内存泄漏阈值;
61.若所述内存泄漏阈值为零,则更新所述内存统计数组中的内存分配次数。
62.其中,判定所述内存释放数量是否到达内存泄漏阈值包括:
63.若所述内存释放数量到达内存泄漏阈值,则生成内存泄露告警日志;
64.若所述内存释放数量未到达内存泄漏阈值,则记录内存分配次数;
65.初始化所述内存数据哈希表,依据所述内存申请信息生成内存数据哈希表节点,并将所述节点加入所述内存数据哈希表,所述内存数据哈希表节点包括已分配内存的地址信息和内存分配索引。换而言之,调用新的内存分配接口,在申请内存后,初始化内存统计数组节点成员,本领域技术人员可根据实际情况初始化内存泄露阈值,如果为0表示无内存泄露阈值。进而执行步骤1)根据内存分配索引映射内存统计数组节点。如果存在内存统计数组节点,转到2);否则生成内存分配异常告警日志,然后结束;
66.2)进一步的,如果内存泄露阈值为0,转到4);否则转到3);
67.3)进一步的,如果内存未释放数量到阈值,生成内存泄露告警日志;
68.4)进一步的,记录内存统计数组节点的内存分配次数;
69.5)进一步的,创建内存数据哈希表节点,记录申请的内存地址和内存分配索引,把
新节点加入到内存数据哈希表;需要说明的是,再将哈希表节点加入内存数据哈希表之前,会初始化节点的各项属性,如键值,哈希值。
70.值得说明的是,当计算机程序运行期间出现内存分配错误时,操作系统会产生异常,如映射内存统计数组节点,不存在内存统计数组节点,此时就将错误信息记录在内存分配异常告警日志中。可以用于帮助系统管理员对计算机系统中发生的内存分配错误进行分析和解决。通过查看异常日志,系统管理员可以了解到具体的错误信息,如何复现错误、哪些模块存在问题等等,从而快速定位问题并进行修复。
71.除了帮助系统管理员分析内存分配问题外,内存分配异常告警日志还可以为开发人员提供重要的信息。开发人员可以根据收集到的内存分配错误信息来进一步深入研究代码实现,以更好地优化系统性能和代码质量,提高软件系统的可靠性和稳定性。
72.在一个优选的实施例中,以采用本技术方式的内存释放进行举例说明,如图3所示,公开了一种采用内存泄漏检测方法的内存释放流程示意图,包括步骤:
73.获取内存释放信息,进行分析获得待释放内存的地址信息,并依据所述地址信息在所述内存数据哈希表中查找待释放内存的内存数据哈希表节点;
74.若存在所述内存数据哈希表节点,则删除内存数据哈希表节点,并依据所述哈希表节点中的内存分配索引映射所述内存统计数组;
75.若不存在所述内存数据哈希表节点,则生成内存释放异常告警日志。其中,映射内存统计数组节点,包括:
76.若查询到所述内存统计数组中对应的内存分配索引,则更新所述内存统计数组中的内存释放次数,并释放内存;
77.若未查询到所述内存统计数组中对应的内存分配索引,则生成内存释放异常告警日志,并释放内存。
78.换而言之,也就是说,在申请释放时,调用新的内存分配接口,执行步骤:
79.1)根据申请的内存地址查找内存数据哈希表节点。如果存在内存数据哈希表节点,转到2);否则生成内存释放异常告警日志,转到4);
80.2)进一步的,删除内存数据哈希表节点,然后根据内存数据哈希表节点中的内存分配索引映射内存统计数组节点。如果存在内存统计数组节点,转到3);否则生成内存释放异常告警日志,转到4);
81.3)进一步的,记录内存释放次数;
82.4)进一步的,释放内存;
83.最后,初始化内存统计数组节点,并释放所有内存数据哈希表节点,释放内存数据哈希表节点。值得说明的是,在程序运行期间,在释放内存时发生了异常,如未查找到内存数据哈希表节点,或未查找到内存统计数组节点,从而由操作系统或应用程序输出内存释放异常告警日志。通常情况下,该日志会包含出错的文件名、代码行数、错误类型等详细信息。
84.程序在必要时释放内存,同时通过记录内存释放异常告警日志来及时识别和解决内存方面的问题。这些日志可以帮助开发人员快速定位内存问题,并及时修复它们,确保应用程序的稳定性和可靠性。防止程序在使用完某些数据后没有及时从内存中删除,导致内存占用不断增加,最终导致应用程序崩溃造成的内存泄漏的现象。
85.如图4所示,为本技术公开的一种内存泄露检测装置示意图,其包括内存统计数组单元501,用于记录内存的内存统计信息,所述内存统计信息包括内存分配次数、内存释放次数和内存泄露阈值,所述内存统计数组包括内存分配索引,用于标记内存;
86.内存数据哈希表单元502,用于记录内存的地址信息和内存分配索引,在获取到内存释放信息后,依据内存分配索引映射所述内存统计数组,更新所述内存释放次数;
87.内存泄露告警单元503,用于对所述内存分配次数和所述内存释放次数进行监测,当内存未释放数量达到内存泄漏阈值生成内存泄露告警日志,所述内存未释放数量为内存分配次数和所述内存释放次数的差值,所述内存泄露告警日志表示为提示可能存在内存泄露。
88.该装置的实现原理、技术效果与上述方法类似,此处不再赘述。
89.本技术还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。其中,计算机可读存储介质可以包括但不限于任何类型的盘,包括软盘、光盘、dvd、cd-rom、微型驱动器以及磁光盘、rom、ram、eprom、eeprom、dram、vram、闪速存储器设备、磁卡或光卡、纳米系统(包括分子存储器ic),或适合于存储指令和/或数据的任何类型的媒介或设备。
90.需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本技术所必须的。
91.在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
92.在本技术所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些服务接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。
93.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
94.另外,在本技术各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
95.所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备
(可为个人计算机、服务器或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储器包括:u盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
96.本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通进程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储器中,存储器可以包括:闪存盘、只读存储器(read-only memory,rom)、随机存取器(random access memory,ram)、磁盘或光盘等。
97.以上所述者,仅为本公开的示例性实施例,不能以此限定本公开的范围。即但凡依本公开教导所作的等效变化与修饰,皆仍属本公开涵盖的范围内。本领域技术人员在考虑说明书及实践这里的公开后,将容易想到本公开的其实施方案。本技术旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未记载的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的范围和精神由权利要求限定。
98.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
99.本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
技术特征:
1.一种内存泄露的检测方法,其特征在于,包括:与内存进行交互,内存统计数组获取内存操作信息,记录内存的内存统计信息,所述内存统计信息包括内存分配次数、内存释放次数和内存泄露阈值,所述内存统计数组包括内存分配索引,用于依据分配索引标记所述内存统计信息;所述内存操作信息包括内存分配信息和内存释放信息;与内存进行交互,内存数据哈希表获取内存操作信息,记录内存的地址信息和内存分配索引,在获取到内存释放信息后,依据内存分配索引映射所述内存统计数组,更新所述内存释放次数;对所述内存分配次数和所述内存释放次数进行监测,当内存未释放数量达到内存泄漏阈值生成内存泄露告警日志,所述内存未释放数量为内存分配次数和所述内存释放次数的差值,所述内存泄露告警日志表示为提示可能存在内存泄露。2.如权利要求1所述的一种内存泄露的检测方法,其特征在于,所述获取内存操作信息,记录内存的内存统计信息,包括:获取内存分配信息,进行分析获得已分配内存的内存分配索引,依据所述内存分配索引映射内存统计数组;若查询到所述内存统计数组中对应的内存分配索引,则判定内存泄漏阈值;若未查询到所述内存统计数组中对应的内存分配索引,则生成内存分配异常告警日志。3.如权利要求2所述的一种内存泄露的检测方法,其特征在于,所述判定内存泄漏阈值包括:若所述内存泄漏阈值不为零,则判定所述内存释放数量是否到达内存泄漏阈值;若所述内存泄漏阈值为零,则更新所述内存统计数组中的内存分配次数。4.如权利要求3所述的一种内存泄露的检测方法,其特征在于,所述判定所述内存释放数量是否到达内存泄漏阈值包括:若所述内存释放数量到达内存泄漏阈值,则生成内存泄露告警日志;若所述内存释放数量未到达内存泄漏阈值,则记录内存分配次数;初始化所述内存数据哈希表,依据所述内存申请信息生成内存数据哈希表节点,并将所述节点加入所述内存数据哈希表,所述内存数据哈希表节点包括已分配内存的地址信息和内存分配索引。5.如权利要求4所述的一种内存泄露的检测方法,其特征在于,所述在获取到内存释放信息后,依据所述内存分配索引映射所述内存统计数组,包括:获取内存释放信息,进行分析获得待释放内存的地址信息,并依据所述地址信息在所述内存数据哈希表中查找待释放内存的内存数据哈希表节点;若存在所述内存数据哈希表节点,则删除内存数据哈希表节点,并依据所述哈希表节点中的内存分配索引映射所述内存统计数组;若不存在所述内存数据哈希表节点,则生成内存释放异常告警日志。6.如权利要求5所述的一种内存泄露的检测方法,其特征在于,所述映射内存统计数组,包括:若查询到所述内存统计数组中对应的内存分配索引,则更新所述内存统计数组中的内
存释放次数,并释放内存;若未查询到所述内存统计数组中对应的内存分配索引,则生成内存释放异常告警日志,并释放内存。7.一种内存泄露的检测装置,其特征在于,包括:内存统计数组单元,用于记录内存的内存统计信息,所述内存统计信息包括内存分配次数、内存释放次数和内存泄露阈值,所述内存统计数组包括内存分配索引,用于标记内存;内存数据哈希表单元,用于记录内存的地址信息和内存分配索引,在获取到内存释放信息后,依据内存分配索引映射所述内存统计数组,更新所述内存释放次数;内存泄露告警单元,用于对所述内存分配次数和所述内存释放次数进行监测,当内存未释放数量达到内存泄漏阈值生成内存泄露告警日志,所述内存未释放数量为内存分配次数和所述内存释放次数的差值,所述内存泄露告警日志表示为提示可能存在内存泄露。8.一种内存泄露的检测设备,其特征在于,包括至少一个处理单元、以及至少一个存储单元,其中,所述存储单元存储有计算机程序,当所述计算机程序被所述处理单元执行时,使得所述处理单元执行权利要求1~6任一项所述方法的步骤。9.一种存储介质,其特征在于,其存储有可由访问认证设备执行的计算机程序,当所述计算机程序在访问认证设备上运行时,使得所述访问认证设备执行权利要求1~6任一项所述方法的步骤。
技术总结
本申请公开了一种内存泄露的检测方法,该方法包括:通过创建内存数据哈希表,记录内存申请信息,建立内存统计数组,依据内存申请信息统计每个内存分配索引的数据类型的内存统计信息,内存统计信息包括内存分配次数和内存释放次数、数据长度;依据内存统计数组中的内存分配索引记录内存分配次数和内存释放次数;对内存分配次数和内存释放次数进行监测,当内存未释放数量到预设阈值生成内存泄露告警日志,通过本申请可以高效检测软件程序的内存使用情况,有效避免因软件程序大量占用内存,造成系统内存的浪费,进而导致软件程序运行速度慢甚至系统崩溃等严重后果,占用资源少,统计效率高,且不会影响软件程序的正常运行。且不会影响软件程序的正常运行。且不会影响软件程序的正常运行。
技术研发人员:董贤伟 张祖平 黄洋 康金华 蔡超 吴志兵 张鸿禹 王召 陈丹 华黎明 魏继军 魏望 宋良平 詹鹏 魏珊
受保护的技术使用者:武汉船舶通信研究所(中国船舶集团有限公司第七二二研究所)
技术研发日:2023.05.08
技术公布日:2023/8/21
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/
