掌桥专利:专业的专利平台
掌桥专利
首页

技术领域

本发明涉及网络通信技术领域,尤其涉及一种内存泄漏检测方法及装置。

背景技术

内存泄漏一般是指内存使用时存在申请后没有及时释放的内存空间,导致该内存空间无法再被利用,形成死内存。严重的时候,会导致内存逐步耗尽,应用崩溃。

传统内存泄漏检测方案是不断监控内存占用情况,当内存占用异常(比如阈值告警、或异常升高)时,通知运维人员查看各内存块的占用情况,通过分析可疑内存块申请释放与相关应用的关系去猜测是否发生内存泄漏

实践发现,上述内存泄漏检测方案中,当内存到达阈值告警时,可能已经对系统造成损害,且发现故障依赖运维人员的经验,效率低、可靠性差。

发明内容

本发明提供一种内存泄漏检测方法及装置,以解决传统内存泄漏检测方案效率低、可靠性差的问题。

根据本发明实施例的第一方面,提供一种内存泄漏检测方法,包括:

依据指定时间序列中各时间点的动态表项利用率,确定所述动态表项在所述各时间点上的加权利用率,以得到加权利用率序列;

依据所述加权利用率序列中的加权利用率众数对应的目标时间点序列,确定所述目标时间点序列中各时间点的内存占用率,以得到内存占用率序列;

依据所述内存占用率序列与所述目标时间序列的相关性,确定所述内存占用率序列的单调性;

当所述内存占用率序列呈现单调上升性,且所述内存占用率序列的前后内存差大于第一预设阈值时,确定存在内存泄漏。

根据本发明实施例的第二方面,提供一种内存泄漏检测装置,包括:

第一确定单元,用于依据指定时间序列中各时间点的动态表项利用率,确定所述动态表项在所述各时间点上的加权利用率,以得到加权利用率序列;

第二确定单元,用于依据所述加权利用率序列中的加权利用率众数对应的目标时间点序列,确定所述目标时间点序列中各时间点的内存占用率,以得到内存占用率序列;

第三确定单元,用于依据所述内存占用率序列与所述目标时间序列的相关性,确定所述内存占用率序列的单调性;

第四确定单元,用于当所述内存占用率序列呈现单调上升性,且所述内存占用率序列的前后内存差大于第一预设阈值时,确定存在内存泄漏。

根据本发明实施例的第三方面,提供一种电子设备,该电子设备包括:

处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;所述处理器用于执行机器可执行指令,以实现第一方面提供的内存泄漏检测方法。

应用本发明公开的技术方案,通过依据指定时间序列中各时间点的动态表项利用率,确定动态表项在各时间点上的加权利用率,以得到加权利用率序列;依据加权利用率序列中的加权利用率众数对应的目标时间点序列,确定目标时间点序列中各时间点的内存占用率,以得到内存占用率序列,进而,依据内存占用率序列与目标时间序列的相关性,确定内存占用率序列的单调性;当内存占用率序列呈现单调上升性,且内存占用率序列的前后内存差大于第一预设阈值时,确定存在内存泄漏,通过确定动态表项整体利用率相近的多个时间点上的内存占用率组成的内存占用率序列的单调性,以及前后内存差,并依据该内存占用率序列的单调性以及前后内存差进行内存泄漏判定,利用正常情况下,动态表项整体利用率相近时,内存占用率变化也不会太大的特性,实现了内存泄漏的自动检测,提高了内存泄漏检测的效率和可靠性。

附图说明

图1是本发明实施例提供的一种内存泄漏检测方法的流程示意图;

图2是本发明实施例提供的另一种内存泄漏检测方法的流程示意图;

图3是本发明实施例提供的一种确定内存泄漏平均增长率的流程示意图;

图4是本发明实施例提供的一种内存泄漏检测方法的流程示意图;

图5A~5C是本发明实施例提供的单板内存占用率序列的仿真示意图;

图6A~6C是本发明实施例提供的依据加权利用率得到的内存占用率序列的仿真示意图;

图7A是本发明实施例提供的正常情况下最大内存差、m'%序列单调性以及与内存泄漏集的平均相关系数的示意图;

图7B是本发明实施例提供的ARP内存泄漏情况下最大内存差、m'%序列单调性以及与内存泄漏集的平均相关系数的示意图;

