CN107608885A - 内存泄漏点的定位方法、装置、系统及可读存储介质 - Google Patents

内存泄漏点的定位方法、装置、系统及可读存储介质 Download PDF

Info

Publication number
CN107608885A
CN107608885A CN201710823200.0A CN201710823200A CN107608885A CN 107608885 A CN107608885 A CN 107608885A CN 201710823200 A CN201710823200 A CN 201710823200A CN 107608885 A CN107608885 A CN 107608885A
Authority
CN
China
Prior art keywords
stack information
address stack
memory
information
base
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.)
Pending
Application number
CN201710823200.0A
Other languages
English (en)
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.)
Zhengzhou Yunhai Information Technology Co Ltd
Original Assignee
Zhengzhou Yunhai Information Technology 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 Zhengzhou Yunhai Information Technology Co Ltd filed Critical Zhengzhou Yunhai Information Technology Co Ltd
Priority to CN201710823200.0A priority Critical patent/CN107608885A/zh
Publication of CN107608885A publication Critical patent/CN107608885A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明公开了一种内存泄漏点的定位方法,包括:对调用内存分配器分配的内存的地址堆栈信息进行记录,将记录的所述内存的地址堆栈信息放入内存占用链表中;通过所述内存占用链表获取所述内存的地址堆栈信息;将所述地址堆栈信息与进程调用的动态库的基地址堆栈信息和尾地址堆栈信息进行比较,确定所述地址堆栈信息归属的动态库;根据所述地址堆栈信息归属的动态库的基地址堆栈信息确定所述地址堆栈信息对应的具体位置信息,该方法能够有效定位内存泄露点。本发明还公开了一种内存泄漏点的定位装置、系统及一种计算机可读存储介质,具有上述有益效果。

Description

