CN106155879A - 内存泄露的检测方法和装置 - Google Patents

内存泄露的检测方法和装置 Download PDF

Info

Publication number
CN106155879A
CN106155879A CN201510136216.5A CN201510136216A CN106155879A CN 106155879 A CN106155879 A CN 106155879A CN 201510136216 A CN201510136216 A CN 201510136216A CN 106155879 A CN106155879 A CN 106155879A
Authority
CN
China
Prior art keywords
memory
internal memory
target program
ram leakage
information
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
CN201510136216.5A
Other languages
English (en)
Other versions
CN106155879B (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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201510136216.5A priority Critical patent/CN106155879B/zh
Publication of CN106155879A publication Critical patent/CN106155879A/zh
Application granted granted Critical
Publication of CN106155879B publication Critical patent/CN106155879B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Storage Device Security (AREA)

Abstract

本申请公开了一种内存泄露的检测方法和装置,其中该方法包括:根据用户指令对系统的内存进行挤压,以将目标程序的匿名内存换出至交换空间;在目标程序继续运行过程中,接收目标程序的内存访问请求;将内存访问请求对应的内存换入,并记录换入的内存的内存信息;对记录的换入的内存的内存信息进行统计以对内存泄露的泄漏点进行定位。该方法可以针对所有应用程序进行内存泄露的检测,降低了检测条件,并扩大了检测范围。

Description

内存泄露的检测方法和装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种内存泄露的检测方法和装置。
背景技术
目前,内存泄露一般是由于程序设计错误、或者忘记释放、或者找不到应该释放的内存、或者释放内存的机制失效等原因导致的,其最直接的影响是程序拥有的内存资源会不断增长,最终影响整个系统的性能、稳定性甚至可用性。为此,为了保证系统能够正常运行,需检测出系统中的内存泄露点。
相关技术中,内存泄露的检测方法通常是需要在应用程序里事先加入相应检测功能或者打开Debug(消除故障)选项以确定应用程序中的内存泄露点。但是,由于相关技术中的内存泄露的检测方法一般只是针对已经事先准备检测功能或debug选项的应用程序,而对于没有事先作上述准备的应用程序不能进行内存泄露的检测,导致内存泄露的检测条件变高、范围变小。
发明内容
本申请的目的旨在至少在一定程度上解决上述的技术问题之一。
为此,本申请的第一个目的在于提出一种内存泄露的检测方法。该方法可以针对所有应用程序进行内存泄露的检测,降低了检测条件,并扩大了检测范围。
本申请的第二个目的在于提出一种内存泄露的检测装置。
为了实现上述目的,本申请第一方面实施例的内存泄露的检测方法,包括:根据用户指令对系统的内存进行挤压,以将目标程序的匿名内存换出至交换空间;在所述目标程序继续运行过程中,接收所述目标程序的内存访问请求;将所述内存访问请求对应的内存换入,并记录换入的内存的内存信息;对记录的所述换入的内存的内存信息进行统计以对内存泄露的泄漏点进行定位。
本申请实施例的内存泄露的检测方法,利用操作系统内核的交换机制,先将应用程序泄露的绝大部分匿名内存换出至交换空间,然后再监控换入操作,记录和泄露内存相关的信息,最后根据这些信息进行内存泄露点的定位。由于换入、换出操作对应于程序基本透明,所以不干扰应用程序的正常执行,另外,不需要应用程序事先实现内存泄露检测功能或打开Debug选项,可以针对所有应用程序进行内存泄露的检测,降低了检测条件,并扩大了检测范围。
为了实现上述目的,本申请第二方面实施例的内存泄露的检测装置,包括:挤压模块,用于根据用户指令对系统的内存进行挤压,以将目标程序的匿名内存换出至交换空间;接收模块,用于在所述目标程序继续运行过程中,接收所述目标程序的内存访问请求;换入模块,用于将所述内存访问请求对应的内存换入,并记录换入的内存的内存信息;以及定位模块,用于对记录的所述换入的内存的内存信息进行统计以对内存泄露的泄露点进行定位。
本申请实施例的内存泄露的检测装置,利用操作系统内核的交换机制,先将应用程序泄露的绝大部分匿名内存换出至交换空间,然后再监控换入操作,记录和泄露内存相关的信息,最后根据这些信息进行内存泄露点的定位。由于换入、换出操作对应于程序基本透明,所以不干扰应用程序的正常执行,另外,不需要应用程序事先实现内存泄露检测功能或打开Debug选项,可以针对所有应用程序进行内存泄露的检测,降低了检测条件,并扩大了检测范围。
本申请附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中,
图1是根据本申请一个实施例的内存泄露的检测方法的流程图;
图2是根据本申请一个实施例的内存泄露的检测方法的示例图;
图3是根据本申请一个实施例的内存泄露的检测装置的结构示意图;
图4是根据本申请另一个实施例的内存泄露的检测装置的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本申请,而不能理解为对本申请的限制。
目前,内存泄露一般是因为程序设计错误、或者忘记去释放、或者找不到应该释放的内存、或者释放内存的机制失效,其最直接的影响是程序拥有的内存资源不断增长,最终影响整个系统的性能、稳定性甚至可用性。
内存泄露可按照程序是否还会访问泄露内容而分成两种情况。在系统发生内存泄露的情况下,对于程序不再访问泄露内存的情况来说,其对线上系统的影响和危害稍小。本申请提出的内存泄露的检测方法和装置针对的是程序还会访问泄露内存的情况,例如,一种常见的场景是在数据结构(如列表、map、树)中存放的对象中有部分泄露,即使应用程序不直接访问这些对象,也会因为遍历、查找数据结构而会间接的访问这些对象,由于这种情况对线上系统的影响和危害较大,需要及时的检测定位内存泄露点。
为此,本申请提出了一种内存泄露的检测方法和装置,利用现代操作系统内存管理子系统内核的交换机制,先将应用程序泄露的匿名内存换出至交换空间,然后再监控换入操作,记录和泄露内存相关的信息,最后根据这些信息推导出泄露内存所属的对象,进一步找到泄露点。具体地,下面参考附图描述本申请实施例的内存泄露的检测方法和装置。
需要说明的是,在应用本申请的内存泄露的检测方法和装置对目标程序进行内存泄露的检测时,具有如下两个前提:1)在发生内存泄露之后,目标程序还会访问泄露的内存,如一种常见的场景是在数据结构(如列表、map、树)中存放的对象中有部分泄露,即使目标程序不直接访问这些对象,也会因为遍历、查找数据结构而会间接的访问对象;2)内存泄露比较严重。
图1是根据本申请一个实施例的内存泄露的检测方法的流程图。图2是根据本申请一个实施例的内存泄露的检测方法的示例图。如图1和图2所示,该内存泄露的检测方法可以包括:
S101,根据用户指令对系统的内存进行挤压,以将目标程序的匿名内存换出至交换空间。
需要说明的是,在本申请的一个实施例中,在根据用户指令对系统的内存进行挤压之前,该内存泄露的检测方法还可包括:根据用户的使能指令对交换空间进行使能。举例而言,以用户的使能指令为挂载命令Mount为例,可根据挂载命令Mount以使能交换空间,为后续的换入换出做好准备(如图2所示的“1.Mount交换空间”)。
此外,在本申请的实施例中,用户指令可为调整/proc/sys/vm/min_free_kbytes参数。
需要说明的是,在本申请的实施例中,匿名内存可理解为在文件系统里没有相应的后备文件的那些内存,比如程序中的堆、栈。匿名内存的交换目的地是交换空间。其中,交换空间(Swap space)在物理内存(RAM)被充满时被使用,如果系统需要更多的内存资源,而物理内存已经充满,内存中不活跃的页就会被移到交换空间去。
可以理解,在本申请的实施例中,系统的内存可包括内核内存和用户程序的内存。在本步骤中,用户指令主要是对系统中的内核发出的,不过该用户指令的目的不仅是挤压内核内存,更重要的是挤压用户程序内存。例如,以系统的操作系统为Linux操作系统为例,当目标程序的内存泄露比较严重时,在Linux操作系统下用户可调整/proc/sys/vm/min_free_kbytes参数到一个合理的足够大的值,请求内核腾出至少等量的空闲物理内存(如图2所示的“2.请求挤压程序内存”)。之后,操作系统内核会以参数/proc/sys/vm/min_free_kbytes的值为目标来释放物理内存,其中,一方面内核会回收内核自己使用的物理内存,另一方面内核也会回收用户程序(如目标程序)相关的物理内存。其中,后者的物理内存包括两部分,一部分是文件占用的内存,另一部分是目标程序使用的匿名内存。可以理解,基本泄露的内存都是目标程序匿名内存,在本步骤中,可将目标程序的匿名内存(包括泄露部分和非泄露部分)基本都被换出到交换空间上(如图2所示的“3.挤压用户内核内存”和“4.将目标程序的匿名内存换出到交换空间”)。
S102,在目标程序继续运行(如图2所示的“5.程序继续运行”)过程中,接收目标程序的内存访问请求。
S103,将内存访问请求对应的内存换入,并记录换入的内存的内存信息。
需要说明的是,在本申请实施例中,由于内存的换出、换入操作不影响目标程序的应用逻辑,所以目标程序可以继续运行,对外提供不间断服务。具体地,在目标程序继续运行过程中,目标程序还会访问泄露的内存,例如,泄露的内存是列表中保存的对象,只要目标程序对列表还会遍历、查找,就会访问泄露内存。当接收到目标程序访问泄露内容的请求之后,可从交换空间中将该请求对应的内存换入(6.期间匿名内存换入),并在换入操作的过程中,通过内核监控换入操作,并通过内核记录换入的内存的内存信息,如目标程序的精确指令地址以及其他一些堆栈信息等(如图2所示的“6.内核监控换入操作”和“7.内核记录信息”)。可以理解,在本申请的实施例中,上述内存信息可包括但不限于目标程序所要访问的目标内存的地址信息、目标程序访问内存时的代码指令的地址信息和在换入时刻的目标程序的堆栈中搜索到的多个位于“可执行”且“可读”权限区域的“指针”信息等。
S104,对记录的换入的内存的内存信息进行统计以对内存泄露的泄漏点进行定位。
具体而言,在本申请的实施例中,可先将记录到的内存信息中的目标程序访问内存时的代码指令的地址信息和在换入时刻的目标程序的堆栈中搜索到的多个位于“可执行”且“可读”权限区域的“指针”信息,组合成目标程序的调用链。之后,对调用链的出现次数进行统计并排序,并将排序结果反馈至用户,以使用户根据调用链的内容对内存泄露的泄露点进行定位,其中,排序结果包括调用链、调用链的出现次数和调用链的排序名次。
更具体地,在换入操作数目足够多的基础上,在通过上述步骤S103得到的多条换入的内存的内存信息的记录之后,可先将记录到的内存信息中的目标程序访问内存时的代码指令的地址信息和在换入时刻的目标程序的堆栈中搜索到的多个位于“可执行”且“可读”权限区域的“指针”信息,组合成一个目标程序的调用链,然后,可通过分析工具对所有记录到的信息根据调用链按照该调用链的出现次数进行排序,如相同的调用链归为一组,这样可组合成多组调用链,之后,将出现次数最多的几组调用链反馈给用户,用户可根据调用链的内容判断出目标程序所要访问的目标内存,其中,该内存被怀疑为泄露内存),例如,根据调用链的函数基本就可以确定泄露内存对象的名字、类型等特征,进而根据这些特征即可完成对泄露点的定位(如图2所示的“8.分析内核记录的信息”),并向用户报告定位结果,即泄露情况,(如图2所示的“9.报告用户泄露情况”)同时,用户还可对所有被怀疑的泄露内存的创建、回收点进行检查以确定内存泄露的原因。
进一步的,为了提高检测结果的准确度,在本申请的一个实施例中,在对内存泄露的泄露点进行定位之后,还可根据内存信息中的目标程序所要访问的目标内存的地址信息对定位的泄露点进行补充和验证。
为了使得本领域的技术人员更加能够了解本申请中换入和换出的操作,下面将举例对换入、换出操作进行描述。
可以理解,物理内存资源是有限的,虚拟内存资源一般要多的多。因此现代操作系统内核会维护、管理物理内存与各应用程序的虚拟内存之间的关系,有若干策略来维持各应用程序对物理内存资源的占用平衡。交换(换入/换出)就是其中的一种策略。举例而言,在打开交换空间情况下,当应用程序A要求分配物理内存,而物理内存资源又紧张无法满足A的要求时,操作系统内核可能会将某些应用程序(如B,C)的物理内存的内容数据备份至交换空间/存储设备上,在页表上撤销这部分物理内存在应用程序(B,C)内部的映射关系,标记相应内容存放在交换空间的具体地址。进而将这些物理内存资源配给应用程序A并在A的内部建立起新的虚拟、物理内存映射关系,这部分操作叫做换出。当应用程序(B,C)又需要访问那块被换出的物理内存内容时,操作系统内核会先分配出物理内存,然后根据页表上的标记从交换空间中找回相应数据内容,将其拷贝回新分配的物理内存中,这部分操作叫做换入。其中,换入、换出操作对应用程序是透明的。
本申请实施例的内存泄露的检测方法,利用操作系统内核的交换机制,先将应用程序泄露的绝大部分匿名内存换出至交换空间,然后再监控换入操作,记录和泄露内存相关的信息,最后根据这些信息进行内存泄露点的定位。由于换入、换出操作对应于程序基本透明,所以不干扰应用程序的正常执行,另外,不需要应用程序事先实现内存泄露检测功能或打开Debug选项,可以针对所有应用程序进行内存泄露的检测,降低了检测条件,并扩大了检测范围。
需要说明的是,在本申请的一个实施例中,交换空间还可以被存储设备替代。也就是说,可将目标程序的匿名内存换出到存储设备中,之后根据目标程序的内存访问请求,将对应的内存从存储设备中换入。
为了实现上述实施例,本申请还提出了一种内存泄露的检测装置。
图3是根据本申请一个实施例的内存泄露的检测装置的结构示意图。如图3所示,该内存泄露的检测装置可以包括:挤压模块10、接收模块20、换入模块30和定位模块40。
具体地,挤压模块10可用于根据用户指令对系统的内存进行挤压,以将目标程序的匿名内存换出至交换空间。其中,在本申请的实施例中,用户指令可为调整/proc/sys/vm/min_free_kbytes参数。
需要说明的是,在本申请的一个实施例中,如图4所示,该内存泄露的检测装置还可包括使能模块50,使能模块50可用于在挤压模块10根据用户指令对系统的内存进行挤压之前,根据用户的使能指令对交换空间进行使能。举例而言,以用户的使能指令为挂载命令Mount为例,使能模块50可根据挂载命令Mount以使能交换空间,为后续的换入换出做好准备。
需要说明的是,在本申请的实施例中,匿名内存可理解为在文件系统里没有相应的后备文件的那些内存,比如程序中的堆、栈。匿名内存的交换目的地是交换空间。其中,交换空间(Swap space)在物理内存(RAM)被充满时被使用,如果系统需要更多的内存资源,而物理内存已经充满,内存中不活跃的页就会被移到交换空间去。
可以理解,在本申请的实施例中,系统的内存可包括内核内存和用户程序的内存。其中,用户指令主要是对系统中的内核发出的,不过该用户指令的目的不仅是挤压内核内存,更重要的是挤压用户程序内存。例如,以系统的操作系统为Linux操作系统为例,当目标程序的内存泄露比较严重时,在Linux操作系统下用户可调整/proc/sys/vm/min_free_kbytes参数到一个合理的足够大的值,请求内核腾出至少等量的空闲物理内存。之后,挤压模块10会以参数/proc/sys/vm/min_free_kbytes的值为目标来释放物理内存,其中,一方面内核会回收内核自己使用的物理内存,另一方面内核也会回收用户程序(如目标程序)相关的物理内存。其中,后者的物理内存包括两部分,一部分是文件占用的内存,另一部分是目标程序使用的匿名内存。可以理解,基本泄露的内存都是目标程序匿名内存,挤压模块10可将目标程序的匿名内存(包括泄露部分和非泄露部分)基本都被换出到交换空间上。
接收模块20可用于在目标程序继续运行过程中,接收目标程序的内存访问请求。
换入模块30可用于将内存访问请求对应的内存换入,并记录换入的内存的内存信息。
需要说明的是,在本申请实施例中,由于内存的换出、换入操作不影响目标程序的应用逻辑,所以目标程序可以继续运行,对外提供不间断服务。更具体地,在目标程序继续运行过程中,目标程序还会访问泄露的内存,例如,泄露的内存是列表中保存的对象,只要目标程序对列表还会遍历、查找,就会访问泄露内存。当接收模块20接收到目标程序访问泄露内容的请求之后,换入模块30可从交换空间中将该请求对应的内存换入,并在换入操作的过程中,通过内核监控换入操作,并通过内核记录换入的内存的内存信息,如目标程序的精确指令地址以及其他一些堆栈信息等。可以理解,在本申请的实施例中,上述内存信息可包括但不限于目标程序所要访问的目标内存的地址信息、目标程序访问内存时的代码指令的地址信息和在换入时刻的目标程序的堆栈中搜索到的多个位于“可执行”且“可读”权限区域的“指针”信息等。
定位模块40可用于对记录的换入的内存的内存信息进行统计以对内存泄露的泄露点进行定位。
具体而言,在本申请的实施例中,定位模块40可先将记录到的内存信息中的目标程序访问内存时的代码指令的地址信息和在换入时刻的目标程序的堆栈中搜索到的多个位于“可执行”且“可读”权限区域的“指针”信息,组合成目标程序的调用链,之后,对调用链的出现次数进行统计并排序,并将排序结果反馈至用户,以使用户根据调用链的内容对内存泄露的泄露点进行定位,其中,排序结果包括调用链、调用链的出现次数和调用链的排序名次。
更具体地,在换入操作数目足够多的基础上,在通过换入模块30得到的多条换入的内存的内存信息的记录之后,定位模块40可先将记录到的内存信息中的目标程序访问内存时的代码指令的地址信息和在换入时刻的目标程序的堆栈中搜索到的多个位于“可执行”且“可读”权限区域的“指针”信息,组合成一个目标程序的调用链,然后,对所有记录到的信息根据调用链按照该调用链的出现次数进行排序,如相同的调用链归为一组,这样可组合成多组调用链,之后,将出现次数最多的几组调用链反馈给用户,用户可根据调用链的内容判断出目标程序所要访问的目标内存,其中,该内存被怀疑为泄露内存,例如,根据调用链的函数基本就可以确定泄露内存对象的名字、类型等特征,进而根据这些特征即可完成对泄露点的定位,并向用户报告定位结果,即泄露情况,同时,用户还可对所有被怀疑的泄露内存的创建、回收点进行检查以确定内存泄露的原因。
进一步的,为了提高检测结果的准确度,在本申请的一个实施例中,定位模块40在对内存泄露的泄露点进行定位之后,还可根据内存信息中的目标程序所要访问的目标内存的地址信息对定位的泄露点进行补充和验证。
本申请实施例的内存泄露的检测装置,利用操作系统内核的交换机制,先将应用程序泄露的绝大部分匿名内存换出至交换空间,然后再监控换入操作,记录和泄露内存相关的信息,最后根据这些信息进行内存泄露点的定位。由于换入、换出操作对应于程序基本透明,所以不干扰应用程序的正常执行,另外,不需要应用程序事先实现内存泄露检测功能或打开Debug选项,可以针对所有应用程序进行内存泄露的检测,降低了检测条件,并扩大了检测范围。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本申请的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本申请的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本申请的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本申请的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本申请各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本申请的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本申请的限制,本领域的普通技术人员在本申请的范围内可以对上述实施例进行变化、修改、替换和变型。

