CN107844394A - 一种内存泄漏的定位方法及装置 - Google Patents

一种内存泄漏的定位方法及装置 Download PDF

Info

Publication number
CN107844394A
CN107844394A CN201711131609.2A CN201711131609A CN107844394A CN 107844394 A CN107844394 A CN 107844394A CN 201711131609 A CN201711131609 A CN 201711131609A CN 107844394 A CN107844394 A CN 107844394A
Authority
CN
China
Prior art keywords
memory
internal memory
information
internal
function
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
Application number
CN201711131609.2A
Other languages
English (en)
Other versions
CN107844394B (zh
Inventor
璧典腹
赵丹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou DPTech Technologies Co Ltd
Original Assignee
Hangzhou DPTech Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou DPTech Technologies Co Ltd filed Critical Hangzhou DPTech Technologies Co Ltd
Priority to CN201711131609.2A priority Critical patent/CN107844394B/zh
Publication of CN107844394A publication Critical patent/CN107844394A/zh
Application granted granted Critical
Publication of CN107844394B publication Critical patent/CN107844394B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2205Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2273Test methods

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

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

Description

一种内存泄漏的定位方法及装置
技术领域
本申请涉及通信技术领域,尤其涉及一种内存泄漏的定位方法及装置。
背景技术
内存泄漏是指程序中己动态分配的堆内存在使用后未释放或无法释放的现象,内存泄漏会造成系统内存的浪费,从而导致程序运行速度减慢,甚至可能导致系统崩溃等严重后果。
在软件开发中,内存泄漏是常见的问题,但定位内存泄漏的位置却较难实现。现有技术中,定位内存泄露的位置的方法是,通过在程序中较易发生内存泄漏的位置增添格式输出函数,用以获取更多的相关日志信息。当内存泄漏时,开发人员可根据上述日志信息查找发生内存泄漏的可疑代码的位置,之后通过删除或注释掉程序中该可疑代码后重新运行该程序,以检测当前程序使用内存的情况。如果检测到此时的内存使用率不再显著增加,则可说明该代码位置发生内存泄漏的可能性较大。为进一步确认该代码位置是否发生内存泄漏,可将上述代码重新添加至程序后再次运行该程序,如果检测到此时的内存使用率又显著增加,则可确定该代码位置发生内存泄漏。
但现有技术的不足在于:需要人为对大量日志信息进行分析,以查找发生内存泄漏的可疑代码的位置,并且需要人为不断地对可疑代码进行修改及调试,以定位内存泄漏的位置,从而导致内存泄漏的定位效率较低。
发明内容
有鉴于此,本申请提供一种内存泄漏的定位方法及装置,以提高内存泄漏的定位效率。
具体地,本申请是通过如下技术方案实现的:
一种内存泄漏的定位方法,所述方法应用于网络设备,包括:
在系统启动的过程中,判断内存使用率是否达到第一预设阈值;
若内存使用率达到所述第一预设阈值,则查询已分配的内存地址中是否存在与启动程序的变量值不匹配的内存地址;
若存在与所述变量值不匹配的内存地址,则确定所述内存地址对应的内存未被释放;
根据所述未被释放的内存的内存信息获取申请所述内存的函数,并定位所述函数在所述程序中的位置,以定位内存泄漏的位置。
一种内存泄漏的定位装置,所述装置应用于网络设备,包括:
判断模块,用于在系统启动的过程中,判断内存使用率是否达到第一预设阈值;
查询模块,用于在内存使用率达到所述第一预设阈值时,查询已分配的内存地址中是否存在与启动程序的变量值不匹配的内存地址;
确定模块,用于在存在与所述变量值不匹配的内存地址时,确定所述内存地址对应的内存未被释放;
定位模块,用于用于根据所述未被释放的内存的内存信息获取申请所述内存的函数,并定位所述函数在所述启动程序中的位置,以定位内存泄漏的位置。
本申请的技术方案,在内存使用率达到第一预设阈值时,系统可通过查询已分配的内存地址中是否存在与启动程序的变量值不匹配的内存地址,从而确定其中未被释放的内存,之后通过分析上述内存的内存信息获取申请所述内存的函数,并定位该函数在上述启动程序中的位置,以定位内存泄漏的位置。与现有技术相比,本申请的技术方案中定位过程可无需人为参与,且无需对程序的源代码进行修改及调试,即可定位内存泄漏的位置,从而可提高内存泄漏的定位效率。
附图说明
图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,由此可确定该内存地址对应的内存尚未被释放。
内存起始地址 内存大小 函数名 程序名
0x8049320 2字节 Func1 A1.c
0x8049322 2字节 Func2 A1.c
表1
a b c
3 0x8049320 0x8049321
表2
需要说明的是,表1和表2仅为示例性说明,其中,表1中还可以包含该函数的参数信息等,表2还可以不包含变量名等信息,在此不再赘述。
S104,获取申请所述内存的函数,并定位所述函数在所述程序中的位置。
在本申请实施例中,系统确定上述内存地址为0x8049322对应的内存尚未被释放后,可根据表1中该内存对应的内存信息获取到申请该内存的函数名为Func2,进一步可知程序A1.c中的Func2函数发生内存泄漏。
另外,系统还可根据函数名及函数的参数信息等,定位出Func2在程序A1.c中的位置,例如,系统可定位出Func2出现在程序A1.c的第80行。由此即可定位出系统启动过程中内存泄漏的位置。
在本申请中,系统启动过程中,可通过查询其已分配的内存地址中,是否存在与启动程序中的变量值不匹配的内存地址,从而根据不匹配的内存地址确定未被释放的内存,继而可根据该内存对应的内存信息获取申请该内存的函数,并定位出该函数在程序中的位置。与现有技术相比,定位过程可无需人为参与,且无需对启动程序的源代码进行修改及调试,即可快速定位系统启动过程中内存泄漏的位置。
请参考图2,图2为本申请实施例二示出的一种内存泄漏的定位方法流程图,该方法可用于定位系统成功启动后程序中内存泄漏的位置,该方法可以包括以下步骤:
S201,系统成功启动后,判断内存使用率是否达到第二预设阈值。
在本申请实施例中,在系统成功启动后,可先监控当前的内存使用率是否达到设定的第二预设阈值,若达到上述第二预设阈值,则认为当前所运行的程序可能发生内存泄漏,可继续执行步骤S202,进一步确定是否发生内存泄漏。
其中,第二预设阈值可以与上述第一预设阈值相同,也可以不同,在此不作限定。
S202,再次进行内存分配时,保存被分配的内存的内存信息。
在本申请实施例中,在内存使用率达到第二预设阈值时,若此时再次进行内存分配,则可将所分配的内存的内存信息保存。其中,所保存的内存信息可包括所分配的内存的起始地址、内存大小及函数调用栈信息等,上述函数调用栈信息也可包括申请内存的函数名及该函数的参数等信息。
另外,还可根据所保存的内存信息中的函数名及参数等获取该函数所在的程序名,且还可获取到该函数在上述程序中的位置,并将上述程序名和位置作为内存信息进行保存。
例如,在再次进行内存分配时,保存的当前所分配的内存的信息可如表3所示。
内存起始地址 内存大小 函数名 程序名 函数位置
0x8049320 2字节 Func3 B1.c 第10行
0x8049322 2字节 Func4 B1.c 第20行
表3
S203,当已分配的内存释放时,判断是否已保存有被释放的内存对应的内存信息。
在本申请实施例中,当系统检测到有内存释放时,可先判断当前表3中是否已保存有所释放的内存对应的内存信息。若已保存有所释放的内存对应的内存信息,则可继续执行步骤S204;若未保存有所释放的内存对应的内存信息,则表明所释放的内存是在内存使用率达到第二预设阈值之前分配的,可不予处理。
S204,标记所述被释放的内存对应的内存信息。
在本申请实施例中,假设当前释放的内存的起始地址为0x8049320,释放的内存大小为2字节。查询表3可知,已保存有该释放的内存对应的内存信息,则可将表3中内存起始地址为0x8049320对应的内存信息进行标记,以表明该内存已被释放。例如可在表中设置状态位,并将该状态位置为1,用于标记已释放的内存。标记完成后,当前系统保存的内存信息可如表4所示。
状态位 内存起始地址 内存大小 函数名 程序名 函数位置
1 0x8049320 2字节 Func3 B1.c 第10行
0x8049322 2字节 Func4 B1.c 第20行
表4
S205,根据保存的内存信息定位内存泄漏的位置。
在本申请实施例中,在检测一段时间的内存分配及释放后,可在接收到停止检测指令时,从经过上述步骤保存的内存信息中获取未被标记的内存信息,若获取到未被标记的内存信息,则可确定程序发生内存泄漏,即可根据上述未被释放的内存获取申请该内存的函数名,并定位出该函数在其所属程序中的位置。
可假设在接收到停止检测指令时所保存的内存信息如表4所示。此时查询表4可获知,程序B1.c中第20行的函数Func4申请了内存起始地址为0x8049322的2个字节的内存,但在使用结束后未释放该内存。
其中,上述停止检测指令可能是由用户触发,也可能是根据检测周期自动触发,例如,内存使用率达到第二预设阈值20分钟后自动触发停止检测指令。
另外,请参考图3,图3为本申请实施例三示出的一种内存泄漏的定位方法流程图,该方法同样用于定位系统成功启动后程序中内存泄漏的位置,包括以下步骤:
S301,系统成功启动后,判断内存使用率是否达到第三预设阈值。
S302,再次进行内存分配时,保存被分配的内存的内存信息。
S303,当已分配的内存释放时,判断是否已保存有被释放的内存对应的内存信息。
步骤S301-S303同步骤S201-S203相似,系统成功启动后,在监控到内存使用率达到第三预设阈值时,若再次进行内存分配,则保存所分配的内存的内存信息;若检测到上述已分配的内存进行释放,可先判断当前是否已保存有所释放的内存对应的内存信息。若已保存有所释放的内存对应的内存信息,则可继续执行步骤S304;若未保存有所释放的内存对应的内存信息,则表明所释放的内存是在内存使用率达到第三预设阈值之前分配的,可不予处理。
其中,步骤S301-S303的具体操作可参见步骤S201-S203,此处不再赘述。
另外,上述第三预设阈值可以与步骤S201中的第二预设阈值相同,也可以不同,此处不作限定。
S304,删除所述被释放的内存对应的内存信息。
S305,根据保存的内存信息获取申请所述内存的函数及所述函数在程序中的位置。
仍以表3为例,且假设步骤S303所释放的内存的起始地址为0x8049320,释放的内存大小为2字节。在本申请实施例中,系统查询表3确定上述释放的内存已存在表3后,可删除该释放的内存对应的内存信息。此时系统保存的内存信息如表5所示。
内存起始地址 内存大小 函数名 程序名 函数位置
0x8049322 2字节 Func4 B1.c 第20行
表5
之后,在接收到停止检测指令时,可根据其当前是否还保存有内存信息,判断是否发生内存泄漏。若保存有内存信息,则可确定程序发生内存泄漏。
假设接收到停止检测指令时所保存的内存信息如表5所示。此时可确定程序发生内存泄漏,且根据表5可获知,程序B1.c中第20行的函数Func4申请了内存起始地址为0x8049322的2个字节的内存,但在使用结束后未释放该内存。
同样地,上述停止检测指令可能是由用户触发,也可能是根据检测周期自动触发,例如,内存使用率达到第二预设阈值20分钟后自动触发停止检测指令。
在本申请中,系统成功启动后,在内存使用率到达预设阈值时,可通过保存其后续分配的内存的内存信息,并在对已分配的内存进行释放时,通过标记或删除已保存的与被释放内存对应的内存信息,从而获取未被释放的内存,并可进一步根据该未被释放的内存的内存信息获取申请该内存的函数,并可定位出该函数在其所属程序中的位置。与现有技术相比,定位过程基本无需人为参与,且无需对程序的源代码进行修改及调试,即可快速定位系统成功启动后内存泄漏的位置。
与前述一种内存泄漏的定位方法的实施例相对应,本申请还提供了一种内存泄漏的定位装置的实施例。
本申请一种内存泄漏的定位装置的实施例可以应用在网络设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在网络设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本申请一种内存泄漏的定位装置所在网络设备的一种硬件结构图,除了图4所示的处理器、内存、网络出接口、以及非易失性存储器之外,实施例中装置所在的网络设备通常根据该网络设备的实际功能,还可以包括其他硬件,对此不再赘述。
请参考图5,图5为本申请实施例一示出的一种内存泄漏的定位装置的结构示意图,该装置可以包括以下模块:
判断模块510,用于在系统启动的过程中,判断内存使用率是否达到第一预设阈值;
查询模块520,用于在内存使用率达到所述第一预设阈值时,查询已分配的内存地址中是否存在与启动程序的变量值不匹配的内存地址;
确定模块530,用于在存在与所述变量值不匹配的内存地址时,确定所述内存地址对应的内存未被释放;
定位模块540,用于根据所述未被释放的内存的内存信息获取申请所述内存的函数,并定位所述函数在所述启动程序中的位置,以定位内存泄漏的位置。
在本申请实施例中,所述内存信息包括内存起始地址、内存大小和函数调用栈信息。
请参考图6,图6为本申请实施例二示出的一种内存泄漏的定位装置的结构示意图,该装置可以包括以下模块:
第一判断模块610,用于在系统成功启动后,判断内存使用率是否达到第二预设阈值;
保存模块620,用于在内存使用率达到所述第二预设阈值后,若再次进行内存分配,则保存被分配的内存的内存信息;
第二判断模块630,用于当对已分配的内存进行释放时,判断是否已保存有被释放的内存对应的内存信息;
标记模块640,用于在确定已保存有所述被释放的内存对应的内存信息时,标记所述内存信息;
定位模块650,用于在接收到停止指令时,根据保存的所述内存信息,定位内存泄漏的位置。
在本申请实施例中,所述定位模块650,还用于:
从保存的所述内存信息中获取未被标记的内存信息;
根据所述未被标记的内存信息获取申请所述内存的函数,并定位所述函数在其所属程序中的位置,以定位内存泄漏的位置。
请参考图7,图7为本申请实施例三示出的一种内存泄漏的定位装置的结构示意图,该装置可以包括以下模块:
第三判断模块710,用于在系统成功启动后,判断内存使用率是否达到第三预设阈值;
保存模块720,用于用于在内存使用率达到所述第三预设阈值后,若再次进行内存分配,则保存被分配的内存的内存信息;
第四判断模块730,用于当对已分配的内存进行释放时,判断是否已保存有被释放的内存对应的内存信息;
删除模块740,用于在确定已保存有所述被释放的内存对应的内存信息时,将保存的所述被释放的内存对应的内存信息删除;
定位模块750,用于在接收到停止指令时,根据保存的所述内存信息获取申请所述内存的函数,并定位所述函数在其所属程序中的位置,以定位内存泄漏的位置。
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

Claims (10)

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

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711131609.2A CN107844394B (zh) 2017-11-15 2017-11-15 一种内存泄漏的定位方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711131609.2A CN107844394B (zh) 2017-11-15 2017-11-15 一种内存泄漏的定位方法及装置

Publications (2)

Publication Number Publication Date
CN107844394A true CN107844394A (zh) 2018-03-27
CN107844394B CN107844394B (zh) 2020-12-29

Family

ID=61679017

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711131609.2A Active CN107844394B (zh) 2017-11-15 2017-11-15 一种内存泄漏的定位方法及装置

Country Status (1)

Country Link
CN (1) CN107844394B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113835992A (zh) * 2020-06-23 2021-12-24 北京字节跳动网络技术有限公司 内存泄露的处理方法、装置、电子设备及计算机存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5764883A (en) * 1996-03-28 1998-06-09 Hewlett-Packard Co. System and method for checking for dynamic resource misuse in a computer program
CN101162436A (zh) * 2006-10-13 2008-04-16 中兴通讯股份有限公司 一种通信设备系统中内存泄漏的检测方法
CN103268287A (zh) * 2013-06-05 2013-08-28 福州瑞芯微电子有限公司 检测内存泄露的方法与装置
CN104572460A (zh) * 2014-12-30 2015-04-29 大唐移动通信设备有限公司 一种内存泄露的检测方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5764883A (en) * 1996-03-28 1998-06-09 Hewlett-Packard Co. System and method for checking for dynamic resource misuse in a computer program
CN101162436A (zh) * 2006-10-13 2008-04-16 中兴通讯股份有限公司 一种通信设备系统中内存泄漏的检测方法
CN103268287A (zh) * 2013-06-05 2013-08-28 福州瑞芯微电子有限公司 检测内存泄露的方法与装置
CN104572460A (zh) * 2014-12-30 2015-04-29 大唐移动通信设备有限公司 一种内存泄露的检测方法和装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113835992A (zh) * 2020-06-23 2021-12-24 北京字节跳动网络技术有限公司 内存泄露的处理方法、装置、电子设备及计算机存储介质
CN113835992B (zh) * 2020-06-23 2023-10-20 抖音视界有限公司 内存泄露的处理方法、装置、电子设备及计算机存储介质

Also Published As

Publication number Publication date
CN107844394B (zh) 2020-12-29

Similar Documents

Publication Publication Date Title
CN106407031B (zh) 一种内存泄露定位方法及电子设备
CN103092700B (zh) 内存清理方法、装置和终端设备
CN103559446B (zh) 一种基于安卓系统的设备的动态病毒检测方法和装置
US9639399B2 (en) Method, apparatus and terminal for releasing memory
CN106055478A (zh) 检测内存泄漏的方法和装置
CN103746977A (zh) 一种Linux服务器的连接方法和装置
CN103914355A (zh) 对内存重复释放进行定位的方法和装置
CN111526225B (zh) 会话管理方法和装置
CN105678164A (zh) 检测恶意软件的方法及装置
CN103699835B (zh) 一种面向Android系统资源的访问控制方法
CN113158191B (zh) 基于智能探针的漏洞验证方法及相关iast方法、系统
CN103914376A (zh) 一种内存泄露的快速定位方法
CN104994183A (zh) 短网址确定方法和装置
CN108647061A (zh) 系统隐藏方法的调用方法、装置和计算设备
CN107844394A (zh) 一种内存泄漏的定位方法及装置
CN106933611A (zh) 类加载方法及类加载器
US9274946B2 (en) Pre-leak detection scan to identify non-pointer data to be excluded from a leak detection scan
CN110874301B (zh) 程序卡顿信息的获取方法和装置
CN104951370B (zh) 一种内存管理方法及装置
US20190065223A1 (en) Disabling Just-In-Time Translation For Application Functions
CN107066335A (zh) 一种云平台内存的优化方法和优化系统
CN109960658B (zh) 应用程序编程接口测试方法、装置、电子设备及存储介质
CN109472135A (zh) 一种检测进程注入的方法、装置及存储介质
CN105260313B (zh) 内存泄漏检查系统及方法
CN105740028A (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