内存泄漏点的定位方法、装置、系统及可读存储介质
技术领域
本发明涉及电子技术领域,特别涉及一种内存泄漏点的定位方法、装置、系统及一种计算机可读存储介质。
背景技术
内存泄漏是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
在软件开发过程中,内核泄漏是常见的问题,它直接影响软件系统的长期稳定运行。然而在开发和调试过程中如何有效的定位内存泄漏的地方,却是一个麻烦的过程。
因此,如何有效定位内存泄露点,是本领域技术人员需要解决的技术问题。
发明内容
本发明的目的是提供一种内存泄漏点的定位方法,该方法能够有效定位内存泄露点;本发明的另一目的是提供一种内存泄漏点的定位装置、系统及一种计算机可读存储介质,具有上述有益效果。
为解决上述技术问题,本发明提供一种内存泄漏点的定位方法,包括:
对调用内存分配器分配的内存的地址堆栈信息进行记录,将记录的所述内存的地址堆栈信息放入内存占用链表中;
通过所述内存占用链表获取所述内存的地址堆栈信息;
将所述地址堆栈信息与进程调用的动态库的基地址堆栈信息和尾地址堆栈信息进行比较,确定所述地址堆栈信息归属的动态库;
根据所述地址堆栈信息归属的动态库的基地址堆栈信息确定所述地址堆栈信息对应的具体位置信息。
其中,所述对调用内存分配器分配的内存的地址堆栈信息进行记录,将记录的所述内存的地址堆栈信息放入内存占用链表中包括:
分配一个空闲块列表;
当调用内存分配器分配内存时,将分配的内存的地址堆栈信息赋值给所述空闲块列表的节点,将所述节点插入到所述内存占用链表中,并将所述节点从所述空闲块列表中移除;
当所述内存释放时,将所述内存对应的节点从所述内存占用链表中取出,并将所述节点归还至所述空闲块列表中。
其中,所述将所述节点插入到所述内存占用链表中包括:
将所述节点中存放的所述内存地址堆栈信息按照预定的算法映射成短数据;
将存放有所述短数据的所述节点插入到所述内存占用链表中。
其中,所述进程调用的动态库的基地址堆栈信息和尾地址堆栈信息的调用方法包括:
获取进程所调用的动态库的映射关系,得到所述动态库的基地址堆栈信息和尾地址堆栈信息。
其中,所述内存泄漏点的定位方法还包括:
对所述内存占用链表中的内存的地址堆栈信息记录信息按照出现次数进行统计;
获取所述内存占用链表中地址堆栈信息记录信息出现次数大于预设阈值的短数据。
其中,所述根据所述地址堆栈信息与其所归属的动态库的基地址堆栈信息确定所述地址堆栈信息对应的具体位置信息包括:
将所述地址堆栈信息减去其所归属的动态库的基地址堆栈信息,得到偏移地址堆栈信息;
根据所述基地址堆栈信息和每行代码占用的内存大小,与所述偏移地址堆栈信息进行比较,得到所述地址堆栈信息对应的具体位置信息。
本发明提供一种内存泄漏点的定位装置,包括:
记录单元,用于对调用内存分配器分配的内存的地址堆栈信息进行记录,将记录的所述内存的地址堆栈信息放入内存占用链表中;
地址堆栈信息获取单元,用于通过所述内存占用链表获取所述内存的地址堆栈信息;
比较单元,用于将所述地址堆栈信息与进程调用的动态库的基地址堆栈信息和尾地址堆栈信息进行比较,确定所述地址堆栈信息归属的动态库;
位置信息确定单元,用于根据所述地址堆栈信息归属的动态库的基地址堆栈信息确定所述地址堆栈信息对应的具体位置信息。
本发明提供一种内存泄漏点的定位系统,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现所述内存泄漏点的定位方法的步骤。
本发明提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述内存泄漏点的定位方法的步骤。
本发明所提供的内存泄漏点的定位方法通过对调用内存分配器分配的内存的地址堆栈信息进行记录,将记录的所述内存的地址堆栈信息放入内存占用链表中;那些存在内存泄漏的内存地址堆栈信息就被记录在内存占用链表中,通过所述内存占用链表获取所述内存的地址堆栈信息;将所述地址堆栈信息与进程调用的动态库的基地址堆栈信息和尾地址堆栈信息进行比较,确定所述地址堆栈信息归属的动态库;然后根据所述地址堆栈信息归属的动态库的基地址堆栈信息从而可以确定所述地址堆栈信息对应的具体位置信息,也就是得到了存在内存泄漏的内存地址堆栈信息对应的具体位置信息,从而实现了定位内存泄露点的目的。
因此,该方法能够有效定位内存泄露点。本发明还公开了一种内存泄漏点的定位装置、系统及一种计算机可读存储介质,具有上述有益效果,在此不再赘述。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的内存泄漏点的定位方法的流程图;
图2为本发明实施例提供的内存泄漏点的定位装置的结构框图;
图3为本发明实施例提供的内存泄漏点的定位系统的结构框图。
具体实施方式
本发明的核心是提供一种内存泄漏点的定位方法,该方法能够有效定位内存泄露点;本发明的另一核心是提供一种内存泄漏点的定位装置、系统及一种计算机可读存储介质,具有上述有益效果。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参考图1,图1为本发明实施例提供的内存泄漏点的定位方法的流程图;该方法可以包括:
步骤s100、对调用内存分配器分配的内存的地址堆栈信息进行记录,将记录的内存的地址堆栈信息放入内存占用链表中;
其中,内存分配器可以包括tcmalloc,malloc等。tcmalloc是一个用于管理堆内存内存分配器,可以降低频繁分配、释放内存造成的性能损耗,并且有效地控制内存碎片。tcmalloc分配内存速度很快,一次malloc和free进行分配内存操作,ptmalloc需要300ns,而tcmalloc只要50ns。同时tcmalloc也优化了小对象的存储,需要更少的空间。tcmalloc特别对多线程做了优化,对于小对象的分配基本上是不存在锁竞争,而大对象使用了细粒度、高效的自旋锁(spinlock)。分配给线程的本地缓存,在长时间空闲的情况下会被回收,供其他线程使用,这样提高了在多线程情况下的内存利用率,不会浪费内存,在本实施例中主要以tcmalloc为例,对tcmalloc库改写进行介绍,其它内存分配器均可参照本实施例的介绍。
当调用tcmalloc进行内存分配时,对分配的内存的地址堆栈信息进行记录,并将记录的内存的地址堆栈信息放入内存占用链表(hashtable)中,以便于从动态申请的内存中筛选出存在内存泄露的内存的地址堆栈信息,从而进一步对其进行定位。其中,记录的内存的地址堆栈信息包括调用tcmalloc分配的未释放的内存地址堆栈信息。
步骤s110、通过内存占用链表获取内存的地址堆栈信息;
将存在泄露的内存存储在内存占用链表后,获取这些内存地址堆栈信息,其中,内存占用链表中内存的地址堆栈信息可以为一个,也可以为多个,内存地址堆栈信息为一个时表示在这次进程中可能只有一处内存泄露点;内存占用链表中内存的地址堆栈信息为多个时表示这次进程中可能存在多处内存泄露点,当存在多处内存泄露点时,对多处内存泄露点的定位处理可以顺序依次执行,也可以同时进行,在此不做限定。
步骤s120、将地址堆栈信息与进程调用的动态库的基地址堆栈信息和尾地址堆栈信息进行比较,确定地址堆栈信息归属的动态库;
将内存地址堆栈信息从内存占用链表取出后可以对上述内存进行具体定位,首先将将地址堆栈信息与进程调用的动态库的基地址堆栈信息和尾地址堆栈信息进行比较,确定地址堆栈信息归属的动态库,其中,进程调用的动态库的基地址堆栈信息和尾地址堆栈信息可以是预先存储的,当然,也可以在需要时再去获取。
优选的,进程调用的动态库的基地址堆栈信息和尾地址堆栈信息可以通过获取进程(test)所调用的动态库的映射关系来得到动态库的基地址堆栈信息和尾地址堆栈信息。进程调用的动态库的基地址堆栈信息和尾地址堆栈信息可以是预先存储的。例如,进程调用的动态库为lib1.so,lib2.so,lib3.so,获取进程所调用的库lib1.so,lib2.so,lib3.so的映射关系,其中,保存的映射关系中包括lib1.so,lib2.so,lib3.so的基地址堆栈信息和尾地址堆栈信息。
另外,进程调用的动态库可以为一个,也可以为多个。当动态库为一个时,可以不进行比较,直接可以确定内存泄露点属于该动态库;当动态库为多个时,得到所有动态库的基地址堆栈信息和尾地址堆栈信息后,将地址堆栈信息与进程调用的动态库的基地址堆栈信息和尾地址堆栈信息进行比较,确定地址堆栈信息归属的动态库。
例如,内存占用链表中的内存地址堆栈信息有两个,分别为第一泄露点和第二泄露点,其中,第一泄露点的地址堆栈信息为0x00000083,第二泄露点的地址堆栈信息为0x00010020。进程所调用的动态库有四个,分别为第一动态库,第二动态库,第三动态库以及第四动态库,其中,第一动态库的基地址堆栈信息为0x00000021,尾地址堆栈信息为0x00000098;第二动态库的基地址堆栈信息为0x00000100,尾地址堆栈信息为0x00000198;第三动态库的基地址堆栈信息为0x00001001,尾地址堆栈信息为0x00001056;第四动态库的基地址堆栈信息为0x00010005,尾地址堆栈信息为0x00010089;可见,第一泄露点的地址堆栈信息0x00000083在第一动态库的0x00000021至0x00000098的范围内,第二泄露点的地址堆栈信息0x00010020在第四动态库的0x00010005至0x00010089的范围内。于是,可以得到第一泄露点属于第一动态库,第二泄露点属于第四动态库。
步骤s130、根据地址堆栈信息归属的动态库的基地址堆栈信息确定地址堆栈信息对应的具体位置信息。
在确定内存泄露点归属的动态库后,便可进一步对内存泄露点在其归属的动态库的具体位置进行确定,可以根据地址堆栈信息归属的动态库的基地址堆栈信息确定地址堆栈信息对应的具体位置信息。其中,具体位置信息可以包括内存泄露点所在代码的行数以及在一行代码中哪个语句中,或者在哪段代码语句中。
具体可以为确定动态库中一行代码占用的内存大小后,根据动态库的基地址堆栈信息加上若干行代码占用的内存后与内存泄露点的内存最为接近,即可大致确定内存泄露点在哪行代码中,也可以进一步根据一行代码中具体代码占用内存的大小来进一步确定更确切的位置,用户可以自行根据实际情况来确定在一个动态库中内存泄露点的定位方法,在此不做限定。
基于上述技术方案,本发明实施例所提供的内存泄漏点的定位方法,通过在动态申请内存时对内存地址堆栈信息进行记录,同时把记录的内存地址堆栈信息放入一个表示“内存已被占用”的内存占用链表中进行储存,在程序运行一段时间后,内存占用链表中只存储内存泄露点的内存地址堆栈信息,通过首先判断内存泄露点所归属的动态库后根据动态库的基地址堆栈信息确定内存泄露点的具体位置信息,从而可以实现对内存泄露点的定位,可以有效地解决内存泄漏定位难的问题,提高定位的效率,另外,在开发过程中也可以通过该方法进行内存泄漏的检测。
其中,优选的,对调用内存分配器分配的内存的地址堆栈信息进行记录,将记录的内存的地址堆栈信息放入内存占用链表中可以包括:
分配一个空闲块列表;
当调用内存分配器分配内存时,将分配的内存的地址堆栈信息赋值给空闲块列表的节点,将节点插入到内存占用链表中,并将节点从空闲块列表中移除;
当内存释放时,将内存对应的节点从内存占用链表中取出,并将节点归还至空闲块列表中。
可以首先分配一个空闲块列表(freelist),空闲块列表中可以预先设置节点(node),节点数量可视情况而定。另外,空闲块列表的其大小也可以根据节点大小来进行设置,比如一个节点大小为42,那空闲块列表的大小可以设置为1024*1024*42。空闲块列表的大小在此不做限定。
当调用tcmalloc进行内存分配时,可以将分配的内存的地址堆栈信息赋值给空闲块列表的节点,一个节点存放一个空闲内存地址堆栈信息,可以方便对空闲内存的整理;将该节点存入内存占用链表中,并将该节点从空闲块列表中移除,用以表示该空闲内存已被占用。当空闲内存释放时,将该节点从内存占用链表中取出,并将该节点存入空闲块列表中,而存入空闲块列表的空闲内存可以被再次分配。其中,内存释放后存入空闲块列表的节点中存放的内存地址堆栈信息可以删除,也可以不进行删除。当不进行删除时,当有新的内存地址堆栈信息要赋值给该节点时,赋值过程会自动覆盖上一次存放的地址堆栈信息。程序在很长一段时间的运行后,正常内存被不断地申请,释放,申请,释放,而正常内存的地址堆栈信息也在内存占用链表中不断地插入,取出,插入,取出;而存在内存泄漏的内存在一次被申请后就不会被释放,也就是说可能多次申请,但却没有释放,存在内存泄漏的内存地址堆栈信息在内存占用链表中插入后不会被取出,因此存储在内存占用链表中的内存地址堆栈信息可能就是内存泄露点的地址堆栈信息。
其中,优选的,将节点插入到内存占用链表中可以包括:
将节点中存放的内存地址堆栈信息按照预定的算法映射成短数据;
将存放有短数据的节点插入到内存占用链表中。
实际的内存地址堆栈信息一般是一长串数字或者字母,例如0xa8cf7021,而对所有申请的内存地址堆栈信息都需要存储在内存占用链表中,其所需要占用的内存是很大的,为了减少内存占用,可以将内存的地址堆栈信息按照预定的算法映射成短数据后再将短数据存入内存占用链表中,其中,预定的算法可以是hash算法。例如,内存地址堆栈信息为0xa8cf7021,映射成的短数据为652,可见,这种方法至少减小了一半的内存开销。当然,将内存地址堆栈信息进行直接存储也可以实现可发明的技术方案,在此对地址堆栈信息在内存占用链表中的存储方式不做限定。
参照本优选实施例,内存地址堆栈信息在空闲块列表中也可通过预定算法映射成短数据后再存储至节点,在此不再赘述。
优选的,基于上述内存泄露点的定位方法,其还可以包括:
对内存占用链表中的内存的地址堆栈信息记录信息按照出现次数进行统计;
获取内存占用链表中地址堆栈信息记录信息出现次数大于预设阈值的短数据。
由于可能存在某些内存在某种正常情况下一直处于占用状态,比如在处理某项耗时非常长的一项任务,在这种情况下,上述内存地址堆栈信息就会一直存储在内存占用链表中,可能会被误认为是内存泄露点。这样,通过对对内存占用链表中的内存的地址堆栈信息记录信息按照出现次数进行统计,也就是对内存地址堆栈信息出现次数进行统计,由于内存泄漏点可以一直被内存分配器进行分配后存入内存占用链表,而正常内存在执行某项任务时程序一般不会再对进行重新分配,所以在内存占用链表中出现次数多的存在内存泄漏的概率就会增大。设置一个出现次数的阈值,比如5次,如果在内存占用链表中内存地址堆栈信息出现5次以上的就经过查找所属动态库等一系列动作。这样,可以减少误判的几率,也可以减小程序的工作量,减少定位内存泄漏点的工作时间,提高定位效率以及准确率。
优选的,根据地址堆栈信息与其所归属的动态库的基地址堆栈信息确定地址堆栈信息对应的具体位置信息可以包括:
将地址堆栈信息减去其所归属的动态库的基地址堆栈信息,得到偏移地址堆栈信息;
根据基地址堆栈信息和每行代码占用的内存大小,与偏移地址堆栈信息进行比较,得到地址堆栈信息对应的具体位置信息。
比如在得到偏移地址堆栈信息后可以通过add2line得出该内存的具体代码位置和行号,从而实现对内存泄露点的定位。
例如,地址堆栈信息为0x00000045,其所属的动态库的基地址堆栈信息为0x00000005,偏移地址堆栈信息即为40,在这个动态库的代码中第一行代码占用的内存大小为10,第二行代码占用的内存大小为20,第三行代码占用的内存大小为8,第四行代码占用的内存大小为15,则前三行代码占用的内存为38,前四行代码占用的内存大小为53,偏移地址堆栈信息40属于38到53之间,则可以确定地址堆栈信息位于动态库代码的第四行,然后可以通过查看第四行代码来具体确定内存泄露点。
请参考图2,图2为本发明实施例提供的内存泄露点的定位装置的结构框图;该装置可以包括:
记录单元100,用于对调用内存分配器分配的内存的地址堆栈信息进行记录,将记录的内存的地址堆栈信息放入内存占用链表中;
地址堆栈信息获取单元200,用于通过内存占用链表获取内存的地址堆栈信息;
比较单元300,用于将地址堆栈信息与进程调用的动态库的基地址堆栈信息和尾地址堆栈信息进行比较,确定地址堆栈信息归属的动态库;
位置信息确定单元400,用于根据地址堆栈信息归属的动态库的基地址堆栈信息确定地址堆栈信息对应的具体位置信息。
请参考图3,图3为本发明实施例提供的内存泄露点的定位系统的结构框图;该系统可以包括:
存储器500,用于存储计算机程序;
处理器600,用于执行计算机程序时实现内存泄漏点的定位方法的步骤。
本发明还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现任一项内存泄漏点的定位方法的步骤。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上对本发明所提供的内存泄漏点的定位方法、装置、系统及计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