图7C是本发明实施例提供的随机泄漏情况下最大内存差、m'%序列单调性以及与内存泄漏集的平均相关系数的示意图;

图8是本发明实施例提供的一种内存泄漏检测装置的结构示意图;

图9是本发明实施例提供的一种图8所示装置的硬件结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例中技术方案作进一步详细的说明。

请参见图1,为本发明实施例提供的一种内存泄漏检测方法的流程示意图,如图1所示,该内存泄漏检测方法可以包括以下步骤:

需要说明的是,本发明实施例中各步骤的序号大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

此外,本发明实施例提供的内存泄漏检测方法可以应用于包括但不限于对网络设备单板进行内存泄漏检测。

步骤101、依据指定时间序列中各时间点的动态表项利用率,确定动态表项在各时间点上的加权利用率,以得到加权利用率序列。

本发明实施例中,动态表项可以包括ARP(Address Resolution Protocol,地址解析协议)表项、路由表项、MAC(Media Access Control,媒体访问控制)表项以及ACL(AccessControl List,访问控制列表)等大规格动态表项中的多种。

考虑到动态表项通常具有规格巨大、对内存占用率影响大的特性,在正常情况(即未出现内存泄漏)下,当动态表项总体利用率变化不大的情况下,网络设备的内存占用率通常也会变化不大,因而,可以基于多个动态表项总体的利用率相近的时间点的内存占用率变化情况,来实现内存泄漏检测。

示例性的,可以通过动态表项利用率的加权和(本文中称为加权利用率)来表征动态表项总体利用率。

本发明实施例中,可以依据指定时间序列中各时间点的动态表项利用率,确定动态表项在各时间点上的加权利用率,以得到加权利用率序列。

示例性的,以动态表项包括ARP表项、路由表项、MAC表项以及ACL表项为例,加权利用率可以通过以下策略确定:

x%=w1*a%+w2*r%+w3*c%+w4*l%

其中,a%、r%、c%以及l%分别为ARP表项、路由表项、MAC表项以及ACL表项的利用率,w1、w2、w3和w4分别为ARP表项、路由表项、MAC表项以及ACL表项的利用率的加权系数。

ARP表项利用率(即a%)=当前所使用的ARP表项个数/ARP最大表项规格,其他动态表项利用率同理可得。

在一个示例中,各动态表项的加权系数可以通过以下策略确定:

w1=M_arp/(M_arp+M_route+M_mac+M_acl)

w2=M_route/(M_arp+M_route+M_mac+M_acl)

w3=M_mac/(M_arp+M_route+M_mac+M_acl)

w4=M_acl/(M_arp+M_route+M_mac+M_acl)

其中,M_arp为ARP表项最大表项规格占用的内存大小,M_route为路由表项最大表项规格占用的内存大小,M_mac为MAC表项最大表项规格占用的内存大小,M_acl为ACL表项最大表项规格占用的内存大小。

步骤102、依据加权利用率序列中的加权利用率众数对应的目标时间点序列,确定目标时间点序列中时间点的内存占用率,以得到内存占用率序列。

本发明实施例中,加权利用率序列中加权利用率众数是指加权利用率序列中出现次数最多的某一个加权利用率。

举例来说,假设加权利用率序列包括x1%、x2%、…、xn%,其中,与x2%的值相同的加权利用率的数量最多,则加权利用率的众数为x2%。

需要说明的是,若加权利用率序列中包括多个加权利用率众数,则可以将该多个加权利用率众数按照大小顺序进行排序,并取中间的加权利用率作为最终的加权利用率众数;其中,若加权利用率众数为奇数个(如2N+1个),则取按照大小排序后的第N+1个加权利用率众数作为最终的加权利用率众数;若加权利用率众数为偶数个(如2N个),则随机选择中间的两个中的一个,即取按照大小排序后的第N个或第N+1个加权利用率众数作为最终的加权利用率众数。

示例性的,考虑到加权利用率通过是小数(浮点数),若以实际加权利用率的值来确定加权利用率众数,则加权利用率序列中加权利用率众数对应的加权利用率的个数会比较少,进而,影响内存泄漏检测率的准确性。