Claims (10)

1.一种内存泄露的检测方法,其特征在于,包括以下步骤:
根据用户指令对系统的内存进行挤压,以将目标程序的匿名内存换出至交换空间;
在所述目标程序继续运行过程中,接收所述目标程序的内存访问请求;
将所述内存访问请求对应的内存换入,并记录换入的内存的内存信息;
对记录的所述换入的内存的内存信息进行统计以对内存泄露的泄漏点进行定位。
2.如权利要求1所述的内存泄露的检测方法,其特征在于,在所述根据用户指令对系统的内存进行挤压之前,还包括:
根据所述用户的使能指令对所述交换空间进行使能。
3.如权利要求1所述的内存泄露的检测方法,其特征在于,所述用户指令为调整/proc/sys/vm/min_free_kbytes参数。
4.如权利要求1所述的内存泄露的检测方法,其特征在于,所述内存信息包括所述目标程序所要访问的目标内存的地址信息、所述目标程序访问内存时的代码指令的地址信息和在换入时刻的所述目标程序的堆栈中搜索到的多个位于“可执行”且“可读”权限区域的“指针”信息。
5.如权利要求4所述的内存泄露的检测方法,其特征在于,对记录的所述换入的内存的内存信息进行统计以对内存泄露的泄露点进行定位,具体包括:
将所述内存信息中的所述目标程序访问内存时的代码指令的地址信息和在换入时刻的所述目标程序的堆栈中搜索到的多个位于“可执行”且“可读”权限区域的“指针”信息,组合成所述目标程序的调用链;
对所述调用链的出现次数进行统计并排序,并将排序结果反馈至用户,以使所述用户根据所述调用链的内容对内存泄露的泄露点进行定位,其中,所述排序结果包括所述调用链、所述调用链的出现次数和所述调用链的排序名次。
6.一种内存泄露的检测装置,其特征在于,包括:
挤压模块,用于根据用户指令对系统的内存进行挤压,以将目标程序的匿名内存换出至交换空间;
接收模块,用于在所述目标程序继续运行过程中,接收所述目标程序的内存访问请求;
换入模块,用于将所述内存访问请求对应的内存换入,并记录换入的内存的内存信息;以及
定位模块,用于对记录的所述换入的内存的内存信息进行统计以对内存泄露的泄露点进行定位。
7.如权利要求6所述的内存泄露的检测装置,其特征在于,还包括:
使能模块,用于在所述挤压模块根据用户指令对系统的内存进行挤压之前,根据所述用户的使能指令对所述交换空间进行使能。
8.如权利要求6所述的内存泄露的检测装置,其特征在于,所述用户指令为调整/proc/sys/vm/min_free_kbytes参数。
9.如权利要求6所述的内存泄露的检测装置,其特征在于,所述内存信息包括所述目标程序所要访问的目标内存的地址信息、所述目标程序访问内存时的代码指令的地址信息和在换入时刻的所述目标程序的堆栈中搜索到的多个位于“可执行”且“可读”权限区域的“指针”信息。
10.如权利要求9所述的内存泄露的检测装置,其特征在于,所述定位模块具体用于:
将所述内存信息中的所述目标程序访问内存时的代码指令的地址信息和在换入时刻的所述目标程序的堆栈中搜索到的多个位于“可执行”且“可读”权限区域的“指针”信息,组合成所述目标程序的调用链;
对所述调用链的出现次数进行统计并排序,并将排序结果反馈至用户,以使所述用户根据所述调用链的内容对内存泄露的泄露点进行定位,其中,所述排序结果包括所述调用链、所述调用链的出现次数和所述调用链的排序名次。
CN201510136216.5A 2015-03-26 2015-03-26 内存泄露的检测方法和装置 Active CN106155879B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510136216.5A CN106155879B (zh) 2015-03-26 2015-03-26 内存泄露的检测方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510136216.5A CN106155879B (zh) 2015-03-26 2015-03-26 内存泄露的检测方法和装置

Publications (2)

Publication Number Publication Date
CN106155879A true CN106155879A (zh) 2016-11-23
CN106155879B CN106155879B (zh) 2018-11-13

Family

ID=57340641

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510136216.5A Active CN106155879B (zh) 2015-03-26 2015-03-26 内存泄露的检测方法和装置

Country Status (1)

Country Link
CN (1) CN106155879B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107885666A (zh) * 2016-09-28 2018-04-06 华为技术有限公司 一种内存管理方法和装置
CN110795239A (zh) * 2019-10-15 2020-02-14 浙江口碑网络技术有限公司 应用内存泄露的检测方法及装置
CN112346894A (zh) * 2019-08-09 2021-02-09 腾讯科技(深圳)有限公司 内存泄露检测方法、装置、系统及计算机设备
CN113900743A (zh) * 2021-09-24 2022-01-07 阿里云计算有限公司 一种Java对象访问的方法和装置
CN116680142A (zh) * 2022-11-15 2023-09-01 荣耀终端有限公司 内存资源监测方法、电子设备、程序产品及介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050235127A1 (en) * 2004-04-19 2005-10-20 Cisco Technology, Inc. Method and system for memory leak detection
US20060277440A1 (en) * 2005-06-02 2006-12-07 International Business Machines Corporation Method, system, and computer program product for light weight memory leak detection
US7293142B1 (en) * 2004-04-19 2007-11-06 Cisco Technology, Inc. Memory leak detection system and method using contingency analysis
US20080222450A1 (en) * 2007-03-07 2008-09-11 Jinchao Yang Zero-penalty RAID controller memory leak detection and isolation method and system utilizing sequence numbers
US20110072299A1 (en) * 2009-09-21 2011-03-24 International Business Machines Corporation Leak monitoring system and associated methods
US20140351656A1 (en) * 2013-05-22 2014-11-27 Sap Ag Tracking of program objects during request processing
CN104317702A (zh) * 2014-09-30 2015-01-28 广东欧珀移动通信有限公司 一种智能移动终端内存自动化测试方法与装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050235127A1 (en) * 2004-04-19 2005-10-20 Cisco Technology, Inc. Method and system for memory leak detection
US7293142B1 (en) * 2004-04-19 2007-11-06 Cisco Technology, Inc. Memory leak detection system and method using contingency analysis
US20060277440A1 (en) * 2005-06-02 2006-12-07 International Business Machines Corporation Method, system, and computer program product for light weight memory leak detection
US20080222450A1 (en) * 2007-03-07 2008-09-11 Jinchao Yang Zero-penalty RAID controller memory leak detection and isolation method and system utilizing sequence numbers
US20110072299A1 (en) * 2009-09-21 2011-03-24 International Business Machines Corporation Leak monitoring system and associated methods
US20140351656A1 (en) * 2013-05-22 2014-11-27 Sap Ag Tracking of program objects during request processing
CN104317702A (zh) * 2014-09-30 2015-01-28 广东欧珀移动通信有限公司 一种智能移动终端内存自动化测试方法与装置

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107885666A (zh) * 2016-09-28 2018-04-06 华为技术有限公司 一种内存管理方法和装置
US10990540B2 (en) 2016-09-28 2021-04-27 Huawei Technologies Co., Ltd. Memory management method and apparatus
US11531625B2 (en) 2016-09-28 2022-12-20 Huawei Technologies Co., Ltd. Memory management method and apparatus
CN112346894A (zh) * 2019-08-09 2021-02-09 腾讯科技(深圳)有限公司 内存泄露检测方法、装置、系统及计算机设备
CN112346894B (zh) * 2019-08-09 2023-04-14 腾讯科技(深圳)有限公司 内存泄露检测方法、装置、系统及计算机设备
CN110795239A (zh) * 2019-10-15 2020-02-14 浙江口碑网络技术有限公司 应用内存泄露的检测方法及装置
CN113900743A (zh) * 2021-09-24 2022-01-07 阿里云计算有限公司 一种Java对象访问的方法和装置
CN116680142A (zh) * 2022-11-15 2023-09-01 荣耀终端有限公司 内存资源监测方法、电子设备、程序产品及介质
CN116680142B (zh) * 2022-11-15 2024-05-07 荣耀终端有限公司 内存资源监测方法、电子设备、程序产品及介质

