CN113419893A - 内存泄漏查证方法、装置、电子设备和存储介质 - Google Patents
内存泄漏查证方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN113419893A CN113419893A CN202110813978.XA CN202110813978A CN113419893A CN 113419893 A CN113419893 A CN 113419893A CN 202110813978 A CN202110813978 A CN 202110813978A CN 113419893 A CN113419893 A CN 113419893A
- Authority
- CN
- China
- Prior art keywords
- memory
- memory objects
- objects
- class
- type
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/079—Root cause analysis, i.e. error or fault diagnosis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0706—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
- G06F11/073—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供了一种内存泄漏查证方法、装置、电子设备和存储介质,所述方法包括:当存在一类的内存对象数量异常的情况下,获取类的内存对象;获取内存对象与其他内存对象之间的引用关系,然后计算内存对象之间的引用关系的相似度,将相似度大于第一阈值的内存对象,确定为同一类型的内存对象,当存在一类型内存对象数量异常时,将类型的内存对象确定为导致内存泄漏的内存对象。应用本发明实施例不用程序开发人员手动对内存对象进行遍历和进行问题分析过程,简化操作过程,提高查证效率,降低了定位内存泄漏问题的技术门槛和熟悉成本。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种内存泄漏查证方法、一种内存泄漏查证装置、电子设备和存储介质。
背景技术
内存泄漏是指程序中已分配的内存由于某种原因程序未释放或无法释放,继续占用内存,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果,因此,为了保证程序长期稳定的运行,程序开发者需要找出程序中的内存泄漏问题并修复该问题。
目前,查询内存泄漏问题需要程序开发者手动查看分析代码,以找出内存泄漏的内存对象。然而,由于服务器内存中占用内存的内存数量庞大,在每一个可疑的内存对象都需要程序开发者进行人工判断的情况下,导致查证操作繁琐,查证效率低下等问题。
发明内容
本发明实施例提供一种克服查询内存泄漏操作繁琐,查证效率低下等问题的一种内存泄漏查证方法和相应的一种内存泄漏查证装置、电子设备、存储介质。
为了解决上述问题,本发明实施例公开了一种内存泄漏查证方法,所述方法包括:
当存在一类的内存对象数量异常的情况下,获取所述类的所述内存对象;
获取所述内存对象与其他内存对象之间的引用关系;
计算所述内存对象之间的所述引用关系的相似度;
将相似度大于第一阈值的所述内存对象,确定为同一类型的所述内存对象;
当存在一类型所述内存对象数量异常时,将所述类型的所述内存对象确定为导致内存泄漏的内存对象。
可选地,在所述当存在一类的内存对象数量异常的情况下,获取所述类的所述内存对象之前,还包括:
在一定时间内,检测各类的内存对象数量的变化情况;
若所述变化情况为存在一类的所述内存对象数量大于第二阈值,和或所述内存对象数量持续增加,则确定所述类的所述内存对象数量异常。
可选地,所述在一定时间内,检测各类的内存对象数量的变化情况,包括:
在一定时间内的初始时刻、以及结束时刻检测各类的所述内存对象数量;
若所述结束时刻检测的所述内存对象数量大于所述初始时刻检测的所述内存对象数量,则确定所述内存对象持续增加。
可选地,所述计算所述内存对象之间的引用关系的相似度,包括:
根据所述内存对象的所述引用关系,确定所述内存对象的有向图;其中,所述有向图由一组顶点和一组有方向的边组成的,每条有方向的边都连接着有序的一对顶点,每一个顶点表示一个内存对象,每一条边表示一个内存对象对另外一个内存对象的引用;
计算所述内存对象之间的所述有向图的相似度。
可选地,在所述当存在一类型所述内存对象数量异常时,将所述类型的所述内存对象确定为导致内存泄漏的内存对象之前,还包括:
计算各类型所述内存对象的数量与其他类型所述内存对象的数量的比值;
当所述比值大于第三阈值时,确定所述类型的所述内存对象数量异常。
本发明实施例公开了一种内存泄漏查证装置,所述装置包括:
对象获取模块,用于当存在一类的内存对象数量异常的情况下,获取所述类的所述内存对象;
关系获取模块,用于获取所述内存对象与其他内存对象之间的引用关系;
相似度计算模块,用于计算所述内存对象之间的所述引用关系的相似度;
第一对象确定模块,用于将相似度大于第一阈值的所述内存对象,确定为同一类型的所述内存对象;
第二对象确定模块,用于当存在一类型所述内存对象数量异常时,将所述类型的所述内存对象确定为导致内存泄漏的内存对象。
可选地,还包括:
数量检测模块,用于在一定时间内,检测各类的内存对象数量的变化情况;
第一异常确定模块,用于若所述变化情况为存在一类的所述内存对象数量大于第二阈值,和或所述内存对象数量持续增加,则确定所述类的所述内存对象数量异常。
可选地,所述数量检测模块,包括:
数量检测子模块,用于在一定时间内的初始时刻、以及结束时刻检测各类的所述内存对象数量;
数量比较子模块,用于若所述结束时刻检测的所述内存对象数量大于所述初始时刻检测的所述内存对象数量,则确定所述内存对象持续增加。
可选地,所述相似度计算模块,包括:
有向图确定子模块,用于根据所述内存对象的所述引用关系,确定所述内存对象的有向图;其中,所述有向图由一组顶点和一组有方向的边组成的,每条有方向的边都连接着有序的一对顶点,每一个顶点表示一个内存对象,每一条边表示一个内存对象对另外一个内存对象的引用;
相似度计算子模块,用于计算所述内存对象之间的所述有向图的相似度。
可选地,还包括:
比值计算模块,用于计算各类型所述内存对象的数量与其他类型所述内存对象的数量的比值;
第二异常确定模块,当所述比值大于第三阈值时,确定所述类型的所述内存对象数量异常。
本发明实施例公开了一种电子设备,包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的内存泄漏查证方法的步骤。
本发明实施例公开了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如上所述的内存泄漏查证方法的步骤。
本发明实施例包括以下优点:
在本发明实施例中,获取到数量异常的类的内存对象后,通过内存对象的引用关系将产生原因相同的内存对象分为同一种类型,进而确定出内存泄漏原因对应类型的内存对象,并输出内存泄漏原因的引用关系图。不用程序开发人员手动对内存对象进行遍历和进行问题分析过程,简化操作过程,提高查证效率,降低了定位内存泄漏问题的技术门槛和熟悉成本。
附图说明
图1是本发明的一种内存泄漏问题查证方法实施例的步骤流程图;
图2是本发明的一种内存泄漏问题查证方法实施例提供的内存数量查看示意图;
图3是本发明的另一种内存泄漏问题查证方法实施例的步骤流程图;
图4是本发明的一种内存泄漏问题查证方法实施例提供的引用关系代码示意图;
图5是本发明的一种内存泄漏问题查证方法实施例提供的引用关系图;
图6是本发明的另一种内存泄漏问题查证装置实施例的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
目前,查询内存泄漏问题需要经过定位内存泄漏可疑内存对象、定位可疑内存对象的引用、查看代码,排查可疑引用等操作步骤,具体步骤如下:
定位内存泄漏可疑内存对象:Python有一些库可以查看内存对象的数量,通过调用objgraph库中的show_most_common_types()方法看内存中最多的内存对象,或调用show_growth()函数查看两次操作之间各内存对象的增加情况,当存在相比于其他内存对象数量比较多的内存对象,或持续增加不减少的内存对象,为内存泄漏可疑内存对象。
定位可疑内存对象的引用:定位了可疑内存对象后,例如怀疑是list(列表)对象产生了内存泄漏,从内存对象中取一个list,使用库show_backrefs函数生成list的引用关系的dot文件,然后使用graphviz工具生成引用关系图。
查看代码,排查可疑引用:在引用关系图中能看到该内存对象的引用关系,根据该引用关系,查看代码或者该内存对象的具体内容,确定该内存对象是否应该存在,是否已经超过生命周期,是否存在循环引用等等,如果发现该内存对象没有问题,就继续采样下一个list重复该过程。
目前查证问题的方案存在以下问题:
1、定位到内存泄漏的内存对象就有一定的随机性,服务器内存中可能有几十万个list或者dict,很难保证取出来一个内存对象就是内存泄漏的内存对象。
2、每次生成引用对象dot文件、使用graphviz画出引用关系图都需要程序开发者手动操作,耗时且费力。
3、对于引用关系图,需要程序开发者手动查看代码分析为什么是这种引用关系,这种引用关系是否有问题,进而确定这个内存对象是否导致的内存泄漏。该过程有一定的技术和熟悉门槛,需要对代码比较熟悉,且需要有查证内存泄漏问题的专业知识。
为了解决上述问题,本发明提供了一种内存泄漏问题查证方法,获取到可疑的类的内存对象后,通过内存对象的引用关系将产生原因相同的内存对象分为同一种类型,进而确定出内存泄漏原因对应类型的内存对象,得到内存泄漏的引用关系图。降低了内存泄漏问题查证的随机性,查找内存泄漏问题时不用一个内存对象一个内存对象的遍历,而是直接根据内存对象的引用关系将产生原因相同的内存对象分为同一种类型,进而定位到内存泄漏类型的内存对象;采用修改后的库函数将有问题的内存对象的dot文件和引用关系图生成出来,不用每次都手动进行操作;不需要问题分析过程,直接获取到内存泄漏问题的引用关系图,降低了定位问题的技术门槛和熟悉成本。
对于Python、Java、以及C#等编程语言均存在内存泄漏的问题,本发明实施例以Python语言作为示例进行说明。参照图1,示出了本发明的一种内存泄漏问题查证方法实施例的步骤流程图,本发明实施例具体可以包括如下步骤:
步骤101,当存在一类的内存对象数量异常的情况下,获取所述类的所述内存对象。
其中,类(class)和对象(object)是两种以计算机为载体的计算机语言的合称,对象是类的实例,类是对象的模板;内存对象是指在系统内存中占用内存的对象。
具体地,如图2所示,在系统内存中,各种类的内存对象占用着系统内存,例如list类的内存对象、dict类的内存对象等,当存在一类的内存对象数量出现异常,比如该类的内存对象的数量相比于其他类的内存对象的数量比较多,或内存数量持续增加,那么可以确定该类的内存对象为可疑的内存对象,获取该类的内存对象。
步骤102,获取所述内存对象与其他内存对象之间的引用关系。
具体地,在获取可疑的内存对象后,通过库函数获取内存对象与其他内存对象之间的引用关系,比如包含内存对象的引用关系的dot文件。
步骤103,计算所述内存对象之间的所述引用关系的相似度。
步骤104,将相似度大于第一阈值的所述内存对象,确定为同一类型的所述内存对象。
其中,引用关系的相似度达到一定程度,就认为这两个内存对象其实是同一个原因创建的,对应到内存泄漏就会是同一个内存泄漏原因导致的,因此,相似度大于第一阈值(其中,第一阈值可以根据实际情况,由开发人员自行设置,例如可以取0.90,0.95,0.99等)的内存对象聚为同一种类型。
具体地,在获取的该类的内存对象的引用关系后,计算该类的内存对象之间的引用关系的相似度,将相似度大于第一阈值的内存对象,确定为同一类型的内存对象,得到属于各种类型的内存对象,例如,获取到的list类的内存对象有共有二十万个,其中,list类的内存对象的一种类型有十万个内存对象,占据500M内存;还有另一种类型有三万个内存对象,占用300M内存等。
步骤105,当存在一类型所述内存对象数量异常时,将所述类型的所述内存对象确定为导致内存泄漏的内存对象。
具体地,在将相似度大于第一阈值的内存对象,确定为同一类型的内存对象,得到属于各种类型的内存对象后,检测各种类型的内存对象的数量是否异常,比如一类型内存对象数量远远大于其他类型的内存数量,将该类型的内存对象确定为导致内存泄漏的内存对象。例如,获取到的list类的内存对象有共有二十万个,其中,list类的内存对象的一种类型有十万个对象,占据500M内存;还有另一种类型有三万个,占用300M内存,显然,上述十万个对象的类型和三万个对象的类型远远大于其他类型的内存对象的数量,将上述两个类型的内存对象确定为导致内存泄漏的内存对象,并输出这两种输出两个类型的引用关系图,程序开发人也通过分析引用关系图可以得到内存泄漏的原因。
本发明实施例中,当存在一类的内存对象数量异常的情况下,获取类的内存对象;获取内存对象与其他内存对象之间的引用关系;计算内存对象之间的引用关系的相似度;将相似度大于第一阈值的内存对象,确定为同一类型的内存对象;当存在一类型内存对象数量异常时,将类型的内存对象确定为导致内存泄漏的内存对象。应用本发明实施例,获取到可疑的类的内存对象后,通过内存对象的引用关系将产生原因相同的内存对象分为同一种类型,进而确定出内存泄漏原因对应类型的内存对象,并输出该类型的引用关系图。不用程序开发人员手动对内存对象进行遍历和进行问题分析过程,简化操作过程,提高查证效率,降低了定位内存泄漏问题的技术门槛和熟悉成本。
参照图3,示出了本发明的另一种内存泄漏问题查证方法实施例的步骤流程图,本发明实施例具体可以包括如下步骤:
步骤301:当存在一类的内存对象数量异常的情况下,获取所述类的所述内存对象。
在步骤301之前,还包括:在一定时间内,检测各类的内存对象数量的变化情况;若所述变化情况为存在一类的所述内存对象数量大于第二阈值,和或所述内存对象数量持续增加,则确定所述类的所述内存对象数量异常。
在本发明一实施例中,所述在一定时间内,检测各类的内存对象数量的变化情况,包括:在一定时间内的初始时刻、以及结束时刻检测各类的所述内存对象数量;若所述结束时刻检测的所述内存对象数量大于所述初始时刻检测的所述内存对象数量,则确定所述内存对象持续增加。
具体地,在查证内存泄漏的过程中,在一定时间内的初始时刻、以及结束时刻检测各类的内存对象数量并进行比较,当结束时刻检测的内存对象数量大于初始时刻检测的内存对象数量,则该类的内存对象在一定时间内持续增加。当存在一类的内存对象数量大于第二阈值(其中,第二阈值可以根据实际情况,由开发人员自行设置),和或内存对象数量持续增加,则确定类的内存对象数量异常,即该类的内存对象为可疑的内存对象,获取类的内存对象。
步骤302获取所述内存对象与其他内存对象之间的引用关系。
步骤303根据所述内存对象的所述引用关系,确定所述内存对象的有向图。
其中,有向图由一组顶点和一组有方向的边组成的,每条有方向的边都连接着有序的一对顶点,每一个顶点表示一个内存对象,每一条边表示一个内存对象对另外一个内存对象的引用。
具体地,通过修改后的库函数获取内存对象“纯净”版的引用关系(参照图4),然后根据“纯净”版的引用关系,确定内存对象的有向图。
为了得到纯净的引用关系信息,对库函数进行了精简,去掉了引用关系中的如下信息:节点的形状信息、节点id、节点的内存地址信息、引用权重、容器的元素数量以及其他一些无用信息。
步骤304计算所述内存对象之间的所述有向图的相似度。
具体地,通过图相似度的算法(例如ORB算法、敏感哈希phash算法,直方图计算相似度算法)计算该类中的内存对象之间有向图的相似度。例如两个内存对象的有向图相似度达到一定程度,就认为这两个内存对象其实是同一个原因创建的,对应到内存泄漏就会是同一个内存泄漏原因导致的。
步骤305将相似度大于第一阈值的所述内存对象,确定为同一类型的所述内存对象;
步骤306当存在一类型所述内存对象数量异常时,将所述类型的所述内存对象确定为导致内存泄漏的内存对象。
在所述步骤306之前,还包括:计算各类型所述内存对象的数量与其他类型所述内存对象的数量的比值;当所述比值大于第三阈值时,确定所述类型的所述内存对象数量异常。
具体地,在得到属于各种类型的内存对象后,计算每一类型内存对象的数量与剩余其他类型数量的比值,当存在存在一类型的比值大于第三阈值时(其中,第三阈值可以根据实际情况,由开发人员自行设置),确定该类型的内存对象数量异常,将该类型的内存对象确定为导致内存泄漏的内存对象,并输出该类型的引用关系图(参照图5),程序开发人可以通过分析引用关系图可以得到内存泄漏的原因。
本发明实施例中,获取到可疑的类的内存对象后,通过内存对象的引用关系将产生原因相同的内存对象分为同一种类型,进而确定出内存泄漏原因对应类型的内存对象,并输出该类型的引用关系图。降低了内存泄漏问题查证的随机性,查找内存泄漏问题时不用一个对象一个对象的遍历,而是直接根据内存对象的引用关系将产生原因相同的内存对象分为同一种类型,进而定位到内存泄漏类型的内存对象;采用修改后的库函数将有问题的内存对象的dot文件和引用关系图生成出来,不用每次都手动进行操作;不需要问题分析过程,直接获取到内存泄漏问题的引用关系图,降低了定位问题的技术门槛和熟悉成本。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图6,示出了本发明的一种内存泄漏查证装置实施例的结构框图,本发明实施例具体可以包括如下模块:
对象获取模块601,用于当存在一类的内存对象数量异常的情况下,获取所述类的所述内存对象;
关系获取模块602,用于获取所述内存对象与其他内存对象之间的引用关系;
相似度计算模块603,用于计算所述内存对象之间的所述引用关系的相似度;
第一对象确定模块604,用于将相似度大于第一阈值的所述内存对象,确定为同一类型的所述内存对象;
第二对象确定模块605,用于当存在一类型所述内存对象数量异常时,将所述类型的所述内存对象确定为导致内存泄漏的内存对象。
在本发明一实施例中,还包括:
数量检测模块,用于在一定时间内,检测各类的内存对象数量的变化情况;
第一异常确定模块,用于若所述变化情况为存在一类的所述内存对象数量大于第二阈值,和或所述内存对象数量持续增加,则确定所述类的所述内存对象数量异常。
在本发明一实施例中,所述数量检测模块,包括:
数量检测子模块,用于在一定时间内的初始时刻、以及结束时刻检测各类的所述内存对象数量;
数量比较子模块,用于若所述结束时刻检测的所述内存对象数量大于所述初始时刻检测的所述内存对象数量,则确定所述内存对象持续增加。
在本发明一实施例中,所述相似度计算模块603,包括:
有向图确定子模块,用于根据所述内存对象的所述引用关系,确定所述内存对象的有向图;其中,所述有向图由一组顶点和一组有方向的边组成的,每条有方向的边都连接着有序的一对顶点,每一个顶点表示一个内存对象,每一条边表示一个内存对象对另外一个内存对象的引用;
相似度计算子模块,用于计算所述内存对象之间的所述有向图的相似度。
在本发明一实施例中,还包括:
比值计算模块,用于计算各类型所述内存对象的数量与其他类型所述内存对象的数量的比值;
第二异常确定模块,当所述比值大于第三阈值时,确定所述类型的所述内存对象数量异常。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明实施例公开了一种电子设备,包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上内存泄漏查证方法实施例所述的步骤。
本发明实施例公开了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如上内存泄漏查证方法实施例所述的步骤。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种内存泄漏查证方法、一种内存泄漏查证装置、电子设备和存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种内存泄漏查证方法,其特征在于,所述方法包括:
当存在一类的内存对象数量异常的情况下,获取所述类的所述内存对象;
获取所述内存对象与其他内存对象之间的引用关系;
计算所述内存对象之间的所述引用关系的相似度;
将相似度大于第一阈值的所述内存对象,确定为同一类型的所述内存对象;
当存在一类型所述内存对象数量异常时,将所述类型的所述内存对象确定为导致内存泄漏的内存对象。
2.根据权利要求1所述的方法,其特征在于,在所述当存在一类的内存对象数量异常的情况下,获取所述类的所述内存对象之前,还包括:
在一定时间内,检测各类的内存对象数量的变化情况;
若所述变化情况为存在一类的所述内存对象数量大于第二阈值,和或所述内存对象数量持续增加,则确定所述类的所述内存对象数量异常。
3.根据权利要求2所述的方法,其特征在于,所述在一定时间内,检测各类的内存对象数量的变化情况,包括:
在一定时间内的初始时刻、以及结束时刻检测各类的所述内存对象数量;
若所述结束时刻检测的所述内存对象数量大于所述初始时刻检测的所述内存对象数量,则确定所述内存对象持续增加。
4.根据权利要求1所述的方法,其特征在于,所述计算所述内存对象之间的引用关系的相似度,包括:
根据所述内存对象的所述引用关系,确定所述内存对象的有向图;其中,所述有向图由一组顶点和一组有方向的边组成的,每条有方向的边都连接着有序的一对顶点,每一个顶点表示一个内存对象,每一条边表示一个内存对象对另外一个内存对象的引用;
计算所述内存对象之间的所述有向图的相似度。
5.根据权利要求1所述的方法,其特征在于,在所述当存在一类型所述内存对象数量异常时,将所述类型的所述内存对象确定为导致内存泄漏的内存对象之前,还包括:
计算各类型所述内存对象的数量与其他类型所述内存对象的数量的比值;
当所述比值大于第三阈值时,确定所述类型的所述内存对象数量异常。
6.一种内存泄漏查证装置,其特征在于,所述装置包括:
对象获取模块,用于当存在一类的内存对象数量异常的情况下,获取所述类的所述内存对象;
关系获取模块,用于获取所述内存对象与其他内存对象之间的引用关系;
相似度计算模块,用于计算所述内存对象之间的所述引用关系的相似度;
第一对象确定模块,用于将相似度大于第一阈值的所述内存对象,确定为同一类型的所述内存对象;
第二对象确定模块,用于当存在一类型所述内存对象数量异常时,将所述类型的所述内存对象确定为导致内存泄漏的内存对象。
7.根据权利要求6所述的装置,其特征在于,还包括:
数量检测模块,用于在一定时间内,检测各类的内存对象数量的变化情况;
第一异常确定模块,用于若所述变化情况为存在一类的所述内存对象数量大于第二阈值,和或所述内存对象数量持续增加,则确定所述类的所述内存对象数量异常。
8.根据权利要求6所述的装置,其特征在于,所述数量检测模块,包括:
数量检测子模块,用于在一定时间内的初始时刻、以及结束时刻检测各类的所述内存对象数量;
数量比较子模块,用于若所述结束时刻检测的所述内存对象数量大于所述初始时刻检测的所述内存对象数量,则确定所述内存对象持续增加。
9.一种电子设备,其特征在于,包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至5中任一项所述的内存泄漏查证方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5中任一项所述的内存泄漏查证方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110813978.XA CN113419893B (zh) | 2021-07-19 | 2021-07-19 | 内存泄漏查证方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110813978.XA CN113419893B (zh) | 2021-07-19 | 2021-07-19 | 内存泄漏查证方法、装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113419893A true CN113419893A (zh) | 2021-09-21 |
CN113419893B CN113419893B (zh) | 2022-07-12 |
Family
ID=77721847
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110813978.XA Active CN113419893B (zh) | 2021-07-19 | 2021-07-19 | 内存泄漏查证方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113419893B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101615143A (zh) * | 2008-06-27 | 2009-12-30 | 国际商业机器公司 | 用于内存泄漏诊断的方法和装置 |
US20110276949A1 (en) * | 2010-05-04 | 2011-11-10 | Oracle International Corporation | Memory leak detection |
CN109670304A (zh) * | 2017-10-13 | 2019-04-23 | 北京安天网络安全技术有限公司 | 恶意代码家族属性的识别方法、装置及电子设备 |
CN110851281A (zh) * | 2019-11-13 | 2020-02-28 | 北京无限光场科技有限公司 | 检测内存泄漏的方法、服务器、终端、系统及存储介质 |
CN112463626A (zh) * | 2020-12-10 | 2021-03-09 | 网易(杭州)网络有限公司 | 内存泄漏定位方法、装置、计算机设备及存储介质 |
-
2021
- 2021-07-19 CN CN202110813978.XA patent/CN113419893B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101615143A (zh) * | 2008-06-27 | 2009-12-30 | 国际商业机器公司 | 用于内存泄漏诊断的方法和装置 |
US20110276949A1 (en) * | 2010-05-04 | 2011-11-10 | Oracle International Corporation | Memory leak detection |
CN109670304A (zh) * | 2017-10-13 | 2019-04-23 | 北京安天网络安全技术有限公司 | 恶意代码家族属性的识别方法、装置及电子设备 |
CN110851281A (zh) * | 2019-11-13 | 2020-02-28 | 北京无限光场科技有限公司 | 检测内存泄漏的方法、服务器、终端、系统及存储介质 |
CN112463626A (zh) * | 2020-12-10 | 2021-03-09 | 网易(杭州)网络有限公司 | 内存泄漏定位方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113419893B (zh) | 2022-07-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8195720B2 (en) | Detecting memory leaks | |
CN102402479B (zh) | 用于静态分析的中间表示结构 | |
CN111723380B (zh) | 一种检测组件漏洞的方法及装置 | |
Lin et al. | A divergence-oriented approach to adaptive random testing of Java programs | |
CN105760292A (zh) | 一种用于单元测试的断言验证方法和装置 | |
WO2021216081A1 (en) | Runtime application monitoring without modifying application program code | |
CN111767076A (zh) | 代码重构方法及装置 | |
US9274946B2 (en) | Pre-leak detection scan to identify non-pointer data to be excluded from a leak detection scan | |
CN112579623A (zh) | 存储数据的方法、装置、存储介质及设备 | |
Mitropoulos et al. | Dismal code: Studying the evolution of security bugs | |
CN113419893B (zh) | 内存泄漏查证方法、装置、电子设备和存储介质 | |
CN112148590B (zh) | 一种代码覆盖率的确定方法、装置及设备 | |
CN108763092B (zh) | 一种基于交叉验证的代码缺陷检测方法及装置 | |
CN110008108B (zh) | 回归范围确定方法、装置、设备及计算机可读存储介质 | |
Wang et al. | Weak-assert: A weakness-oriented assertion recommendation toolkit for program analysis | |
CN116069650A (zh) | 一种测试用例的生成方法及装置 | |
CN111858307B (zh) | 模糊测试方法和设备 | |
CN112181825A (zh) | 测试案例库构建方法、装置、电子设备及介质 | |
CN112579858A (zh) | 一种数据爬取方法及装置 | |
US9852046B1 (en) | Method and system for automated debugging memory allocation and memory release | |
CN113407442B (zh) | 一种基于模式的Python代码内存泄漏检测方法 | |
CN111582347B (zh) | 一种故障诊断方法及装置 | |
CN116383834B (zh) | 针对源码漏洞检测工具异常的检测方法以及相关设备 | |
CN110874317B (zh) | 一种生成、使用测试用例的方法及其服务器、终端 | |
CN107291613B (zh) | 一种功能节点异常模拟方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |