一种Linux内核内存泄漏的检测方法技术

技术编号:8190909 阅读:629 留言:0更新日期:2013-01-10 01:49
本发明专利技术公开了一种Linux内核内存泄漏的检测方法,包括:步骤1、通过嵌套运行的方法记录系统当前成功申请内存的地址和申请内存的函数调用堆栈,以slable?cache为单位分别进行链表式记录;步骤2、释放内核内存,查找当前的记录并一起删除;步骤3、停止记录内存申请信息,释放正常申请的内存记录;步骤4、根据剩余记录信息查找并判断内存的泄漏。是建立在slab内存管理模块上,利用kmem_alloc进行统一分配规律,通过记录所有的内存活动情况,在内存释放时,同时删除信息,没有被删除的信息就是内存泄漏信息。本发明专利技术提供的Linux内核内存泄漏的检测方法,能够快速准确地对内存的泄露信息进行查找。

【技术实现步骤摘要】

本专利技术涉及内存泄露检测
,更具体地说,特别涉及ー种Linux内核内存泄漏的检测方法
技术介绍
在嵌入式系统领域,经常要对Iinux内存进行开发,定制,裁减和优化,Linux内核日益壮大,功能不断完善,复杂度也不断増大,代码函数发展已经超过1000万行,加上本身一些功能存在不稳定性,经常会出现内存泄漏等问题,严重影响产品质量和稳定性,采用人エ定位方式难以发现内存泄漏,一些内存泄漏以各样的方式存在,常见有常发性内存泄漏、偶发性内存泄漏、一次性内存泄漏和隐式内存泄漏等等,隐蔽性比较强的内存泄漏更加难以发现和定位。
技术实现思路
本专利技术要解决的技术问题为提供ー种Linux内核内存泄漏的检测方法,该方法能够快速准确地对造成内存泄漏的信息进行检測。为解决上述技术问题,本专利技术提供了ー种Linux内核内存泄漏的检测方法,包括步骤SI、通过嵌套运行的方法记录系统当前成功申请内存的地址和申请内存的函数调用堆栈,以slable cache为单位分别进行链表式记录;S2、释放内核内存,查找当前的记录并一起删除,S3、停止记录内存申请信息,释放正常申请内存的记录,S4、根据剩余记录信息查找并判断内存的泄漏。优选地,在所述步骤I中,所述链表式记录具体为以slable cache为单位分别使用双向链表采用添加方式记录内存申请的地址和当前函数堆栈。优选地,在所述步骤S2中,记录删除的方法为采用末端查找,删除内存申请记求。优选地,所述步骤S3的具体操作为禁止内存申请信息记录模块开关,停止记录新信息。优选地,所述步骤S4的具体操作为利用所述记录函数堆栈地址,查找system_map内核映像表,转换为具体的函数名称。本专利技术提供的Linux内核内存泄漏的检测方法,是建立在slab内存管理模块上,利用kmem_alloc进行统一分配规律;函数_cache_alloc O是kmem的核心部分,姆个内存的申请过程都必须通过该函数进行处理,本设计的内存记录点存放在_cache_alloc()函数内部,记录所有的内存活动情况,记录方式采用双向链表法,姆个kmem_cache建立链表头,新发现ー个内存申请添加到链表的后面,内存释放吋,同时删除信息,没有被删除的信息就是内存泄漏信息。本专利技术提供的Linux内核内存泄漏的检测方法,通过步骤I至4能够快速准确地对内存的泄露信息进行查找。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图I本专利技术ー种实施例中内存申请信息记录结构图;图2本专利技术ー种实施例中内存信息记录流程图;图3本专利技术ー种实施例中内存申请信息释放结构图; 图4本专利技术ー种实施例中内存泄漏控制流程图。具体实施例方式本专利技术的核心为提供,该方法能够快速准确地对造成内存泄漏的信息进行检测。为了使本领域的技术人员更好地理解本专利技术的技术方案,下面结合附图和具体实施例对本专利技术作进ー步的详细说明。请參考图I至图4,其中,图I本专利技术ー种实施例中内存申请信息记录结构图;图2本专利技术ー种实施例中内存信息记录流程图;图3本专利技术ー种实施例中内存申请信息释放结构图;图4本专利技术ー种实施例中内存泄漏控制流程图。本专利技术提供了ー种Linux内核内存泄漏的检测方法,包括步骤SI、通过嵌套运行的方法记录系统当前成功申请内存的地址和申请内存的函数调用堆栈,以slable cache为单位分别进行链表式记录;S2、释放内核内存,查找当前的记录并一起删除,S3、停止记录内存申请信息,释放正常申请内存的记录,S4、根据剩余记录信息查找并判断内存的泄漏。具体地,在所述步骤I中,所述链表式记录具体为以slable cache为单位分别使用双向链表采用添加方式记录内存申请的地址和当前函数堆栈。具体地,在所述步骤S2中,记录删除的方法为采用末端查找,删除内存申请记求。具体地,所述步骤S3的具体操作为禁止内存申请信息记录模块开关,停止记录新信息。具体地,所述步骤S4的具体操作为利用所述记录函数堆栈地址,查找system_map内核映像表,转换为具体的函数名称。本专利技术提供的Linux内核内存泄漏的检测方法是基于动态运行的方式定位内存泄漏函数,能够对每一个内存申请和删除进行记录,到达一定时间后,就可以发现剰余没有删除的内存信息也就是内存泄漏,最后依靠Iinux编译生成的函数符合信息最終确认具体函数。其包括以下步骤I.设置用户行为,定义具体的运行规则,具体包括功能启动时间,停止时间和结果输出时间2.记录内存申请的函数堆栈3.删除内存申请记录4.停止记录内存申请5.输出并转换函数堆栈,得到具体的函数名称本设计具体自动操作特点,不需要用户实时操作,用户只需要定义好时间和步骤,就可以在指定的时间输出結果。本专利技术方案是建立在slab内存管理模块上,利用kmem_alloc进行 统一分配规律;函数_cache_alloc O是kmem的核心部分,姆个内存的申请过程都必须通过该函数进行处理,本设计的内存记录点存放在_cache_alloc O函数内部,记录所有的内存活动情况,记录方式采用双向链表法,姆个kmem_cache建立链表头,新发现ー个内存申请添加到链表的后面,内存释放吋,同时删除信息,没有被删除的信息就是内存泄漏信息。存储架构设计记录的元素包括时间和函数堆栈,堆栈记录个数为最后10个,总的存储空间大小为44个字节,记录的结构是ー个双向链表,采用添加方式进行记录,删除记录时由末端开始查找并删除记录,内存每申请一次就会需要増加44字节记录内存活动,不占用系统内存。控制架构设计记录内存活动信息也需要动态申请内存,由于本身的操作就是在内存操作的内存,如果直接调用,会导致循环嵌套,本专利技术单独定义ー套内存申请函数和内存释放函数作为控制部分的内存申请使用。内存活动记录存储设计,如图I所示,在kmem_cache结构体内添加一个内存申请信息链表头,记录该结构下的所有记录信息,信息以双向链表方式进行记录。具体的控制操作如图2所示,信息记录部分首先判断总开关记录开关和内核空间,判断内存申请是否成功,如果成功就记录当前内存申请的地址指针和函数堆栈,如果不成功就退出操作。内存释放内存释放分为cache和通用2部分,所有的内存释放函数都是通过_cache_free O进行释放,本设计的内存活动释放放在该函数内部,如图3所示,内存活动存储是与链表添加记录方式,一般情况下,申请内存到释放内存都是在同一个时间段完成,这个过程是ー个连续过程,但是有的情况是例外,比如在中断里面释放就是通过异步方式进行释放,但是这个异步也是在很短的时间内处理,也可以认为是ー个连续处理,删除内存活动记录表要和添加的方式对应,删除时候首先查找最新的记录,从链表的末端开始查找一直到链表的首部以减少查找时间。堆栈地址到函数的转换,查找system_map内核映像表,转换为具体的函数名称。用户行为控制的主要模块,一共包括3部分信息记录、信息删除和结果输出,每个部分都是由定时器进行控制,用户设置好操作的时间点,就可以在指定的时间内输出结果O权利要求1本文档来自技高网...

【技术保护点】
一种Linux内核内存泄漏的检测方法,其特征在于,包括:步骤1、通过嵌套运行的方法记录系统当前成功申请内存的地址和申请内存的函数调用堆栈,以slable?cache为单位分别进行链表式记录;步骤2、释放内核内存,查找当前的记录并一起删除;步骤3、停止记录内存申请信息,释放正常申请的内存记录;步骤4、根据剩余记录信息查找并判断内存的泄漏。

【技术特征摘要】

【专利技术属性】
技术研发人员:刘财根
申请(专利权)人:深圳市共进电子股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1