Also Published As

Publication number Publication date
CN106155879B (zh) 2018-11-13

Similar Documents

Publication Publication Date Title
CN106155879A (zh) 内存泄露的检测方法和装置
US9009437B1 (en) Techniques for shared data storage provisioning with thin devices
CN103116536B (zh) 存储装置的容量检测方法
CN101539883B (zh) 嵌入式系统的错误追踪方法和装置
US20170351431A1 (en) Resizing namespaces for storage devices
CN103250134B (zh) 基于流技术的软件映像更新
CN104252419B (zh) 一种内存分配的方法及装置
US7165083B2 (en) File management method in a distributed storage system
RU2417461C2 (ru) Способ и устройство для записи высокоскоростных входных данных в матрицу запоминающих устройств
US20170075614A1 (en) Memory system and host apparatus
US7730358B2 (en) Stress testing method of file system
CN109656779A (zh) 内存监控方法、装置、终端和存储介质
CN108932257A (zh) 多维度数据的查询方法及装置
US8122182B2 (en) Electronically addressed non-volatile memory-based kernel data cache
CN109669640A (zh) 一种数据存储方法、装置、电子设备及介质
CN105468542A (zh) 地址分配方法及装置
CN106325826A (zh) 检测配置文件方法及装置
US10884946B2 (en) Memory state indicator check operations
US20180365428A1 (en) Configuration of a memory controller for copy-on-write with a resource controller
CN105975209A (zh) 一种多通道数据写入方法和系统
US20130318086A1 (en) Distributed file hierarchy management in a clustered redirect-on-write file system
US9336012B2 (en) Global data establishment for storage arrays controlled by a plurality of nodes
CN113970998B (zh) 一种信息处理方法、装置、终端及存储介质
CN105264497B (zh) 一种文件管理方法及文件系统
CN109086333B (zh) 用于数据块的处理方法和系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant