CN102866947A - 一种Linux内核内存泄漏的检测方法 - Google Patents
一种Linux内核内存泄漏的检测方法 Download PDFInfo
- Publication number
- CN102866947A CN102866947A CN2012103102328A CN201210310232A CN102866947A CN 102866947 A CN102866947 A CN 102866947A CN 2012103102328 A CN2012103102328 A CN 2012103102328A CN 201210310232 A CN201210310232 A CN 201210310232A CN 102866947 A CN102866947 A CN 102866947A
- Authority
- CN
- China
- Prior art keywords
- internal memory
- record
- information
- memory
- linux kernel
- 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
Links
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种Linux内核内存泄漏的检测方法,包括:步骤1、通过嵌套运行的方法记录系统当前成功申请内存的地址和申请内存的函数调用堆栈,以slable cache为单位分别进行链表式记录;步骤2、释放内核内存,查找当前的记录并一起删除;步骤3、停止记录内存申请信息,释放正常申请的内存记录;步骤4、根据剩余记录信息查找并判断内存的泄漏。是建立在slab内存管理模块上,利用kmem_alloc进行统一分配规律,通过记录所有的内存活动情况,在内存释放时,同时删除信息,没有被删除的信息就是内存泄漏信息。本发明提供的Linux内核内存泄漏的检测方法,能够快速准确地对内存的泄露信息进行查找。
Description
技术领域
本发明涉及内存泄露检测技术领域,更具体地说,特别涉及一种Linux内核内存泄漏的检测方法。
背景技术
在嵌入式系统领域,经常要对linux内存进行开发,定制,裁减和优化,Linux内核日益壮大,功能不断完善,复杂度也不断增大,代码函数发展已经超过1000万行,加上本身一些功能存在不稳定性,经常会出现内存泄漏等问题,严重影响产品质量和稳定性,采用人工定位方式难以发现内存泄漏,一些内存泄漏以各样的方式存在,常见有常发性内存泄漏、偶发性内存泄漏、一次性内存泄漏和隐式内存泄漏等等,隐蔽性比较强的内存泄漏更加难以发现和定位。
发明内容
本发明要解决的技术问题为提供一种Linux内核内存泄漏的检测方法,该方法能够快速准确地对造成内存泄漏的信息进行检测。
为解决上述技术问题,本发明提供了一种Linux内核内存泄漏的检测方法,包括步骤:
S1、通过嵌套运行的方法记录系统当前成功申请内存的地址和申请内存的函数调用堆栈,以slable cache为单位分别进行链表式记录;
S2、释放内核内存,查找当前的记录并一起删除,
S3、停止记录内存申请信息,释放正常申请内存的记录,
S4、根据剩余记录信息查找并判断内存的泄漏。
优选地,在所述步骤1中,所述链表式记录具体为:以slable cache为单位分别使用双向链表采用添加方式记录内存申请的地址和当前函数堆栈。
优选地,在所述步骤S2中,记录删除的方法为:采用末端查找,删除内存申请记录。
优选地,所述步骤S3的具体操作为:禁止内存申请信息记录模块开关,停止记录新信息。
优选地,所述步骤S4的具体操作为:利用所述记录函数堆栈地址,查找system_map内核映像表,转换为具体的函数名称。
本发明提供的Linux内核内存泄漏的检测方法,是建立在slab内存管理模块上,利用kmem_alloc进行统一分配规律;函数_cache_alloc()是kmem的核心部分,每个内存的申请过程都必须通过该函数进行处理,本设计的内存记录点存放在_cache_alloc()函数内部,记录所有的内存活动情况,记录方式采用双向链表法,每个kmem_cache建立链表头,新发现一个内存申请添加到链表的后面,内存释放时,同时删除信息,没有被删除的信息就是内存泄漏信息。本发明提供的Linux内核内存泄漏的检测方法,通过步骤1至4能够快速准确地对内存的泄露信息进行查找。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1本发明一种实施例中内存申请信息记录结构图;
图2本发明一种实施例中内存信息记录流程图;
图3本发明一种实施例中内存申请信息释放结构图;
图4本发明一种实施例中内存泄漏控制流程图。
具体实施方式
本发明的核心为提供一种Linux内核内存泄漏的检测方法,该方法能够快速准确地对造成内存泄漏的信息进行检测。
为了使本领域的技术人员更好地理解本发明的技术方案,下面结合附图和具体实施例对本发明作进一步的详细说明。
请参考图1至图4,其中,图1本发明一种实施例中内存申请信息记录结构图;图2本发明一种实施例中内存信息记录流程图;图3本发明一种实施例中内存申请信息释放结构图;图4本发明一种实施例中内存泄漏控制流程图。
本发明提供了一种Linux内核内存泄漏的检测方法,包括步骤:
S1、通过嵌套运行的方法记录系统当前成功申请内存的地址和申请内存的函数调用堆栈,以slable cache为单位分别进行链表式记录;
S2、释放内核内存,查找当前的记录并一起删除,
S3、停止记录内存申请信息,释放正常申请内存的记录,
S4、根据剩余记录信息查找并判断内存的泄漏。
具体地,在所述步骤1中,所述链表式记录具体为:以slable cache为单位分别使用双向链表采用添加方式记录内存申请的地址和当前函数堆栈。
具体地,在所述步骤S2中,记录删除的方法为:采用末端查找,删除内存申请记录。
具体地,所述步骤S3的具体操作为:禁止内存申请信息记录模块开关,停止记录新信息。
具体地,所述步骤S4的具体操作为:利用所述记录函数堆栈地址,查找system_map内核映像表,转换为具体的函数名称。
本发明提供的Linux内核内存泄漏的检测方法是基于动态运行的方式定位内存泄漏函数,能够对每一个内存申请和删除进行记录,到达一定时间后,就可以发现剩余没有删除的内存信息也就是内存泄漏,最后依靠linux编译生成的函数符合信息最终确认具体函数。其包括以下步骤:
1.设置用户行为,定义具体的运行规则,具体包括功能启动时间,停止时间和结果输出时间
2.记录内存申请的函数堆栈
3.删除内存申请记录
4.停止记录内存申请
5.输出并转换函数堆栈,得到具体的函数名称
本设计具体自动操作特点,不需要用户实时操作,用户只需要定义好时间和步骤,就可以在指定的时间输出结果。
本发明方案是建立在slab内存管理模块上,利用kmem_alloc进行统一分配规律;函数_cache_alloc()是kmem的核心部分,每个内存的申请过程都必须通过该函数进行处理,本设计的内存记录点存放在_cache_alloc()函数内部,记录所有的内存活动情况,记录方式采用双向链表法,每个kmem_cache建立链表头,新发现一个内存申请添加到链表的后面,内存释放时,同时删除信息,没有被删除的信息就是内存泄漏信息。
存储架构设计
记录的元素包括时间和函数堆栈,堆栈记录个数为最后10个,总的存储空间大小为44个字节,记录的结构是一个双向链表,采用添加方式进行记录,删除记录时由末端开始查找并删除记录,内存每申请一次就会需要增加44字节记录内存活动,不占用系统内存。
控制架构设计
记录内存活动信息也需要动态申请内存,由于本身的操作就是在内存操作的内存,如果直接调用,会导致循环嵌套,本发明单独定义一套内存申请函数和内存释放函数作为控制部分的内存申请使用。内存活动记录存储设计,如图1所示,在kmem_cache结构体内添加一个内存申请信息链表头,记录该结构下的所有记录信息,信息以双向链表方式进行记录。具体的控制操作如图2所示,信息记录部分首先判断总开关记录开关和内核空间,判断内存申请是否成功,如果成功就记录当前内存申请的地址指针和函数堆栈,如果不成功就退出操作。
内存释放
内存释放分为cache和通用2部分,所有的内存释放函数都是通过_cache_free()进行释放,本设计的内存活动释放放在该函数内部,如图3所示,内存活动存储是与链表添加记录方式,一般情况下,申请内存到释放内存都是在同一个时间段完成,这个过程是一个连续过程,但是有的情况是例外,比如在中断里面释放就是通过异步方式进行释放,但是这个异步也是在很短的时间内处理,也可以认为是一个连续处理,删除内存活动记录表要和添加的方式对应,删除时候首先查找最新的记录,从链表的末端开始查找一直到链表的首部以减少查找时间。
堆栈地址到函数的转换,查找system_map内核映像表,转换为具体的函数名称。
用户行为控制的主要模块,一共包括3部分:信息记录、信息删除和结果输出,每个部分都是由定时器进行控制,用户设置好操作的时间点,就可以在指定的时间内输出结果。
Claims (5)
1.一种Linux内核内存泄漏的检测方法,其特征在于,包括:
步骤1、通过嵌套运行的方法记录系统当前成功申请内存的地址和申请内存的函数调用堆栈,以slable cache为单位分别进行链表式记录;
步骤2、释放内核内存,查找当前的记录并一起删除;
步骤3、停止记录内存申请信息,释放正常申请的内存记录;
步骤4、根据剩余记录信息查找并判断内存的泄漏。
2.根据权利要求1所述的Linux内核内存泄漏的检测方法,其特征在于,在所述步骤1中,所述链表式记录具体为:以slable cache为单位分别使用双向链表采用添加方式记录内存申请的地址和当前函数堆栈。
3.根据权利要求1所述的Linux内核内存泄漏的检测方法,其特征在于,在所述步骤2中,记录删除的方法为:采用末端查找,删除内存申请记录。
4.根据权利要求1所述的Linux内核内存泄漏的检测方法,其特征在于,所述步骤3的具体操作为:禁止内存申请信息记录模块开关,停止记录新信息。
5.根据权利要求1所述的Linux内核内存泄漏的检测方法,其特征在于,所述步骤4的具体操作为:利用所述记录函数堆栈地址,查找system_map内核映像表,转换为具体的函数名称。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012103102328A CN102866947A (zh) | 2012-08-29 | 2012-08-29 | 一种Linux内核内存泄漏的检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012103102328A CN102866947A (zh) | 2012-08-29 | 2012-08-29 | 一种Linux内核内存泄漏的检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102866947A true CN102866947A (zh) | 2013-01-09 |
Family
ID=47445826
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012103102328A Pending CN102866947A (zh) | 2012-08-29 | 2012-08-29 | 一种Linux内核内存泄漏的检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102866947A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572460A (zh) * | 2014-12-30 | 2015-04-29 | 大唐移动通信设备有限公司 | 一种内存泄露的检测方法和装置 |
CN105260314A (zh) * | 2015-11-03 | 2016-01-20 | 上海斐讯数据通信技术有限公司 | 内存泄漏的监测方法 |
CN107451054A (zh) * | 2017-07-26 | 2017-12-08 | 武汉虹信通信技术有限责任公司 | 一种用于linux环境中的内存池调试方法 |
CN107608885A (zh) * | 2017-09-13 | 2018-01-19 | 郑州云海信息技术有限公司 | 内存泄漏点的定位方法、装置、系统及可读存储介质 |
CN108664390A (zh) * | 2017-03-31 | 2018-10-16 | 华为技术有限公司 | 一种内存泄露检测方法及设备 |
WO2019091244A1 (zh) * | 2017-11-07 | 2019-05-16 | 晶晨半导体(上海)股份有限公司 | 一种基于Linux内核内存泄露的检测方法 |
CN109783371A (zh) * | 2018-12-27 | 2019-05-21 | 江苏博智软件科技股份有限公司 | 一种关于iOS应用程序内存泄漏的即时检测方法 |
CN110083525A (zh) * | 2019-03-15 | 2019-08-02 | 平安普惠企业管理有限公司 | 内存泄露的定位方法、装置、计算机设备及存储介质 |
CN110727585A (zh) * | 2019-09-11 | 2020-01-24 | 锐捷网络股份有限公司 | 内存泄漏检测方法、装置、电子设备及可读存储介质 |
CN112559184A (zh) * | 2020-12-17 | 2021-03-26 | 成都思酷智能科技有限公司 | 一种云桌面动态分配内存的方法及装置 |
CN112860574A (zh) * | 2021-03-15 | 2021-05-28 | 北京车和家信息技术有限公司 | Linux内核的内存泄漏检测方法和装置、介质、设备 |
CN115220970A (zh) * | 2021-12-10 | 2022-10-21 | 广州汽车集团股份有限公司 | 一种定位内存泄漏方法、装置、计算机设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1936859A (zh) * | 2005-09-30 | 2007-03-28 | 康佳集团股份有限公司 | 一种内存监控方法 |
CN101539870A (zh) * | 2008-03-21 | 2009-09-23 | 中兴通讯股份有限公司 | 内存泄漏检测装置及方法 |
US20100031238A1 (en) * | 2008-07-29 | 2010-02-04 | International Business Machines Corporation | Method and Apparatus for Locating Memory Leak in a Program |
CN102103541A (zh) * | 2011-02-28 | 2011-06-22 | 中国人民解放军国防科学技术大学 | 防止内存泄露和内存多次释放的内核模块内存管理方法 |
CN102262582A (zh) * | 2010-05-25 | 2011-11-30 | 芯讯通无线科技(上海)有限公司 | 移动终端及其内存泄露检测方法 |
CN102279797A (zh) * | 2011-08-30 | 2011-12-14 | 深圳宝德科技集团股份有限公司 | 一种检测内存泄漏的方法及系统 |
CN102375776A (zh) * | 2010-08-18 | 2012-03-14 | 康佳集团股份有限公司 | 一种嵌入式设备及其检测和定位内存泄漏的方法 |
-
2012
- 2012-08-29 CN CN2012103102328A patent/CN102866947A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1936859A (zh) * | 2005-09-30 | 2007-03-28 | 康佳集团股份有限公司 | 一种内存监控方法 |
CN101539870A (zh) * | 2008-03-21 | 2009-09-23 | 中兴通讯股份有限公司 | 内存泄漏检测装置及方法 |
US20100031238A1 (en) * | 2008-07-29 | 2010-02-04 | International Business Machines Corporation | Method and Apparatus for Locating Memory Leak in a Program |
CN102262582A (zh) * | 2010-05-25 | 2011-11-30 | 芯讯通无线科技(上海)有限公司 | 移动终端及其内存泄露检测方法 |
CN102375776A (zh) * | 2010-08-18 | 2012-03-14 | 康佳集团股份有限公司 | 一种嵌入式设备及其检测和定位内存泄漏的方法 |
CN102103541A (zh) * | 2011-02-28 | 2011-06-22 | 中国人民解放军国防科学技术大学 | 防止内存泄露和内存多次释放的内核模块内存管理方法 |
CN102279797A (zh) * | 2011-08-30 | 2011-12-14 | 深圳宝德科技集团股份有限公司 | 一种检测内存泄漏的方法及系统 |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572460A (zh) * | 2014-12-30 | 2015-04-29 | 大唐移动通信设备有限公司 | 一种内存泄露的检测方法和装置 |
CN105260314B (zh) * | 2015-11-03 | 2018-06-29 | 上海斐讯数据通信技术有限公司 | 内存泄漏的监测方法 |
CN105260314A (zh) * | 2015-11-03 | 2016-01-20 | 上海斐讯数据通信技术有限公司 | 内存泄漏的监测方法 |
CN108664390B (zh) * | 2017-03-31 | 2021-10-01 | 华为技术有限公司 | 一种内存泄露检测方法及设备 |
CN108664390A (zh) * | 2017-03-31 | 2018-10-16 | 华为技术有限公司 | 一种内存泄露检测方法及设备 |
CN107451054A (zh) * | 2017-07-26 | 2017-12-08 | 武汉虹信通信技术有限责任公司 | 一种用于linux环境中的内存池调试方法 |
CN107608885A (zh) * | 2017-09-13 | 2018-01-19 | 郑州云海信息技术有限公司 | 内存泄漏点的定位方法、装置、系统及可读存储介质 |
WO2019091244A1 (zh) * | 2017-11-07 | 2019-05-16 | 晶晨半导体(上海)股份有限公司 | 一种基于Linux内核内存泄露的检测方法 |
US11157389B1 (en) | 2017-11-07 | 2021-10-26 | Amlogic (Shanghai) Co., Ltd. | Method for detecting memory leak based on linux kernel |
CN109783371A (zh) * | 2018-12-27 | 2019-05-21 | 江苏博智软件科技股份有限公司 | 一种关于iOS应用程序内存泄漏的即时检测方法 |
CN110083525A (zh) * | 2019-03-15 | 2019-08-02 | 平安普惠企业管理有限公司 | 内存泄露的定位方法、装置、计算机设备及存储介质 |
CN110727585A (zh) * | 2019-09-11 | 2020-01-24 | 锐捷网络股份有限公司 | 内存泄漏检测方法、装置、电子设备及可读存储介质 |
CN110727585B (zh) * | 2019-09-11 | 2023-07-21 | 锐捷网络股份有限公司 | 内存泄漏检测方法、装置、电子设备及可读存储介质 |
CN112559184A (zh) * | 2020-12-17 | 2021-03-26 | 成都思酷智能科技有限公司 | 一种云桌面动态分配内存的方法及装置 |
CN112860574A (zh) * | 2021-03-15 | 2021-05-28 | 北京车和家信息技术有限公司 | Linux内核的内存泄漏检测方法和装置、介质、设备 |
CN112860574B (zh) * | 2021-03-15 | 2024-02-20 | 北京车和家信息技术有限公司 | Linux内核的内存泄漏检测方法和装置、介质、设备 |
CN115220970A (zh) * | 2021-12-10 | 2022-10-21 | 广州汽车集团股份有限公司 | 一种定位内存泄漏方法、装置、计算机设备及存储介质 |
CN115220970B (zh) * | 2021-12-10 | 2023-09-08 | 广州汽车集团股份有限公司 | 一种定位内存泄漏方法、装置、计算机设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102866947A (zh) | 一种Linux内核内存泄漏的检测方法 | |
EP2921963A1 (en) | Memory recycling method and device | |
EP2696285A1 (en) | Method and device for allocating resource | |
CN102498480B (zh) | 动态频率内存控制 | |
CN108628688B (zh) | 一种消息处理方法、装置及设备 | |
US20100235565A1 (en) | Apparatus and method to protect metadata against unexpected power down | |
CN101000614A (zh) | 文件删除方法和文件打开方法 | |
US9984000B2 (en) | Electronic device data distribution | |
CN104113576A (zh) | 一种客户端的更新方法及装置 | |
CN104038632A (zh) | 一种智能终端管理方法及装置 | |
CN103324582A (zh) | 一种内存迁移方法、装置及设备 | |
CN102902566A (zh) | 一种应用软件的安装及启动方法和装置 | |
CN101923514A (zh) | 一种闪存存储设备的管理方法及系统 | |
CN107590144A (zh) | 一种文件存储方法和终端 | |
CN107783908A (zh) | 一种基于Linux内核内存泄露的检测方法 | |
CN103902562A (zh) | 一种终端数据库升级方法及相关装置 | |
CN110069215A (zh) | 一种基于块存储的动态调整存储单元的方法及装置 | |
CN102541969A (zh) | 基于fat文件系统的文件保护方法、系统及存储器 | |
CN106650409B (zh) | 一种终端控制方法及终端 | |
CN103544076A (zh) | 一种数据备份方法及装置 | |
CN104598192A (zh) | 信息处理方法及电子设备 | |
CN113223566B (zh) | 存储器的控制系统及其控制方法 | |
CN101833585A (zh) | 数据库服务器操作控制系统、方法及设备 | |
CN109408416A (zh) | 一种地址映射表项页管理方法及装置 | |
CN105100901A (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 | ||
C05 | Deemed withdrawal (patent law before 1993) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130109 |