一种内存泄漏的定位方法及装置制造方法及图纸

技术编号:17561618 阅读:27 留言:0更新日期:2018-03-28 12:10
本申请提供一种内存泄漏的定位方法及装置。一种内存泄漏的定位方法,所述方法应用于网络设备,包括:在系统启动的过程中,判断内存使用率是否达到第一预设阈值;若内存使用率达到所述第一预设阈值,则查询已分配的内存地址中是否存在与启动程序的变量值不匹配的内存地址;若存在与所述变量值不匹配的内存地址,则确定所述内存地址对应的内存未被释放;根据所述未被释放的内存的内存信息获取申请所述内存的函数,并定位所述函数在所述程序中的位置,以定位内存泄漏的位置。与现有技术相比,本申请可提高内存泄漏的定位效率。

A location method and device for memory leakage

The present application provides a method and device for locating a memory leak. A positioning method of memory leaks, including the method used in network equipment: during startup, judging whether the memory usage reaches a first preset threshold value; if the memory usage reaches the first threshold, the query memory address allocated in the presence and start the program variable value memory the address does not match; if there are variables and the value of the memory address does not match, determine the memory address of the corresponding memory is not released; according to the memory function for the memory of the memory is not released to obtain information, and locate the position of the function in the program, to locate the memory leak location. Compared with the existing technology, this application can improve the location efficiency of the memory leakage.

【技术实现步骤摘要】
一种内存泄漏的定位方法及装置
本申请涉及通信
,尤其涉及一种内存泄漏的定位方法及装置。
技术介绍
内存泄漏是指程序中己动态分配的堆内存在使用后未释放或无法释放的现象,内存泄漏会造成系统内存的浪费,从而导致程序运行速度减慢,甚至可能导致系统崩溃等严重后果。在软件开发中,内存泄漏是常见的问题,但定位内存泄漏的位置却较难实现。现有技术中,定位内存泄露的位置的方法是,通过在程序中较易发生内存泄漏的位置增添格式输出函数,用以获取更多的相关日志信息。当内存泄漏时,开发人员可根据上述日志信息查找发生内存泄漏的可疑代码的位置,之后通过删除或注释掉程序中该可疑代码后重新运行该程序,以检测当前程序使用内存的情况。如果检测到此时的内存使用率不再显著增加,则可说明该代码位置发生内存泄漏的可能性较大。为进一步确认该代码位置是否发生内存泄漏,可将上述代码重新添加至程序后再次运行该程序,如果检测到此时的内存使用率又显著增加,则可确定该代码位置发生内存泄漏。但现有技术的不足在于:需要人为对大量日志信息进行分析,以查找发生内存泄漏的可疑代码的位置,并且需要人为不断地对可疑代码进行修改及调试,以定位内存泄漏的位置,从而导致内存泄漏的定位效率较低。
技术实现思路
有鉴于此,本申请提供一种内存泄漏的定位方法及装置,以提高内存泄漏的定位效率。具体地,本申请是通过如下技术方案实现的:一种内存泄漏的定位方法,所述方法应用于网络设备,包括:在系统启动的过程中,判断内存使用率是否达到第一预设阈值;若内存使用率达到所述第一预设阈值,则查询已分配的内存地址中是否存在与启动程序的变量值不匹配的内存地址;若存在与所述变量值不匹配的内存地址,则确定所述内存地址对应的内存未被释放;根据所述未被释放的内存的内存信息获取申请所述内存的函数,并定位所述函数在所述程序中的位置,以定位内存泄漏的位置。一种内存泄漏的定位装置,所述装置应用于网络设备,包括:判断模块,用于在系统启动的过程中,判断内存使用率是否达到第一预设阈值;查询模块,用于在内存使用率达到所述第一预设阈值时,查询已分配的内存地址中是否存在与启动程序的变量值不匹配的内存地址;确定模块,用于在存在与所述变量值不匹配的内存地址时,确定所述内存地址对应的内存未被释放;定位模块,用于用于根据所述未被释放的内存的内存信息获取申请所述内存的函数,并定位所述函数在所述启动程序中的位置,以定位内存泄漏的位置。本申请的技术方案,在内存使用率达到第一预设阈值时,系统可通过查询已分配的内存地址中是否存在与启动程序的变量值不匹配的内存地址,从而确定其中未被释放的内存,之后通过分析上述内存的内存信息获取申请所述内存的函数,并定位该函数在上述启动程序中的位置,以定位内存泄漏的位置。与现有技术相比,本申请的技术方案中定位过程可无需人为参与,且无需对程序的源代码进行修改及调试,即可定位内存泄漏的位置,从而可提高内存泄漏的定位效率。附图说明图1是本申请实施例一示出的一种内存泄漏的定位方法流程图;图2是本申请实施例二示出的一种内存泄漏的定位方法流程图;图3是本申请实施例三示出的一种内存泄漏的定位方法流程图;图4是本申请实施例示出的一种网络设备的硬件结构图;图5是本申请实施例一示出的一种内存泄漏的定位装置的结构示意图;图6是本申请实施例二示出的一种内存泄漏的定位装置的结构示意图;图7是本申请实施例三示出的一种内存泄漏的定位装置的结构示意图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。下面将结合具体实施例对本申请的实现过程进行描述。请参考图1,图1为本申请实施例一示出的一种内存泄漏的定位方法流程图,该方法可应用于网络设备,用于定位系统启动过程中内存泄漏的位置,该方法可包括以下基本步骤:S101,系统启动过程中,判断内存使用率是否达到第一预设阈值。通常,系统启动时会启动相应的启动程序,该启动程序在执行时可通过调用malloc函数向系统动态申请内存,系统根据其申请的内存大小向其分配所需的内存。在内存使用结束后,启动程序可调用free函数将上述申请的内存释放。而若启动程序执行过程中不断申请内存而之后未释放上述所申请的内存,则将使内存使用率不断增加。在本申请实施例中,在系统启动过程中可监控此时间段内的内存使用率。当监控到内存使用率达到设定的第一预设阈值时,可认为系统启动过程中所启动的启动程序可能发生内存泄漏,为进一步确认是否发生内存泄漏,可继续执行步骤S102。其中,上述第一预设阈值可根据实际需求进行设置,例如,对设备的运行速度要求较高的情况下,为更及时发现一些轻微的内存泄漏,可将上述阈值设置为较小值,例如40%,也可以为50%,此处不作限定。S102,查询已分配的内存地址中是否存在与启动程序的变量值不匹配的内存地址。S103,确定与所述变量值不匹配的内存地址对应的内存未被释放。在本申请实施例中,在监控到内存使用率达到上述第一预设阈值后,系统可查询当前已分配的内存的内存地址,并将当前内存中存储的上述启动程序的变量值与上述所分配的内存地址进行比对。其中,上述变量值可能是内存地址,也可能是其它的信息,例如可能是字符串。变量值是其它的信息时,变量值与已分配的内存地址不会匹配;变量值是内存地址时,与已分配的内存地址可能匹配,也可能不匹配。若从上述已分配的内存地址中查询到与上述变量值不匹配的内存地址,则可确定该内存地址对应的内存未被释放。例如,可假设当前已分配的内存的内存信息如表1所示,变量a,b,c的值如表2所示。其中,表1中可包含已分配的内存的起始地址,分配的内存大小,申请该内存的函数名,以及该函数所在的程序名。系统通过表1和表2的比对可知,与变量值不匹配的内存地址为0x8049322,由此可确定该内存地址对应的内存尚未被释放。内存起始地址内存大小函数名程序名0x80493202字节Func1A1.c0x80493222字节Func2A1.c表1abc30x80493200x8049321表2需要说明的是,表1和表2仅为示例性说明,其中,表1中还可以包含该函数的参数信息等,表2还可以不包含变量名等信息,在此不再赘述。S104,获取申请所述内存的函数,并定位所述函数在所述程序中的位置。本文档来自技高网...
一种内存泄漏的定位方法及装置