Claims (9)

1.一种内存泄漏点的定位方法,其特征在于,包括:
对调用内存分配器分配的内存的地址堆栈信息进行记录,将记录的所述内存的地址堆栈信息放入内存占用链表中;
通过所述内存占用链表获取所述内存的地址堆栈信息;
将所述地址堆栈信息与进程调用的动态库的基地址堆栈信息和尾地址堆栈信息进行比较,确定所述地址堆栈信息归属的动态库;
根据所述地址堆栈信息归属的动态库的基地址堆栈信息确定所述地址堆栈信息对应的具体位置信息。
2.如权利要求1所述的内存泄漏点的定位方法,其特征在于,所述对调用内存分配器分配的内存的地址堆栈信息进行记录,将记录的所述内存的地址堆栈信息放入内存占用链表中包括:
分配一个空闲块列表;
当调用内存分配器分配内存时,将分配的内存的地址堆栈信息赋值给所述空闲块列表的节点,将所述节点插入到所述内存占用链表中,并将所述节点从所述空闲块列表中移除;
当所述内存释放时,将所述内存对应的节点从所述内存占用链表中取出,并将所述节点归还至所述空闲块列表中。
3.如权利要求2所述的内存泄漏点的定位方法,其特征在于,所述将所述节点插入到所述内存占用链表中包括:
将所述节点中存放的所述内存地址堆栈信息按照预定的算法映射成短数据;
将存放有所述短数据的所述节点插入到所述内存占用链表中。
4.如权利要求3所述的内存泄漏点的定位方法,其特征在于,所述进程调用的动态库的基地址堆栈信息和尾地址堆栈信息的调用方法包括:
获取进程所调用的动态库的映射关系,得到所述动态库的基地址堆栈信息和尾地址堆栈信息。
5.如权利要求4所述的内存泄漏点的定位方法,其特征在于,还包括:
对所述内存占用链表中的内存的地址堆栈信息记录信息按照出现次数进行统计;
获取所述内存占用链表中地址堆栈信息记录信息出现次数大于预设阈值的短数据。
6.如权利要求1至5任一项所述的内存泄漏点的定位方法,其特征在于,所述根据所述地址堆栈信息与其所归属的动态库的基地址堆栈信息确定所述地址堆栈信息对应的具体位置信息包括:
将所述地址堆栈信息减去其所归属的动态库的基地址堆栈信息,得到偏移地址堆栈信息;
根据所述基地址堆栈信息和每行代码占用的内存大小,与所述偏移地址堆栈信息进行比较,得到所述地址堆栈信息对应的具体位置信息。
7.一种内存泄漏点的定位装置,其特征在于,包括:
记录单元,用于对调用内存分配器分配的内存的地址堆栈信息进行记录,将记录的所述内存的地址堆栈信息放入内存占用链表中;
地址堆栈信息获取单元,用于通过所述内存占用链表获取所述内存的地址堆栈信息;
比较单元,用于将所述地址堆栈信息与进程调用的动态库的基地址堆栈信息和尾地址堆栈信息进行比较,确定所述地址堆栈信息归属的动态库;
位置信息确定单元,用于根据所述地址堆栈信息归属的动态库的基地址堆栈信息确定所述地址堆栈信息对应的具体位置信息。
8.一种内存泄漏点的定位系统,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至6任一项所述内存泄漏点的定位方法的步骤。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述内存泄漏点的定位方法的步骤。
CN201710823200.0A 2017-09-13 2017-09-13 内存泄漏点的定位方法、装置、系统及可读存储介质 Pending CN107608885A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710823200.0A CN107608885A (zh) 2017-09-13 2017-09-13 内存泄漏点的定位方法、装置、系统及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710823200.0A CN107608885A (zh) 2017-09-13 2017-09-13 内存泄漏点的定位方法、装置、系统及可读存储介质

