内存泄漏的监测方法技术

技术编号:12735955 阅读:147 留言:0更新日期:2016-01-20 19:49
本发明专利技术涉及内存领域,尤其涉及一种内存泄漏的监测方法。一种内存泄漏的监测方法,应用于在路由器内存发生泄漏时报警,所述监测方法包括:对内存进行分配,在管理链表中用数据结构体记录内存分配的基本信息;释放内存,遍历所述管理链表,寻找所述内存对应的数据结构体;判断释放内存的地址与所述数据结构体记录的内存分配BUF地址是否相同;若相同则释放所述管理链表,释放分配的内存,若不同,则判断出现内存泄漏,发出报警信号。

【技术实现步骤摘要】

本专利技术涉及内存领域,尤其涉及一种内存泄漏的监测方法
技术介绍
内存泄露是软件开发中十分常见并且十分常见的错误跟踪起来相当困难。内存泄露引发的段错误轻则使软件功能失效,重则使设备CPU0等重启现象,所以快速的检测和快速的定位内存溢出的机制就十分重要。另外对于无屏的嵌入式设备(如路由器,交换机等)需要一种对于内存溢出错误的告警机制,因为这些设备没有屏幕显示错误,只有当调试人员连接串口、telnet查看、web页面登入客户端的时候才能看到设备的信息。现有的内存泄露检测方案只描述了如何检测内存泄露出现断错误或者设备重启时才去发现内存泄露,这样定位问题就比较慢,需要长时间拷机复现问题所在,效率比较低下,现有的简单检测方案在嵌入式设备上并不能达到定位问题。
技术实现思路
针对现有技术中存在的问题,本专利技术能够在无屏的路由器嵌入式设备上能快速的检测定位内存溢出问题,并且将问题进行记录,方便开发人员的调试。本专利技术采用如下技术方案:一种内存泄漏的监测方法,应用于在路由器内存发生泄漏时报警,所述监测方法包括:对内存进行分配,在管理链表中用数据结构体记录内存分配的基本信息;释放内存,遍历所述管理链表,寻找所述内存对应的数据结构体;判断释放内存的地址与所述数据结构体记录的内存分配BUF地址是否相同;若相同则释放所述管理链表,释放分配的内存,若不同,则判断出现内存泄漏,发出报警信号。优选的,所述基本信息包括:链表和/或分配BUF时赋予的地址和/或分配内存的数量和/或分配内存的次数和/或分配内存的函数入口和需要追溯的堆栈的地址。优选的,所述方法还包括:创建内存泄漏链表,保存内存泄漏的所述数据结构体于所述内存泄露链表中;记录和保存内存泄漏的管理信息。优选的,所述方法还包括:创建调用进程,所述调用进程接收控制命令,调用读取记录所述基本信息的接口;将所述管理链表中的数据结构体输出至串口上。优选的,所述方法还包括:创建调用进程,所述调用进程接收控制命令,所述调用进程根据所述控制命令同一删除所述管理链表的节点,并且清理内存泄漏链表。优选的,所述方法中:提供一相对于所述内存泄漏链表的上层应用,所述上层应用调用所述内存泄漏链表的最大阈值,当内存泄漏超过所述最大阈值,则向所述上层应用报警。优选的,所述方法还包括:所述最大阈值为变量,当分配内存时,叠加所述最大阈值,释放内存时,递减所述最大阈值。优选的,所述方法还包括:所述内存泄漏链表设有上限,当记录所述内存泄漏的管理信息时,将所述管理信息插入所述内存泄漏链表的链表头。优选的,所述方法还包括:当到达所述内存泄漏链表上限时,移除所述内存泄漏链表的链表尾的记录后,将所述管理信息插入所述内存泄漏链表的链表头。优选的,所述方法还包括:记录内存泄漏的堆栈,通过GDB调试确定定位所述堆栈。本专利技术的有益效果是:本专利技术详细描述内存泄露的检测方法,内存泄露问题的定位机制和报警机制。能够对无屏幕的路由器进行内存泄漏的监测,能够实现智能化的监测。附图说明图1为本专利技术内存分配的流程图;图2为本专利技术中内存释放的流程图。具体实施方式需要说明的是,在不冲突的情况下,下述技术方案,技术特征之间可以相互组合。下面结合附图对本专利技术的具体实施方式作进一步的说明:本实施例可以实现在一般路由器上面,可以通过本专利技术中的技术方案,只要是linux平台都可以拿过来直接利用,适用性非常广泛,移植这套方案不需要做过多的改动,无需人为一直跟踪,只需要设置好值之后调用lib库的接口,就可以发出报警,提前预防内存泄露,避免造成后续工程量大了之后定位起来比较麻烦。本实施例首先生成了一个内存泄露检测的共享库,此共享库实现了如下功能:在共享库内实现一个管理链表和一个内存泄露链表,管理链表的每个节点都有一个记录的结构体(数据结构体),用于保存内存分配的基本信息。内存泄露链表用来管理所有出现内存泄露的管理信息,此链表设有上限,防止链表(内存泄露链表)过长耗尽内存。此链表的尾节点始终是最旧的记录,新的记录(管理信息)以前插的方式插入链表头。如果链表长度已达到上限,但有新记录要加入链表,则将链表最旧的节点(链表尾节点)移出链表,将新记录的内容复制到这个节点上,再重新插入链表头。本实施例对标准c库(C标准库)的内存分配和内存回收函数做了封装,详细说明如下:内存分配:内存在申请分配的用下面的数据结构记录起来:其中stack(堆栈)可以通过backtrace(追溯)这个系统函数进行获取以及进行保存,或者对一般的函数进行改动,只需要修改其中的三个地址函数就可以拿过来利用。内存释放:在内存释放时,首先遍历管理链表,寻找出对应的内存管理结构体(数据结构体),然后对buf的地址进行判断,并进行对比,如果发现地址是相同的,则释放管理结构体链表(管理链表),释放分配的内存;如果遍历没有发现对应的地址,说明出现了内存泄露现象,则向上层应用发出告警信号,出现了内存泄露。上层应用在如下进行介绍。实现一个读取内存分配的接口:当链接了共享库的进程收到外部的指定命令(消息,信号等),可以调用读取记录的接口,此接口遍历没有释放内存的链表,将链表中结构体(上述的结构体)输出到串口上。清理的接口类似,当进程(调用进程)收到指定命令(控制命令)后,统一删除释放链表(管理链表)节点,清理内存溢出链表(内存泄漏链表)。设置告警(报警)功能:在这个库(共享库)里面提供一个给上层应用调用的可以设置内存泄露最大阀值的接口,如果超过这个阀值就立马向上层应用报警,这个实现可以定义一个变量来计算内存泄露的大小,内存分配时叠加其大小,释放成功就在这个全局变量上进行递减,时时监控内存的使用情况。定位内存泄露堆栈所在位置:内存泄露的堆栈记录下来,通过gdb调试找到对应的堆栈对应的模块以及模块对应的.c文件以及对应的哪行,迅速的定位出来哪里出现了内存泄露问题。本专利技术一个较佳的实施例,记录堆栈的深度可以自己自行定义,方便更深入的超找,一旦出现内存泄露是可以指定一个阀值或者一旦出现这个现象,共享库提供的一个接口马上进行报告,这就相当于智能上报。本专利技术一个较佳的实施例,创建内存管理结构,结构中保存函数调用本文档来自技高网...
内存泄漏的监测方法

【技术保护点】
一种内存泄漏的监测方法,其特征在于,应用于在路由器内存发生泄漏时报警,所述监测方法包括:对内存进行分配,在管理链表中用数据结构体记录内存分配的基本信息;释放内存,遍历所述管理链表,寻找所述内存对应的数据结构体;判断释放内存的地址与所述数据结构体记录的内存分配BUF地址是否相同;若相同则释放所述管理链表,释放分配的内存,若不同,则判断出现内存泄漏,发出报警信号。

【技术特征摘要】
1.一种内存泄漏的监测方法,其特征在于,应用于在路由器内存
发生泄漏时报警,所述监测方法包括:
对内存进行分配,在管理链表中用数据结构体记录内存分配的基
本信息;
释放内存,遍历所述管理链表,寻找所述内存对应的数据结构体;
判断释放内存的地址与所述数据结构体记录的内存分配BUF地
址是否相同;
若相同则释放所述管理链表,释放分配的内存,若不同,则判断
出现内存泄漏,发出报警信号。
2.根据权利要求1所述的内存泄漏的监测方法,其特征在于,所
述基本信息包括:链表和/或分配BUF时赋予的地址和/或分配内存的
数量和/或分配内存的次数和/或分配内存的函数入口和需要追溯的堆
栈的地址。
3.根据权利要求1所述的内存泄漏的监测方法,其特征在于,所
述方法还包括:
创建内存泄漏链表,保存内存泄漏的所述数据结构体于所述内存
泄露链表中;
记录和保存内存泄漏的管理信息。
4.根据权利要求3所述的内存泄漏的监测方法,其特征在于,所
述方法还包括:
创建调用进程,所述调用进程接收控制命令,调用读取记录所述
基本信息的接口;
将所述管理链表中的数据结构体输出至串口上。
5.根据权利要求3所述的内存泄漏的监测方法,其特征在于,所
述方法还...

【专利技术属性】
技术研发人员:刘华敏
申请(专利权)人:上海斐讯数据通信技术有限公司
类型:发明
国别省市:上海;31

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

1