【技术保护点】
一种内存泄漏的定位方法,其特征在于,所述方法应用于网络设备,包括:在系统启动的过程中,判断内存使用率是否达到第一预设阈值;若内存使用率达到所述第一预设阈值,则查询已分配的内存地址中是否存在与启动程序的变量值不匹配的内存地址;若存在与所述变量值不匹配的内存地址,则确定所述内存地址对应的内存未被释放;根据所述未被释放的内存的内存信息获取申请所述内存的函数,并定位所述函数在所述启动程序中的位置,以定位内存泄漏的位置。

【技术特征摘要】
1.一种内存泄漏的定位方法,其特征在于,所述方法应用于网络设备,包括:在系统启动的过程中,判断内存使用率是否达到第一预设阈值;若内存使用率达到所述第一预设阈值,则查询已分配的内存地址中是否存在与启动程序的变量值不匹配的内存地址;若存在与所述变量值不匹配的内存地址,则确定所述内存地址对应的内存未被释放;根据所述未被释放的内存的内存信息获取申请所述内存的函数,并定位所述函数在所述启动程序中的位置,以定位内存泄漏的位置。2.根据权利要求1所述的方法,其特征在于,还包括:在系统成功启动后,判断内存使用率是否达到第二预设阈值;在内存使用率达到所述第二预设阈值后,若再次进行内存分配,则保存被分配的内存的内存信息;若对已分配的内存进行释放,则判断是否已保存有被释放的内存对应的内存信息;若已保存有所述被释放的内存对应的内存信息,则标记所述内存信息;在接收到停止指令时,根据保存的所述内存信息,定位内存泄漏的位置。3.根据权利要求2所述的方法,其特征在于,所述根据保存的所述内存信息,定位内存泄漏的位置,包括:从保存的所述内存信息中获取未被标记的内存信息;根据所述未被标记的内存信息获取申请所述内存的函数,并定位所述函数在其所属程序中的位置,以定位内存泄漏的位置。4.根据权利要求1所述的方法,其特征在于,还包括:在系统成功启动后,判断内存使用率是否达到第三预设阈值;在内存使用率达到所述第三预设阈值后,若再次进行内存分配,则保存所分配的内存的内存信息;若对已分配的内存进行释放,则判断是否已保存有被释放的内存对应的内存信息;若已保存有所述被释放的内存对应的内存信息,则将保存的所述被释放的内存对应的内存信息删除;在接收到停止指令时,根据保存的所述内存信息获取申请所述内存的函数,并定位所述函数在其所属程序中的位置,以定位内存泄漏的位置。5.根据权利要求1所述的方法,其特征在于,所述内存信息包括内存起始地址、内存大小和函数调用栈信息。6.一种内存泄漏的定位装置,其特征在于,所述装置应用于网络设备,包括:判断模块,用于在系统启动...

【专利技术属性】
技术研发人员:赵丹
申请(专利权)人:杭州迪普科技股份有限公司
类型:发明
国别省市:浙江,33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1