此外,考虑到加权利用率小数点之后的值对实际加权利用率的影响不是太大,因此,为了提高内存泄漏检测率的准确性,在确定加权利用率序列中的加权利用率众数之前,可以对加权利用率序列中各加权利用率进行取整,并基于取整之后的值确定加权利用率序列中的加权利用率众数。

示例性的,对加权利用率进行取整可以通过四舍五入、向上取整或向下取整的方式实现。

优选地,可以通过四舍五入的方式对加权利用率进行取整。

本发明实施例中,当确定了加权利用率序列中的加权利用率众数时,可以依据加权利用率众数对应的时间点序列(本文中称为目标时间点序列),即加权利用率序列中值与所确定的加权利用率众数一致的加权利用率对应的时间点形成的时间点序列,并依据目标时间点序列中各时间点的内存占用率,生成内存占用率序列。

示例性的,若未特殊说明,本发明实施例中提及的时间点序列中各时间点均按照升序排列。

步骤103、依据内存占用率序列与目标时间序列的相关性,确定内存占用率序列的单调性。

本发明实施例中,考虑到正常情况下,动态表项总体利用率变化不大的情况下,网络设备的内存占用率通常也会变化不大。而在存在内存泄漏的情况下,即使动态表项总体利用率变化不大,网络设备的内存占用率也会稳步上升。

因此,当得到了内存占用率序列时,可以确定内存占用率序列与目标时间序列的相关性,并依据该相关性确定内存占用率序列的单调性。

示例性的,可以利用spearman算法计算内存占用率序列与目标时间序列的相关系数,通过该相关系数表征内存占用率序列与目标时间序列的相关性。

步骤104、当内存占用率序列呈现单调上升性,且内存占用率序列的前后内存差大于第一预设阈值,确定存在内存泄漏。

本发明实施例中,考虑到内存泄漏的情况下,按照上述方式得到的内存占用率序列会呈现单调上升性。

此外,考虑到syslog(系统日志)及各软件模块不断增加的diag信息也可能会导致内存适量增加,而在存在内存泄漏的情况下,即使加权利用率变化不大,随着时间的推移,内存占用率也会显著提高,因此为了排除随机性干扰,提高内存泄漏检测的准确性,当确定了内存占用率序列呈现单调上升性时,可以确定内存占用率序列的前后内存差。

示例性的,内存占用率序列的前后内存差可以为内存占用率序列中最后一个内存占用率对应的内存占用量与第一个内存占用率对应的内存占用量的差值。

需要说明的是,本发明实施例中,并不限于使用内存占用率序列中最后一个内存占用率对应的内存占用量与第一个内存占用率对应的内存占用量的差值作为内存占用率序列的前后内存差,也可以使用其它两个时间跨度足够大(如对应的时间点之间的差值大于预设时间阈值)的内存占用率对应的内存占用量之间的差值作为内存占用率序列的前后内存差,例如,也可以以内存占用率序列中倒数第二个内存占用率对应的内存占用量与第一个内存占用率对应的内存占用量的差值,或者,最后一个内存占用率对应的内存占用量与第二个内存占用率对应的内存占用量的差值作为内存占用率序列的前后内存差,其具体实现在此不做限定。

本发明实施例中,当确定内存占用率序列呈现单调上升性,且内存占用率序列的前后内存差大于预设阈值(可以根据实际需求设置,如30M,本文中称为第一预设阈值)时,可以确定存在内存泄漏。

可见,在图1所示方法流程中,通过确定动态表项整体利用率相近的多个时间点上的内存占用率组成的内存占用率序列的单调性,以及前后内存差,并依据该内存占用率序列的单调性以及前后内存差进行内存泄漏判定,利用正常情况下,动态表项整体利用率相近时,内存占用率变化也不会太大的特性,实现了内存泄漏的自动检测,提高了内存泄漏检测的效率和可靠性。

在一些实施例中,步骤104中,当内存占用率序列呈现单调上升性,且内存占用率序列的前后内存差大于第一预设阈值时,上述确定存在内存泄漏之前,还可以包括:

确定内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关性;

上述确定存在内存泄漏,可以包括:

当内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关性满足预设内存泄漏条件时,确定存在内存泄漏。

