CN106407031A - 一种内存泄露定位方法及电子设备 - Google Patents
一种内存泄露定位方法及电子设备 Download PDFInfo
- Publication number
- CN106407031A CN106407031A CN201610825597.2A CN201610825597A CN106407031A CN 106407031 A CN106407031 A CN 106407031A CN 201610825597 A CN201610825597 A CN 201610825597A CN 106407031 A CN106407031 A CN 106407031A
- Authority
- CN
- China
- Prior art keywords
- storage location
- call stack
- function call
- mark
- memory
- 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
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/0751—Error or fault detection not based on redundancy
-
- 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
-
- 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/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/3037—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a memory, e.g. virtual memory, cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3055—Monitoring arrangements for monitoring the status of the computing system or of the computing system component, e.g. monitoring if the computing system is on, off, available, not available
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Debugging And Monitoring (AREA)
- Storage Device Security (AREA)
Abstract
本发明实施例提供一种内存泄露定位方法及电子设备,涉及内存管理技术领域,能够在不修改系统内存管理模块的基础上,利用Hook技术监控内存单元的统一申请、释放接口函数,准确定位存在内存泄露的块内存和页面内存。方案为:当内存单元通过申请接口函数被申请时,保存内存单元与函数调用栈的标识的映射关系,函数调用栈保存有通过申请接口函数申请内存单元的函数调用关系,内存单元包括块内存或页面内存;当内存单元通过释放接口函数被释放时,清除内存单元与内存单元对应的函数调用栈的标识的映射关系;根据多次统计的与每个函数调用栈的标识存在映射关系的内存单元的内存大小,确定存在内存泄露的函数调用栈和函数。本发明实施例用于内存泄露定位。
Description
技术领域
本发明实施例涉及内存管理技术领域,尤其涉及一种内存泄露定位方法及电子设备。
背景技术
在具有Linux、Unix等操作系统的电子设备中,内核对内存的管理分为页面内存管理和块内存管理。内核态程序可以申请页面内存使用,也可以申请块内存使用。如果内核态程序运行时有内存泄露,将会导致系统内存不足,严重时还将导致系统崩溃。
现有技术通过修改操作系统中的内存管理模块,从而在每一块内存后附加一小块内存诊断区域,用于保存内存的使用状态(例如,已申请占用状态或空闲状态),及内存申请和释放的函数信息,从而根据内存诊断区域中的信息来定位存在内存泄露的块内存。
现有技术中的该种定位方法仅能定位存在内存泄露的块内存,无法定位存在内存泄露的页面内存,而且需要通过修改系统内核和集成组件来实现内存管理模块的修改,而修改系统内核和集成组件的实现难度和复杂度极大。
发明内容
本发明实施例提供一种内存泄露定位方法及电子设备,能够在不修改系统内存管理模块的基础上,利用Hook技术监控内存单元的统一申请、释放接口函数,从而准确定位存在内存泄露的块内存和页面内存。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,本发明实施例提供了一种内存泄露定位方法,包括:当内存单元通过申请接口函数被申请时,电子设备保存内存单元与函数调用栈的标识的映射关系。其中,函数调用栈保存有通过申请接口函数申请内存单元的函数调用关系;其中,内存单元包括块内存或页面内存。当内存单元通过释放接口函数被释放时,电子设备清除内存单元与内存单元对应的函数调用栈的标识的映射关系。并且,电子设备多次统计与每个函数调用栈的标识存在映射关系的内存单元的内存大小。最后,电子设备根据与每个函数调用栈的标识存在映射关系的内存单元的内存大小,确定存在内存泄露的函数调用栈和函数。
从而,电子设备通过保存被申请的内存单元与函数调用栈的标识的映射关系,清除被释放的内存单元与函数调用栈的标识的映射关系,并多次统计与每个函数调用栈的标识存在映射关系的内存单元的内存大小,从而根据统计结果确定存在内存泄露的函数调用栈和函数,可以准确定位存在内存泄露的块内存和页面内存,而不需要通过修改系统内核和集成组件来修改系统内存管理模块,可以降低实现难度和复杂度,提高系统性能。
在一种可能的实现方式中,内存单元为块内存,电子设备保存内存单元与内存单元对应的函数调用栈的标识的映射关系包括:电子设备保存块内存的起始地址与块内存对应的函数调用栈的标识的映射关系。
在一种可能的实现方式中,电子设备清除内存单元与函数调用栈的标识的映射关系包括:电子设备删除块内存的起始地址与函数调用栈的标识的映射关系中,块内存的起始地址。
这样,电子设备可以准确定位存在内存泄露的块内存。
在一种可能的实现方式中,内存单元为页面内存,电子设备保存内存单元与函数调用栈的标识的映射关系包括:电子设备保存页面内存的页号与函数调用栈的标识的映射关系。
在一种可能的实现方式中,电子设备清除内存单元与函数调用栈的标识的映射关系包括:电子设备将保存的页面内存的页号与函数调用栈的标识的映射关系中,页面内存对应的函数调用栈的标识设置为释放标识。
这样,电子设备可以准确定位存在内存泄露的页面内存。
第二方面,本发明实施例提供了一种电子设备,包括:保存单元,用于当内存单元通过申请接口函数被申请时,保存内存单元与函数调用栈的标识的映射关系。其中,函数调用栈保存有通过申请接口函数申请内存单元的函数调用关系;其中,内存单元包括块内存或页面内存。清除单元,用于当内存单元通过释放接口函数被释放时,清除内存单元与内存单元对应的函数调用栈的标识的映射关系。统计单元,用于多次统计与每个函数调用栈的标识存在映射关系的内存单元的内存大小。确定单元,用于根据与每个函数调用栈的标识存在映射关系的内存单元的内存大小,确定存在内存泄露的函数调用栈和函数。
在一种可能的实现方式中,内存单元为块内存,保存单元具体用于:保存块内存的起始地址与块内存对应的函数调用栈的标识的映射关系。
在一种可能的实现方式中,清除单元具体用于:删除块内存的起始地址与函数调用栈的标识的映射关系中,块内存的起始地址。
在一种可能的实现方式中,内存单元为页面内存,保存单元具体用于:保存页面内存的页号与函数调用栈的标识的映射关系。
在一种可能的实现方式中,清除单元具体用于:将保存的页面内存的页号与函数调用栈的标识的映射关系中,页面内存对应的函数调用栈的标识设置为释放标识。
又一方面,本发明实施例提供了一种电子设备,包括处理器和收发器,该处理器被配置为支持该电子设备执行上述方法中相应的功能。该收发器用于支持该电子设备与其它网元之间进行通信。该电子设备还可以包括存储器,该存储器用于与处理器耦合,保存该电子设备必要的程序指令和数据。
再一方面,本发明实施例提供了一种计算机存储介质,用于储存为上述电子设备所用的计算机软件指令,其包含用于执行上述方面所设计的程序。
为了便于理解,示例的给出了部分与本发明相关概念的说明以供参考。如下所示:
内存泄露:也称“存储渗漏”,用动态存储分配函数动态申请的内存单元,在使用完毕后未释放,结果导致一直占据该内存单元。
页面内存:电子设备的内存管理模块将内存按预设的固定大小划分为页面,每个页面即为一个页面内存。
块内存:电子设备的内存管理模块将内存划分为大小不断不等的“块”来进行管理,每一“块”即可称为一个块内存。
内存单元:一个内存单元指一个块内存或一个页面内存。
Hook技术:即钩子技术,是消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理消息或特定事件。钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数可以处理该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种台式计算机的结构示意图;
图2为本发明实施例提供的一种内存泄露定位方法流程图;
图3为本发明实施例提供的一种内存单元与函数调用栈的映射关系示意图;
图4为本发明实施例提供的另一种内存泄露定位方法流程图;
图5为本发明实施例提供的另一种内存泄露定位方法流程图;
图6为本发明实施例提供的一种电子设备的结构示意图;
图7为本发明实施例提供的另一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例涉及的电子设备是具有统一的块内存申请和释放接口,以及统一的页面内存申请和释放接口的设备,例如可以是具有Linux、Unix等操作系统的电子设备。示例性的,该电子设备具体可以是笔记本电脑、台式计算机、平板电脑、智能手机等。
以电子设备为具有Linux操作系统的台式计算机为例,其部分结构框图可以参见图1。由图1可知,台式计算机可以包括硬件系统和软件系统两部分。其中,软件系统是指为方便使用计算机和提高使用效率而组织的程序以及用于开发、使用和维护的有关文档。软件系统可分为系统软件和应用软件两大类。系统软件由一组控制计算机系统并管理其资源的程序组成,其主要功能包括:启动计算机,存储、加载和执行应用程序,对文件进行排序、检索,将程序语言翻译成机器语言等。实际上,系统软件可以看作用户与计算机的接口,它为应用软件和用户提供了控制、访问硬件的手段,这些功能主要由操作系统完成。操作系统是管理、控制和监督计算机软、硬件资源协调运行的程序系统,由一系列具有不同控制和管理功能的程序组成,它是直接运行在计算机硬件上的、最基本的系统软件,是系统软件的核心。
硬件系统一般可以分为输入单元、输出单元、算术逻辑单元、控制单元及记忆单元,其中算术逻辑单元和控制单元合称中央处理单元(Center Processing Unit,CPU)。具体的,硬件系统可以包括:内存、CPU、主板、电源、硬盘、显示器、光驱、网卡、声卡、显卡等。其中,内存又叫内部存储器或者是随机存储器,可以用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。
在内存管理过程中,对于内存泄露问题,现有技术通过修改系统内核和集成组件,在每一块内存后附加一小块内存诊断区域,用于保存内存的使用状态及内存申请和释放的函数信息,从而根据内存诊断区域中的信息来定位存在内存泄露的块内存,而修改系统内核和集成组件的实现难度和复杂度极大。
本发明实施例提供的定位方法可以不修改系统内存管理模块的基础上,通过钩子(Hook)技术(例如Linux中的Kprobe)监控内存单元的统一申请、释放接口函数,从而准确定位存在内存泄露的块内存和页面内存。以下将通过具体实施例进行详细说明。
本发明实施例提供了一种内存泄露定位方法,参见图2,该方法可以包括:
101、当内存单元通过申请接口函数被申请时,电子设备保存内存单元与函数调用栈的标识的映射关系,函数调用栈保存有通过申请接口函数申请内存单元的函数调用关系。
其中,这里被申请的内存单元可以是一个块内存也可以是一个页面内存。电子设备中的任意块内存可以通过统一的申请接口函数被申请,例如在具有Linux操作系统的电子设备中,Linux内核可以采用slab机制将内存划分为大小不等的块内存来进行管理,并提供了统一的块内存申请接口函数kmem_cache_alloc。同样,电子设备中的任意页面内存也可以通过统一的申请接口函数被申请,例如在具有Linux操作系统的电子设备中,该统一的申请接口函数可以是alloc_pages。
电子设备可以利用Hook技术监控内存单元的统一申请接口函数。当一个内存单元(即一个块内存或一个页面内存)通过对应的申请接口函数被申请时,电子设备可以保存该内存单元与函数调用栈的标识的映射关系。其中,函数调用栈可以用于保存通过申请接口函数申请该内存单元的所有函数之间的函数调用关系,在本发明实施例中可以称为“函数调用链”。举例来说,函数1调用函数2,函数2调用申请接口函数以申请该内存单元,则该内存单元对应的函数调用栈中保存有“函数1调用函数2,函数2调用申请接口函数”这一函数调用链。
102、当内存单元通过释放接口函数被释放时,电子设备清除内存单元与函数调用栈的标识的映射关系。
与申请接口函数类似,电子设备中的已经被申请占用的任意块内存可以通过统一的释放接口函数被释放,例如在具有Linux操作系统的电子设备中,该统一的释放接口函数可以是kmem_cache_free接口函数。同样,电子设备中已经被申请占用的任意页面内存也可以通过统一的释放接口函数被释放,例如在具有Linux操作系统的电子设备中,该统一的申请接口函数可以是free_pages接口函数。
电子设备可以利用Hook技术监控内存单元的统一释放接口函数。当已经被申请占用的一个内存单元(即一个块内存或一个页面内存)通过对应的释放接口函数被释放时,电子设备可以清除该内存单元与函数调用栈的标识的映射关系。
103、电子设备多次统计与每个函数调用栈的标识存在映射关系的内存单元的内存大小。
104、电子设备根据与每个函数调用栈的标识存在映射关系的内存单元的内存大小,确定存在内存泄露的函数调用栈和函数。
在步骤103和步骤104中,电子设备可以多次统计与每个函数调用栈的标识存在映射关系的所有内存单元的总的内存大小。其中,与某一函数调用栈的标识存在映射关系的所有内存单元的总的内存大小,即为被该函数调用栈中的函数调用链申请占用的内存大小。当与某一函数调用栈的标识存在映射关系的所有内存单元的总的内存持续、频繁地增加,且达到预设内存阈值时,可以确定该函数调用栈保存的函数调用链中的函数存在内存泄漏。当然,电子设备可以周期性地统计与每个函数调用栈的标识存在映射关系的所有内存单元的总的内存大小,也可以非周期性地进行统计,这里不做具体限定。
示例性的,图3提供了电子设备某次统计的内存单元与函数调用栈的映射关系示意图。由图3可知,与函数调用栈0存在映射关系的内存单元的数量较多,函数调用栈0申请占用的内存较大。若多次统计发现函数调用栈0申请占用的内存持续、频繁地增加,且达到预设内存阈值时,可以确定函数调用栈0保存的函数调用链中的函数存在内存泄漏。
需要说明的是,在现有技术中,通过修改系统内核和集成组件来修改系统内存管理模块,从而在每个块内存后附加内存诊断区域的方式,由于是指系统内核和集成组件中进行设置的,因而当电子设备启动时内存泄露定位程序即开始运行,并会随着电子设备的运行持续运行下去,而不论是否存在内存泄露问题,是否需要进行内存泄露定位,从而影响了系统性能。而本发明实施例中,并不需要通过修改系统内存管理模块来进行内存泄露定位,内存泄露定位程序可以在存在内存泄露问题,需要进行内存定位泄露时随时启动,并在定位完成后可以随时停止启动,从而可以提高系统性能,并且不会破坏问题现场。
而且,现有技术中在每个块内存后附加内存诊断区域较小,仅能保存少量的信息,例如保存直接调用申请接口函数的函数信息。当多个函数通过同一个公共函数调用申请接口函数时,电子设备将无法确定存在内存泄露的函数到底是哪个具体的函数。而在本发明实施例中,电子设备可以分配特定的区域,以保存内存单元与调用栈的映射关系以及调用栈中的函数调用链,存储区域的大小并不受限制,可以保存大量信息。当多个函数通过同一个公共函数调用申请接口函数时,由于调用栈中并不是仅保存有直接调用申请接口函数的函数信息,而是保存有通过申请接口函数申请内存单元的整个函数调用链,因而电子设备可以根据调用栈中的函数信息,准确确定存在内存泄露的具体函数。
同时,现有技术中通过增加内存诊断区域的方法,仅适用于定位存在内存泄露的块内存,却无法定位存在内存泄露的页面内存。而本发明实施例中的内存单元可以是块内存或者页面内存,即本发明实施例提供的方法可以适用于定位存在内存泄露的块内存,也可以适用于定位存在内存泄露的页面内存。
因此,在本发明实施例提供的内存泄露定位方法中,电子设备通过Hook技术监控内存单元的统一申请、释放接口函数,保存被申请的内存单元与函数调用栈的标识的映射关系,清除被释放的内存单元与函数调用栈的标识的映射关系,并多次统计与每个函数调用栈的标识存在映射关系的内存单元的内存大小,从而根据统计结果确定存在内存泄露的函数调用栈和函数,可以准确定位存在内存泄露的块内存和页面内存,而不需要通过修改系统内核和集成组件来修改系统内存管理模块,可以降低实现难度和复杂度,提高系统性能。
其中,当内存单元为块内存时,参见图4,在上述步骤101中,电子设备保存内存单元与函数调用栈的标识的映射关系具体可以包括:
201、电子设备保存块内存的起始地址与函数调用栈的标识的映射关系。
当内存单元为块内存,且块内存通过申请接口函数被申请时,电子设备具体可以通过保存块内存的起始地址与函数调用栈的标识的映射关系,来保存内存单元与函数调用栈的标识的映射关系。
示例性的,当图3中的内存单元为块内存时,电子设备中保存的块内存的起始地址与函数调用栈的标识的映射关系可以参见如下表1。其中,本次被申请的块内存可以为块内存3。
表1
在上述步骤201的基础上,在上述步骤102中,电子设备清除内存单元与函数调用栈的标识的映射关系具体可以包括:
202、电子设备删除块内存的起始地址与函数调用栈的标识的映射关系中,块内存的起始地址。
示例性的,当本次通过释放接口函数被释放的块内存为表1中的块内存3时,电子设备删除块内存3的起始地址后,电子设备中保存的块内存的起始地址与函数调用栈的标识的映射关系可以参见如下表2。
表2
当内存单元为页面内存时,参见图5,在上述步骤101中,电子设备保存内存单元与函数调用栈的标识的映射关系具体可以包括:
301、电子设备保存页面内存的页号与函数调用栈的标识的映射关系。
当内存单元为页面内存,且页面内存通过申请接口函数被申请时,电子设备具体可以通过保存页面内存的页号与函数调用栈的标识的映射关系,来保存内存单元与函数调用栈的标识的映射关系。
示例性的,当图3中的内存单元为页面内存时,电子设备中保存的页面内存的页号与函数调用栈的标识的映射关系可以参见如下表3。其中,本次被申请的页面内存可以为页号3对应的页面内存。
表3
页面内存页号 | 函数调用栈序号 |
页号3 | 0 |
页号4 | 0 |
页号5 | 0 |
页号6 | 0 |
页号7 | 3 |
页号8 | M-1 |
在上述步骤301的基础上,在上述步骤102中,电子设备清除内存单元与函数调用栈的标识的映射关系具体可以包括:
302、电子设备将保存的页面内存的页号与函数调用栈的标识的映射关系中,页面内存对应的函数调用栈的标识设置为释放标识。
其中,释放标识可以根据实际需要进行设定,例如可以将释放标识设置为“-1”。示例性的,当释放标识为“-1”,本次通过释放接口函数被释放的页面内存为表3中页号3对应的页面内存时,电子设备将页号3对应的页面内存所对应的函数调用栈的标识设置为释放标识后,电子设备中保存的页面内存的页号与函数调用栈的标识的映射关系可以参见如下表4。
表4
页面内存页号 | 函数调用栈序号 |
页号3 | -1 |
页号4 | 0 |
页号5 | 0 |
页号6 | 0 |
页号7 | 3 |
页号8 | M-1 |
需要说明的是,本发明实施例是通过Hook技术监控系统函数中的内存单元统一申请、释放接口函数,并统计内存单元与函数调用栈的对应关系来实现内存泄露定位的。通过Hook技术监控、统计系统函数的方法还可以应用在其它方面,例如进行性能调优等,这里不再赘述。
参见图6,本发明另一实施例还提供了一种电子设备600,可以包括:保存单元601、清除单元602、统计单元603和确定单元604。其中,保存单元601,可以用于当内存单元通过申请接口函数被申请时,保存内存单元与函数调用栈的标识的映射关系,函数调用栈保存有通过申请接口函数申请内存单元的函数调用关系;其中,内存单元包括块内存或页面内存;清除单元602,可以用于当内存单元通过释放接口函数被释放时,清除内存单元与函数调用栈的标识的映射关系;统计单元603,可以用于多次统计与每个函数调用栈的标识存在映射关系的内存单元的内存大小;确定单元604,可以用于根据与每个函数调用栈的标识存在映射关系的内存单元的内存大小,确定存在内存泄露的函数调用栈和函数。
进一步的,保存单元601具体可以用于执行图4中的步骤201和图5中的步骤301,清除单元602具体可以用于执行图4中的步骤202和图5中的步骤302。此外,图6中的电子设备600可以用于执行上述方法流程中的任一流程,本发明实施例在此不再详述。
进一步的,图6中的电子设备是以功能单元的形式来呈现。这里的“单元”可以指特定应用集成电路(Application Specific Integrated Circuit,ASIC),电路,执行一个或多个软件或固件程序的处理器和存储器,集成逻辑电路,和/或其他可以提供上述功能的器件。在一个简单的实施例中,本领域的技术人员可以想到图6中的电子设备可以采用图7所示的形式。各单元可以通过图7的处理器和存储器来实现。
如图7所示,电子设备700可以包括一个或多个端口704,与收发器703相耦合。收发器703可以是发射器,接收器或其组合,从其它网络节点通过端口704发送或接收数据包。处理器701耦合到收发器703,用于处理数据包。处理器701可包含一个或多个多核处理器和/或存储器702。处理器701可以是一个通用处理器,专用集成电路,或数字信号处理器(Digital Signal Processing,DSP)。
存储器702可为非瞬时性的存储介质,与处理器701相耦合,用于保存不同类型的数据。存储器702可包含只读存储器(Read Only Memory,ROM),随机存取存储器(RandomAccess Memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是磁盘存储器。存储器702可用于保存实现内存泄露定位相关方法的指令。当处理器执行指令时,该指令使电子设备700执行图2、图4和图5中的相关步骤。可以理解,通过编程或装载可执行指令到电子设备700的处理器701,缓存和长期存储中的至少一个。
电子设备700可实现根据本发明的实施例执行一个或多个指令以触发进行内存泄露定位。这些指令可存储在存储器702中,也可集成在操作系统的内核或内核的插件中。
本发明实施例还提供了一种计算机存储介质,用于储存为上述图6所示的或图7所示电子设备所用的计算机软件指令,其包含用于执行上述方法实施例所设计的程序。通过执行存储的程序,可以实现内存泄露定位。
本领域普通技术人员应该了解本申请的所有或部分标的物可在结合硬件和/或固件的软件中实施。例如,本文描述的标的物可在一个或多个处理器执行的软件中实施。在一项示例性实施方式中,本文描述的标的物可使用存储有计算机可执行指令的非瞬时计算机可读介质实施,当计算机处理器执行该计算机可执行指令时,该指令控制计算机执行步骤。适于实施本文描述的标的物的示例计算机可读介质包括非瞬时计算机可读介质,例如磁盘存储器设备、芯片存储器设备、可编程逻辑设备和专用集成电路。另外,实施本文描述的标的物的计算机可读介质可位于单个设备或计算平台上,或可在多个设备或计算平台上分发。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (11)
1.一种内存泄露定位方法,其特征在于,包括:
当内存单元通过申请接口函数被申请时,保存所述内存单元与函数调用栈的标识的映射关系,所述函数调用栈保存有通过所述申请接口函数申请所述内存单元的函数调用关系;其中,所述内存单元包括块内存或页面内存;
当所述内存单元通过释放接口函数被释放时,清除所述内存单元与所述函数调用栈的标识的映射关系;
多次统计与每个函数调用栈的标识存在映射关系的内存单元的内存大小;
根据与每个函数调用栈的标识存在映射关系的内存单元的内存大小,确定存在内存泄露的函数调用栈和函数。
2.根据权利要求1所述的方法,其特征在于,所述内存单元为块内存,所述保存所述内存单元与函数调用栈的标识的映射关系包括:
保存所述块内存的起始地址与所述函数调用栈的标识的映射关系。
3.根据权利要求2所述的方法,其特征在于,所述清除所述内存单元与所述函数调用栈的标识的映射关系包括:
删除所述块内存的起始地址与所述函数调用栈的标识的映射关系中,所述块内存的起始地址。
4.根据权利要求1所述的方法,其特征在于,所述内存单元为页面内存,所述保存所述内存单元与所述函数调用栈的标识的映射关系包括:
保存所述页面内存的页号与所述函数调用栈的标识的映射关系。
5.根据权利要求4所述的方法,其特征在于,所述清除所述内存单元与所述函数调用栈的标识的映射关系包括:
将保存的所述页面内存的页号与所述函数调用栈的标识的映射关系中,所述页面内存对应的函数调用栈的标识设置为释放标识。
6.一种电子设备,其特征在于,包括:
保存单元,用于当内存单元通过申请接口函数被申请时,保存所述内存单元与函数调用栈的标识的映射关系,所述函数调用栈保存有通过所述申请接口函数申请所述内存单元的函数调用关系;其中,所述内存单元包括块内存或页面内存;
清除单元,用于当所述内存单元通过释放接口函数被释放时,清除所述内存单元与所述函数调用栈的标识的映射关系;
统计单元,用于多次统计与每个函数调用栈的标识存在映射关系的内存单元的内存大小;
确定单元,用于根据与每个函数调用栈的标识存在映射关系的内存单元的内存大小,确定存在内存泄露的函数调用栈和函数。
7.根据权利要求6所述的电子设备,其特征在于,所述内存单元为块内存,所述保存单元具体用于:
保存所述块内存的起始地址与所述函数调用栈的标识的映射关系。
8.根据权利要求7所述的电子设备,其特征在于,所述清除单元具体用于:
删除所述块内存的起始地址与所述函数调用栈的标识的映射关系中,所述块内存的起始地址。
9.根据权利要求6所述的电子设备,其特征在于,所述内存单元为页面内存,所述保存单元具体用于:
保存所述页面内存的页号与所述函数调用栈的标识的映射关系。
10.根据权利要求9所述的电子设备,其特征在于,所述清除单元具体用于:
将保存的所述页面内存的页号与所述函数调用栈的标识的映射关系中,所述页面内存对应的函数调用栈的标识设置为释放标识。
11.一种电子设备,其特征在于,包括处理器、存储器和收发器,所述处理器与所述存储器和所述收发器耦合,所述存储器用于存储程序和指令,所述指令使得所述电子设备执行以下操作:
当内存单元通过申请接口函数被申请时,保存所述内存单元与函数调用栈的标识的映射关系,所述函数调用栈保存有通过所述申请接口函数申请所述内存单元的函数调用关系;其中,所述内存单元包括块内存或页面内存;
当所述内存单元通过释放接口函数被释放时,清除所述内存单元与所述函数调用栈的标识的映射关系;
多次统计与每个函数调用栈的标识存在映射关系的内存单元的内存大小;
根据与每个函数调用栈的标识存在映射关系的内存单元的内存大小,确定存在内存泄露的函数调用栈和函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610825597.2A CN106407031B (zh) | 2016-09-14 | 2016-09-14 | 一种内存泄露定位方法及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610825597.2A CN106407031B (zh) | 2016-09-14 | 2016-09-14 | 一种内存泄露定位方法及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106407031A true CN106407031A (zh) | 2017-02-15 |
CN106407031B CN106407031B (zh) | 2019-05-28 |
Family
ID=57998025
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610825597.2A Active CN106407031B (zh) | 2016-09-14 | 2016-09-14 | 一种内存泄露定位方法及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106407031B (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107436845A (zh) * | 2017-07-27 | 2017-12-05 | 南京华飞数据技术有限公司 | 一种动态内存监测系统及其监测方法 |
CN107451054A (zh) * | 2017-07-26 | 2017-12-08 | 武汉虹信通信技术有限责任公司 | 一种用于linux环境中的内存池调试方法 |
CN107783908A (zh) * | 2017-11-07 | 2018-03-09 | 晶晨半导体(上海)股份有限公司 | 一种基于Linux内核内存泄露的检测方法 |
CN107908539A (zh) * | 2017-07-24 | 2018-04-13 | 平安科技(深圳)有限公司 | 一种检测应用程序内存泄露的方法、终端及计算机可读存储介质 |
CN108563507A (zh) * | 2018-04-12 | 2018-09-21 | 郑州云海信息技术有限公司 | 一种内存管理方法、装置、设备及可读存储介质 |
CN110413401A (zh) * | 2018-04-28 | 2019-11-05 | 武汉斗鱼网络科技有限公司 | 管理全局对象内存的方法、存储介质、电子设备及系统 |
CN110502891A (zh) * | 2019-08-08 | 2019-11-26 | 北京字节跳动网络技术有限公司 | 一种获取进程内存泄露的方法、装置、介质和电子设备 |
CN110618928A (zh) * | 2019-06-25 | 2019-12-27 | 北京无限光场科技有限公司 | 一种内存泄露检测方法、装置、终端设备及介质 |
CN110908865A (zh) * | 2019-11-15 | 2020-03-24 | 珠海豹趣科技有限公司 | 内存泄漏监控方法、装置及电子设备 |
CN111813666A (zh) * | 2020-06-30 | 2020-10-23 | 北京字节跳动网络技术有限公司 | 一种内存泄露定位的方法、装置、介质和电子设备 |
CN112860574A (zh) * | 2021-03-15 | 2021-05-28 | 北京车和家信息技术有限公司 | Linux内核的内存泄漏检测方法和装置、介质、设备 |
CN113835992A (zh) * | 2020-06-23 | 2021-12-24 | 北京字节跳动网络技术有限公司 | 内存泄露的处理方法、装置、电子设备及计算机存储介质 |
CN114296986A (zh) * | 2021-12-31 | 2022-04-08 | 北京字节跳动网络技术有限公司 | 内存泄漏定位方法、装置、介质和电子设备 |
CN114546590A (zh) * | 2022-02-18 | 2022-05-27 | 北京基调网络股份有限公司 | Java虚拟机堆内存集合对象监测方法及内存溢出分析方法 |
EP4354293A4 (en) * | 2021-07-16 | 2024-10-16 | Vivo Mobile Communication Co Ltd | DETECTION METHOD AND APPARATUS, AND ELECTRONIC DEVICE |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814049A (zh) * | 2010-03-23 | 2010-08-25 | 北京大学 | 一种内存泄漏探测方法 |
CN101908018A (zh) * | 2010-07-20 | 2010-12-08 | 北京海泰方圆科技有限公司 | 一种判断内存泄露的系统及方法 |
CN102831068A (zh) * | 2011-06-13 | 2012-12-19 | 阿里巴巴集团控股有限公司 | 一种内存操作记录的处理方法及装置 |
CN103294588A (zh) * | 2012-02-22 | 2013-09-11 | 深圳富泰宏精密工业有限公司 | 内存检测系统及方法 |
CN103455424A (zh) * | 2013-09-18 | 2013-12-18 | 哈尔滨工业大学 | 基于VxWorks操作系统的动态内存泄漏检测方法及装置 |
-
2016
- 2016-09-14 CN CN201610825597.2A patent/CN106407031B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814049A (zh) * | 2010-03-23 | 2010-08-25 | 北京大学 | 一种内存泄漏探测方法 |
CN101908018A (zh) * | 2010-07-20 | 2010-12-08 | 北京海泰方圆科技有限公司 | 一种判断内存泄露的系统及方法 |
CN102831068A (zh) * | 2011-06-13 | 2012-12-19 | 阿里巴巴集团控股有限公司 | 一种内存操作记录的处理方法及装置 |
CN103294588A (zh) * | 2012-02-22 | 2013-09-11 | 深圳富泰宏精密工业有限公司 | 内存检测系统及方法 |
CN103455424A (zh) * | 2013-09-18 | 2013-12-18 | 哈尔滨工业大学 | 基于VxWorks操作系统的动态内存泄漏检测方法及装置 |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107908539A (zh) * | 2017-07-24 | 2018-04-13 | 平安科技(深圳)有限公司 | 一种检测应用程序内存泄露的方法、终端及计算机可读存储介质 |
CN107451054A (zh) * | 2017-07-26 | 2017-12-08 | 武汉虹信通信技术有限责任公司 | 一种用于linux环境中的内存池调试方法 |
CN107436845A (zh) * | 2017-07-27 | 2017-12-05 | 南京华飞数据技术有限公司 | 一种动态内存监测系统及其监测方法 |
CN107783908B (zh) * | 2017-11-07 | 2020-12-25 | 晶晨半导体(上海)股份有限公司 | 一种基于Linux内核内存泄露的检测方法 |
CN107783908A (zh) * | 2017-11-07 | 2018-03-09 | 晶晨半导体(上海)股份有限公司 | 一种基于Linux内核内存泄露的检测方法 |
US11157389B1 (en) | 2017-11-07 | 2021-10-26 | Amlogic (Shanghai) Co., Ltd. | Method for detecting memory leak based on linux kernel |
WO2019091244A1 (zh) * | 2017-11-07 | 2019-05-16 | 晶晨半导体(上海)股份有限公司 | 一种基于Linux内核内存泄露的检测方法 |
CN108563507A (zh) * | 2018-04-12 | 2018-09-21 | 郑州云海信息技术有限公司 | 一种内存管理方法、装置、设备及可读存储介质 |
CN110413401A (zh) * | 2018-04-28 | 2019-11-05 | 武汉斗鱼网络科技有限公司 | 管理全局对象内存的方法、存储介质、电子设备及系统 |
CN110618928A (zh) * | 2019-06-25 | 2019-12-27 | 北京无限光场科技有限公司 | 一种内存泄露检测方法、装置、终端设备及介质 |
CN110502891A (zh) * | 2019-08-08 | 2019-11-26 | 北京字节跳动网络技术有限公司 | 一种获取进程内存泄露的方法、装置、介质和电子设备 |
CN110502891B (zh) * | 2019-08-08 | 2021-06-15 | 北京字节跳动网络技术有限公司 | 一种获取进程内存泄露的方法、装置、介质和电子设备 |
CN110908865A (zh) * | 2019-11-15 | 2020-03-24 | 珠海豹趣科技有限公司 | 内存泄漏监控方法、装置及电子设备 |
CN113835992B (zh) * | 2020-06-23 | 2023-10-20 | 抖音视界有限公司 | 内存泄露的处理方法、装置、电子设备及计算机存储介质 |
CN113835992A (zh) * | 2020-06-23 | 2021-12-24 | 北京字节跳动网络技术有限公司 | 内存泄露的处理方法、装置、电子设备及计算机存储介质 |
CN111813666A (zh) * | 2020-06-30 | 2020-10-23 | 北京字节跳动网络技术有限公司 | 一种内存泄露定位的方法、装置、介质和电子设备 |
CN111813666B (zh) * | 2020-06-30 | 2023-10-27 | 北京字节跳动网络技术有限公司 | 一种内存泄露定位的方法、装置、介质和电子设备 |
CN112860574A (zh) * | 2021-03-15 | 2021-05-28 | 北京车和家信息技术有限公司 | Linux内核的内存泄漏检测方法和装置、介质、设备 |
CN112860574B (zh) * | 2021-03-15 | 2024-02-20 | 北京车和家信息技术有限公司 | Linux内核的内存泄漏检测方法和装置、介质、设备 |
EP4354293A4 (en) * | 2021-07-16 | 2024-10-16 | Vivo Mobile Communication Co Ltd | DETECTION METHOD AND APPARATUS, AND ELECTRONIC DEVICE |
CN114296986A (zh) * | 2021-12-31 | 2022-04-08 | 北京字节跳动网络技术有限公司 | 内存泄漏定位方法、装置、介质和电子设备 |
CN114296986B (zh) * | 2021-12-31 | 2024-05-10 | 北京字节跳动网络技术有限公司 | 内存泄漏定位方法、装置、介质和电子设备 |
CN114546590B (zh) * | 2022-02-18 | 2023-03-14 | 北京基调网络股份有限公司 | Java虚拟机堆内存集合对象监测方法及内存溢出分析方法 |
CN114546590A (zh) * | 2022-02-18 | 2022-05-27 | 北京基调网络股份有限公司 | Java虚拟机堆内存集合对象监测方法及内存溢出分析方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106407031B (zh) | 2019-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106407031A (zh) | 一种内存泄露定位方法及电子设备 | |
Guo et al. | Clio: A hardware-software co-designed disaggregated memory system | |
US11099900B2 (en) | Memory reclamation method and apparatus | |
WO2020156259A1 (zh) | 内存管理方法、装置、移动终端及存储介质 | |
EP2154610A1 (en) | Virtualization apparatus and method for controlling the same | |
CN107633014A (zh) | 一种数据存储方法及服务器 | |
CN101221527A (zh) | Linux平台物理内存信息监测系统 | |
CN111797034A (zh) | 一种数据管理方法、神经网络处理器和终端设备 | |
US8775749B2 (en) | Demand based memory management of non-pagable data storage | |
CN109324983A (zh) | 一种自动清理缓存文件的方法、存储介质、设备及系统 | |
EP3974969A1 (en) | System startup method and related device | |
CN104123192A (zh) | 一种linux系统下基于内存子系统的性能调优方法 | |
CN111625383B (zh) | 进程异常事件处理方法、装置、电子设备及存储介质 | |
CN107450994A (zh) | 接口调用方法及系统 | |
WO2014117682A1 (en) | Method, apparatus and terminal for releasing memory | |
CN111090495A (zh) | 节点管理方法、装置、设备、存储介质和系统 | |
CN109842621A (zh) | 一种减少token存储数量的方法及终端 | |
CN111464984B (zh) | 一种通信方法及装置 | |
CN104951370B (zh) | 一种内存管理方法及装置 | |
CN112698789A (zh) | 数据缓存方法、装置、设备及存储介质 | |
CN102375471B (zh) | 用于控制处理器时钟频率的设备和方法 | |
CN111104180A (zh) | 应用程序优化方法、装置、存储介质及电子设备 | |
CN112667371B (zh) | 异步任务的处理方法、装置、设备及存储介质 | |
CN109976896B (zh) | 业务排重处理方法和装置 | |
CN103678163A (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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220907 Address after: No. 1899 Xiyuan Avenue, high tech Zone (West District), Chengdu, Sichuan 610041 Patentee after: Chengdu Huawei Technologies Co.,Ltd. Address before: 611731 Qingshui River District, Chengdu hi tech Zone, Sichuan, China Patentee before: HUAWEI DIGITAL TECHNOLOGIES (CHENG DU) Co.,Ltd. |
|
TR01 | Transfer of patent right |