Publications (1)

Publication Number Publication Date
CN107608885A true CN107608885A (zh) 2018-01-19

Family

ID=61063704

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710823200.0A Pending CN107608885A (zh) 2017-09-13 2017-09-13 内存泄漏点的定位方法、装置、系统及可读存储介质

Country Status (1)

Country Link
CN (1) CN107608885A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108491736A (zh) * 2018-04-02 2018-09-04 北京顶象技术有限公司 篡改监测方法及装置
CN110502357A (zh) * 2019-07-09 2019-11-26 北京字节跳动网络技术有限公司 一种栈回溯方法、装置、介质和设备
CN110727585A (zh) * 2019-09-11 2020-01-24 锐捷网络股份有限公司 内存泄漏检测方法、装置、电子设备及可读存储介质
CN111611158A (zh) * 2020-05-08 2020-09-01 中国原子能科学研究院 一种应用性能分析系统及方法
CN111966603A (zh) * 2020-09-04 2020-11-20 网易(杭州)网络有限公司 内存泄露的检测方法及装置、可读存储介质及电子设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102866947A (zh) * 2012-08-29 2013-01-09 深圳市共进电子股份有限公司 一种Linux内核内存泄漏的检测方法
CN102929770A (zh) * 2012-09-25 2013-02-13 烽火通信科技股份有限公司 嵌入式linux系统用户态任务独占的监测定位方法
US20150082284A1 (en) * 2012-04-26 2015-03-19 Freescale Semiconductor, Inc. Method and system for generating a memory trace of a program code executable on a programmable target

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150082284A1 (en) * 2012-04-26 2015-03-19 Freescale Semiconductor, Inc. Method and system for generating a memory trace of a program code executable on a programmable target
CN102866947A (zh) * 2012-08-29 2013-01-09 深圳市共进电子股份有限公司 一种Linux内核内存泄漏的检测方法
CN102929770A (zh) * 2012-09-25 2013-02-13 烽火通信科技股份有限公司 嵌入式linux系统用户态任务独占的监测定位方法

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108491736A (zh) * 2018-04-02 2018-09-04 北京顶象技术有限公司 篡改监测方法及装置
CN110502357A (zh) * 2019-07-09 2019-11-26 北京字节跳动网络技术有限公司 一种栈回溯方法、装置、介质和设备
CN110502357B (zh) * 2019-07-09 2023-01-17 北京字节跳动网络技术有限公司 一种栈回溯方法、装置、介质和设备
CN110727585A (zh) * 2019-09-11 2020-01-24 锐捷网络股份有限公司 内存泄漏检测方法、装置、电子设备及可读存储介质
CN110727585B (zh) * 2019-09-11 2023-07-21 锐捷网络股份有限公司 内存泄漏检测方法、装置、电子设备及可读存储介质
CN111611158A (zh) * 2020-05-08 2020-09-01 中国原子能科学研究院 一种应用性能分析系统及方法
CN111966603A (zh) * 2020-09-04 2020-11-20 网易(杭州)网络有限公司 内存泄露的检测方法及装置、可读存储介质及电子设备
CN111966603B (zh) * 2020-09-04 2024-01-19 网易(杭州)网络有限公司 内存泄露的检测方法及装置、可读存储介质及电子设备

Similar Documents

Publication Publication Date Title
CN107608885A (zh) 内存泄漏点的定位方法、装置、系统及可读存储介质
CN108038002B (zh) 一种嵌入式软件内存管理方法
CN101432702B (zh) 在事务处理码内对存储器分配和解除分配的系统和方法
CN110008142A (zh) 存储数据管理方法、装置、设备及计算机可读存储介质
CN102831068B (zh) 一种内存操作记录的处理方法及装置
CN107066498B (zh) 键值kv存储方法和装置
US20150317246A1 (en) Memory Reclamation Method and Apparatus
CN104808952B (zh) 数据缓存方法及装置
CN107632791A (zh) 一种存储空间的分配方法及系统
CN107608826A (zh) 一种存储集群的节点的故障恢复方法、装置及介质
CN103593257B (zh) 一种数据备份方法及装置
CN103838859A (zh) 一种减少linux下多进程间数据拷贝的方法
CN107589915A (zh) 一种分布式存储系统的容量信息监控方法、装置及设备
CN109144872A (zh) 内存泄漏的检测方法、装置、终端设备及可读存储介质
CN109815005A (zh) 一种管理内存的方法、装置和存储系统
US7860906B2 (en) Overflow per segment
CN106339324A (zh) 一种选择垃圾回收块的方法及装置
CN110209493A (zh) 内存管理方法、装置、电子设备及存储介质
CN108228449A (zh) 终端设备控制方法及装置、终端设备及计算机可读存储介质
CN109614344A (zh) 一种缓存空间回收方法、装置、设备以及存储系统
CN107704573A (zh) 一种与业务耦合的智能缓存方法
CN109213450A (zh) 一种基于闪存阵列的关联元数据删除方法、装置及设备
CN109086462A (zh) 一种分布式文件系统中元数据的管理方法
CN108304259A (zh) 内存管理方法及系统
CN105740170B (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20180119