示例性的,考虑到内存泄漏情况下,内存占用率序列普遍呈单调上升趋势,因此,内存泄漏情况下的内存占用率序列之间的相关性通常较强;而正常情况下的内存占用率序列通常呈现随机波动趋势,与内存泄漏情况下,内存占用率序列的相关性较弱,因此,可以依据待判定的内存占用率序列与内存泄漏情况下的内存占用率序列的相关性,对待判定的内存占用率序列进行内存泄漏判定。

相应地,为了进一步提高内存泄漏检测的准确性,当按照上述方式得到的内存占用率序列呈现单调上升性,且内存占用率序列的前后内存差大于第一预设阈值时,还可以确定内存占用率序列与预设内存泄漏序列集中内存泄漏序列的相关性。

示例性的,预设内存泄漏序列集中可以包括预先构建的多个内存泄漏情况下的内存占用率序列(本文中可以称为内存泄漏序列)。

当确定了内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关性时,可以确定内存占用率序列与各内存泄漏序列的相关性是否满足预设内存泄漏条件,并当确定满足预设内存泄漏条件时,确定存在内存泄漏。

需要说明的是,若内存占用率序列与各内存泄漏序列的相关性不满足预设内存泄漏条件,则可以确定不存在内存泄漏。

在一个示例中,上述确定内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关性,可以包括:

确定内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关系数;

确定内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关系数的平均值;

上述内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关性满足预设内存泄漏条件,可以包括:

内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关系数的平均值超过第二预设阈值。

示例性的,可以分别确定内存占用率序列与各内存泄漏序列的相关系数。

例如,可以利用spearman算法确定内存占用率序列与内存泄漏序列的相关系数。

当确定了内存占用率序列与各内存泄漏序列的相关系数时,可以确定内存占用率序列与各内存泄漏序列的相关系数的平均值,并确定该平均值是否超过预设阈值(可以根据实际场景设定,如0.7,本文中称为第二预设阈值),并当该平均值超过第二预设阈值时,确定内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关性满足预设内存泄漏条件;否则,确定内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关性不满足预设内存泄漏条件。

在一些实施例中,如图2所示,步骤104中,确定存在内存泄漏之后,还可以包括以下步骤:

步骤105、依据内存占用率序列以及目标时间序列,确定内存泄漏平均增长率。

步骤106、依据内存泄漏平均增长率,确定内存达到告警门限的时间。

示例性的,当确定存在内存泄漏时,还可以依据内存占用率以及目标时间序列,确定内存泄漏平均增长率,该内存泄漏平均增长率可以表征存在内存泄漏情况下,内存占用量的增长速率,以便依据该内存泄漏平均增长率对可用内存占用量进行评估。

在一个示例中,如图3所示,步骤105中,依据内存占用率序列以及目标时间序列,确定内存泄漏平均增长率,可以通过以下步骤实现:

步骤1051、确定内存占用率序列的前后内存占用率差值,以及对应的时间差;

步骤1052、将前后内存占用率差值与时间差的比值,确定为内存泄漏平均增长率。

示例性的,当确定存在内存泄漏时,可以确定内存占用率序列的前后内存占用率差值,以及对应的时间差。

在一个示例中,内存占用率序列的前后内存占用率差值可以为内存占用率序列中最后一个内存占用率与第一个内存占用率的差值。

需要说明的是,本发明实施例中,并不限于使用内存占用率序列中最后一个内存占用率与第一个内存占用率的差值作为内存占用率序列的前后内存差,也可以使用其它两个时间跨度足够大(如对应的时间点之间的差值大于预设时间阈值)的内存占用率之间的差值作为内存占用率序列的前后内存差,例如,也可以以内存占用率序列中倒数第二个内存占用率与第一个内存占用率的差值,或者,最后一个内存占用率与第二个内存占用率的差值作为内存占用率序列的前后内存占用率差值,其具体实现在此不做限定。

前后内存占用率差值可以为参与前后内存占用率差值计算的两个内存占用率对应的时间点之间的差值。

例如,前后内存占用率差值为内存占用率序列中最后一个内存占用率与第一个内存占用率的差值时,对应的时间差为内存占用率序列中最后一个内存占用率对应的时间点与第一个内存占用率对应的时间点之间的差值,即目标时间序列中最后一个时间点与第一个时间点之间的差值。

当确定了内存占用率序列的前后内存占用率差值,以及对应的时间差时,可以将前后内存占用率差值与时间差的比值,确定为内存泄漏平均增长率,并依据该内存泄漏平均增长率,确定内存达到告警门限的时间。

需要说明的是,当确定了内存达到告警门限的时间时,可以将该时间通知给用户(如运维人员),或者,在内存达到告警门限的时间低于预设时间阈值时,将该时间通知给运维人员。

在一些实施例中,当确定存在内存泄漏时,还可以触发进一步的内存占用信息检查。

示例性的,可以通过规则引擎,使用netconf的命令行功能,交互的从设备上获取各内存块的变化信息,从而有助于运维人员进一步确认问题。

为了使本领域技术人员更好地理解本发明实施例提供的技术方案,下面结合具体应用场景对本发明实施例提供的技术方案进行说明。

在该实施例中,以动态表项包括ARP表项、路由表项、MAC表项以及ACL表项为例。

假设ARP表项、路由表项、MAC表项以及ACL表项的利用率分别为a%、r%、c%以及l%,ARP表项、路由表项、MAC表项以及ACL表项的利用率的加权系数分别为w1、w2、w3和w4。

各动态表项的加权系数可以通过以下策略确定:

w1=M_arp/(M_arp+M_route+M_mac+M_acl)

w2=M_route/(M_arp+M_route+M_mac+M_acl)

w3=M_mac/(M_arp+M_route+M_mac+M_acl)

w4=M_acl/(M_arp+M_route+M_mac+M_acl)

其中,M_arp为ARP表项最大表项规格占用的内存大小,M_route为路由表项最大表项规格占用的内存大小,M_mac为MAC表项最大表项规格占用的内存大小,M_acl为ACL表项最大表项规格占用的内存大小。

需要说明的是,M_arp=M_arp_size(一个ARP表项的大小)*ARP最大表项规格(最大ARP表项个数),由即M_arp的大小与M_arp_size相关,其他M_route_size,M_mac_size,M_acl_size情况类似。对于同一款产品,M_arp_size、M_route_size、M_mac_size以及M_acl_size取值几乎是不变的,除非软件大版本变化,M_arp_size、M_route_size、M_mac_size以及M_acl_size的取值可以事先计算出来。实验表明,w1,…,w4的取值即使略有偏差,也不影响分析结果。

在该实施例中,内存泄漏检测实现流程如下(以针对网络设备的单板进行内存泄漏检测为例):

1、计算单板上各动态表项利用率在各时间点上的加权和(即上述加权利用率),在加权和序列(即加权利用率序列)中的加权和众数(即上述加权利用率众数)的时间点位置采样,得到一个单板内存的内存占用率序列。

示例性的,假设指定时间序列t1,t2,…,tn,对应的内存占用率序列(可以称为m%序列)为:m1%,m2%,…,mn%,对应的加权利用率序列为:x1%,x2%,…,xn%。

对加权利用率序列中各加权利用率进行取整,并确定取整后的加权利用率序列中的加权利用率众数(假设为u%)。

假设加权利用率众数对应的时间序列为t1',t2',…,并依据这些时间点对应的内存占用率生成内存占用率序列(即上述内存占用率序列,假设为{m'%},可以称为m'%序列)。

2、当m'%序列呈现单调上升性,且前后内存差超过一定阈值(即上述第一预设阈值)时,初步判定内存泄漏隐患。

示例性的,由于m'%序列中包括的是加权利用率众数对应的时间点的内存占用率,即各动态表项占用内存大小之和大体相等,通过计算m'%序列取值与时间点的相关性,可以判断m'%序列的单调性。

考虑到syslog(系统日志)及各软件模块不断增加的diag信息也可能会导致内存适量增加,而在存在内存泄漏的情况下,即使加权利用率变化不大,随着时间的推移,内存占用率也会显著提高,因此为了排除随机性干扰,可以基于m'%序列的前后内存差进一步确定是否存在内存泄漏。

例如,对于存在内存泄漏的情况,要求m'%序列的前后内存差超过第一预设阈值(例如,30M),即对于m'%序列,假设为序列{m1'%,m2'%,…,mn'%}中,(mn'%-m1'%)*TotalMemory(即内存总量)≥30M。

若m'%序列呈现单调上升性,且前后内存差大于第一预设阈值,则初步判定该单板具有内存泄漏隐患。

3、模拟构造若干内存泄漏序列组成内存泄漏序列集,分别计算m'%序列与内存泄漏序列集中各内存泄漏序列的相关系数(例如,利用spearman算法计算spearman相关系数),并计算相关系数的平均值(可以称为平均相关系数),若该平均相关系数大于预设阈值(即上述第二预设阈值,如0.7),则进一步确定m'%序列为离群样本,即该单板存在内存泄漏。

示例性的,由于内存泄漏情况下的内存占用率序列普遍呈单调上升趋势,内存泄漏序列之间的相关性通常较强;而正常情况下的内存占用率序列通常呈现随机波动趋势,与内存泄漏情况下,内存占用率序列的相关性较弱,因此,可以依据待判定的内存占用率序列与内存泄漏情况下的内存占用率序列的相关性,对待判定的内存占用率序列进行内存泄漏判定。

可以通过分别计算m'%与预先模拟的一组(假设为100条)内存泄漏序列的相关系数,并取平均,若平均相关系数大于0.7,则确定该单板存在内存泄漏情况。

示例性的,上述内存泄漏检测流程可以如图4所示。

4、通过计算内存泄漏平均增长率,评估内存达到告警门限的时间。

示例性的,若判定单板发生了内存泄漏,则通过计算m'%序列的前后内存占用率差M_Diff(M_Diff=(mn'%-m1'%))和对应时间差T_Diff(即mn'%对应的时间点与m1'%对应的时间点的差值),可以得到该单板内存泄露的平均增长率v=M_Diff/T_Diff。进而预测内存达到告警门限的时间。

5、对于检测为内存泄漏的情况,还可以触发进一步的内存占用信息检查。

示例性的,可以通过规则引擎,使用netconf的命令行功能,交互的从设备上获取各内存块的变化信息,从而有助于运维人员进一步确认问题。

为了使本领域技术人员更好地理解本发明实施例提供的技术方案的效果,下面结合仿真实验数据对本发明实施例的效果进行说明。

通过设计模拟仿真实验,模拟正常情况下各动态表项利用率变化以及内存占用率变化,模拟某个动态表项发生内存泄漏时各动态表项利用率变化以及内存占用率变化,模拟发生随机内存泄漏时各动态表项利用率变化以及内存占用率变化。

假设对每种场景模拟1000条序列,每条数据模拟3个月的数据(时间间隔5分钟,一共288*30*3=25920个时间点)

1、单板内存占用率序列(即m%序列)

正常情况下内存占用率m%序列、ARP表项内存泄漏情况下内存占用率m%序列以及随机泄漏情况下内存占用率m%序列可以分别如图5A~5C所示(图5A~5C中左右图分别对应两次仿真)。

2、依据加权利用率得到的内存占用率序列(即m'%序列)

正常情况下内存占用率m'%序列、ARP表项内存泄漏情况下内存占用率m'%序列以及随机泄漏情况下内存占用率m'%序列可以分别如图6A~6C所示(图6A~6C中左右图分别对应两次仿真)。

可见,正常情况下,m'%序列波动较小,不呈现单调上升趋势;ARP表项内存泄漏情况下,m'%序列变化大,总体呈单调上升趋势;随机泄漏情况下,m'%序列变化较小,但总体仍然呈单调上升趋势。

3、前后内存差(也可以称为最大内存差),m'%序列单调性判断,以及与内存泄漏集的平均相关系数

正常情况下最大内存差、m'%序列单调性以及与内存泄漏集的平均相关系数可以如图7A所示。

可见,正常情况下,前后内存差均小于30M。

ARP内存泄漏情况下最大内存差、m'%序列单调性以及与内存泄漏集的平均相关系数可以如图7B所示。

可见,ARP内存泄漏情况下,前后内存差均大于30M(即以第一预设阈值为30M为例),单调性均大于0.7(即呈现单调上升性),与内存泄漏集的平均相关系数均大于0.7(即以第二预设阈值为0.7为例)。100组数据中有1组误判,准确率为99%。

随机泄漏情况下最大内存差、m'%序列单调性以及与内存泄漏集的平均相关系数可以如图7C所示。

部分随机泄漏情况下前后内存差小于30M,但占比极小,对内存泄漏检测影响较小;前后内存差大于30M的部分,单调性都大于0.7,可以判断是单调上升;与内存泄漏集的平均相关系数除了第12组数据小于0.7外,其余均大于0.7,可以判断为异常数据。100组数据中有2组误判,准确率98%。

可见,通过本发明实施例提供的方案进行内存泄漏检测可以实现内存泄漏的自动检测,效率较高,且准确性很高(依据仿真实验数据得到的准确性高达98%)。

请参见图8,为本发明实施例提供的一种内存泄漏检测装置的结构示意图,如图8所示,该内存泄漏检测装置可以包括:

第一确定单元810,用于依据指定时间序列中各时间点的动态表项利用率,确定所述动态表项在所述各时间点上的加权利用率,以得到加权利用率序列;

第二确定单元820,用于依据所述加权利用率序列中的加权利用率众数对应的目标时间点序列,确定所述目标时间点序列中各时间点的内存占用率,以得到内存占用率序列;

第三确定单元830,用于依据所述内存占用率序列与所述目标时间序列的相关性,确定所述内存占用率序列的单调性;

第四确定单元840,用于当所述内存占用率序列呈现单调上升性,且所述内存占用率序列的前后内存差大于第一预设阈值时,确定存在内存泄漏。

在一些实施例中,当所述内存占用率序列呈现单调上升性,且所述内存占用率序列的前后内存差大于第一预设阈值时,所述第四确定单元840确定存在内存泄漏之前,还包括:

确定所述内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关性;

所述第四确定单元840确定存在内存泄漏,包括:

当所述内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关性满足预设内存泄漏条件时,确定存在内存泄漏。

在一些实施例中,所述第四确定单元840确定所述内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关性,包括:

确定所述内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关系数;

确定所述内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关系数的平均值;

所述内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关性满足预设内存泄漏条件,包括:

所述内存占用率序列与预设内存泄漏序列集中各内存泄漏序列的相关系数的平均值超过第二预设阈值。

在一些实施例中,所述第四确定单元840确定存在内存泄漏之后,还包括:

依据所述内存占用率序列以及所述目标时间序列,确定内存泄漏平均增长率;

依据所述内存泄漏平均增长率,确定内存达到告警门限的时间。

在一些实施例中,所述第四确定单元840依据所述内存占用率序列以及所述目标时间序列,确定内存泄漏平均增长率,包括:

确定所述内存占用率序列的前后内存占用率差值,以及对应的时间差;

将所述前后内存占用率差值与所述时间差的比值,确定为所述内存泄漏平均增长率。

对应地,本发明还提供了图8所示装置的硬件结构。参见图9,该硬件结构可包括:处理器和机器可读存储介质,机器可读存储介质存储有能够被所述处理器执行的机器可执行指令;所述处理器用于执行机器可执行指令,以实现本发明上述示例公开的方法。

基于与上述方法同样的发明构思,本发明实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述计算机指令被处理器执行时,能够实现本发明上述示例公开的方法。

示例性的,上述机器可读存储介质可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

由上述实施例可见,通过依据指定时间序列中各时间点的动态表项利用率,确定动态表项在各时间点上的加权利用率,以得到加权利用率序列;依据加权利用率序列中的加权利用率众数对应的目标时间点序列,确定目标时间点序列中各时间点的内存占用率,以得到内存占用率序列,进而,依据内存占用率序列与目标时间序列的相关性,确定内存占用率序列的单调性;当内存占用率序列呈现单调上升性,且内存占用率序列的前后内存差大于第一预设阈值时,确定存在内存泄漏,通过确定动态表项整体利用率相近的多个时间点上的内存占用率组成的内存占用率序列的单调性,以及前后内存差,并依据该内存占用率序列的单调性以及前后内存差进行内存泄漏判定,利用正常情况下,动态表项整体利用率相近时,内存占用率变化也不会太大的特性,实现了内存泄漏的自动检测,提高了内存泄漏检测的效率和可靠性。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本公开旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。

应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

相关技术
  • 一种内存泄漏的检测方法、装置、介质和电子设备
  • 一种内存泄漏检测方法、装置及设备
技术分类

06120112389647