首页 > 专利 > 上海斐讯数据通信技术有限公司 > 内存泄漏的监测方法专利详情

内存泄漏的监测方法   0    0

有效专利 查看PDF
专利申请流程有哪些步骤?
专利申请流程图
申请
申请号:指国家知识产权局受理一件专利申请时给予该专利申请的一个标示号码。唯一性原则。
申请日:提出专利申请之日。
2015-11-03
申请公布
申请公布指发明专利申请经初步审查合格后,自申请日(或优先权日)起18个月期满时的公布或根据申请人的请求提前进行的公布。
申请公布号:专利申请过程中,在尚未取得专利授权之前,国家专利局《专利公报》公开专利时的编号。
申请公布日:申请公开的日期,即在专利公报上予以公开的日期。
2016-02-17
授权
授权指对发明专利申请经实质审查没有发现驳回理由,授予发明专利权;或对实用新型或外观设计专利申请经初步审查没有发现驳回理由,授予实用新型专利权或外观设计专利权。
2018-06-29
预估到期
发明专利权的期限为二十年,实用新型专利权期限为十年,外观设计专利权期限为十五年,均自申请日起计算。专利届满后法律终止保护。
2035-11-03
基本信息
有效性 有效专利 专利类型 发明专利
申请号 CN201510736283.0 申请日 2015-11-03
公开/公告号 CN105260314B 公开/公告日 2018-06-29
授权日 2018-06-29 预估到期日 2035-11-03
申请年 2015年 公开/公告年 2018年
缴费截止日 2021-12-03
分类号 G06F11/36 主分类号 G06F11/36
是否联合申请 独立申请 文献类型号 B
独权数量 1 从权数量 7
权利要求数量 8 非专利引证数量 0
引用专利数量 4 被引证专利数量 0
非专利引证
引用专利 CN101587455A、CN1466057A、CN102866947A、US2013/0132699A1 被引证专利
专利权维持 2 专利申请国编码 CN
专利事件 事务标签 公开、实质审查、授权
申请人信息
申请人 第一申请人
专利权人 上海斐讯数据通信技术有限公司 当前专利权人 上海斐讯数据通信技术有限公司
发明人 刘华敏 第一发明人 刘华敏
地址 上海市松江区思贤路3666号 邮编 201616
申请人数量 1 发明人数量 1
申请人所在省 上海市 申请人所在市 上海市松江区
代理人信息
代理机构
专利代理机构是经省专利管理局审核,国家知识产权局批准设立,可以接受委托人的委托,在委托权限范围内以委托人的名义办理专利申请或其他专利事务的服务机构。
杭州千克知识产权代理有限公司 代理人
专利代理师是代理他人进行专利申请和办理其他专利事务,取得一定资格的人。
周希良
摘要
本发明涉及内存领域,尤其涉及一种内存泄漏的监测方法。一种内存泄漏的监测方法,应用于在路由器内存发生泄漏时报警,所述监测方法包括:对内存进行分配,在管理链表中用数据结构体记录内存分配的基本信息;释放内存,遍历所述管理链表,寻找所述内存对应的数据结构体;判断释放内存的地址与所述数据结构体记录的内存分配BUF地址是否相同;若相同则释放所述管理链表,释放分配的内存,若不同,则判断出现内存泄漏,发出报警信号。
  • 摘要附图
    内存泄漏的监测方法
  • 说明书附图:图1
    内存泄漏的监测方法
  • 说明书附图:图2
    内存泄漏的监测方法
法律状态
序号 法律状态公告日 法律状态 法律状态信息
1 2020-12-22 专利权的转移 登记生效日: 2020.12.09 专利权人由上海斐讯数据通信技术有限公司变更为湖州丰源农业装备制造有限公司 地址由201616 上海市松江区思贤路3666号变更为313028 浙江省湖州市八里店镇工业园区
2 2018-06-29 授权
3 2016-02-17 实质审查的生效 IPC(主分类): G06F 11/36 专利申请号: 201510736283.0 申请日: 2015.11.03
4 2016-01-20 公开
权利要求
权利要求书是申请文件最核心的部分,是申请人向国家申请保护他的发明创造及划定保护范围的文件。
1.一种内存泄漏的监测方法,其特征在于,应用于在路由器内存发生泄漏时报警,所述监测方法包括:
对内存进行分配,在管理链表中用数据结构体记录内存分配的基本信息;
释放内存,遍历所述管理链表,寻找所述内存对应的数据结构体;
判断释放内存的地址与所述数据结构体记录的内存分配BUF地址是否相同;
若相同则释放所述管理链表,释放分配的内存,若不同,则判断出现内存泄漏,发出报警信号;
创建内存泄漏链表,保存内存泄漏的所述数据结构体于所述内存泄漏链表中;记录和保存内存泄漏的管理信息;
提供一相对于所述内存泄漏链表的上层应用,所述上层应用调用所述内存泄漏链表的最大阈值,当内存泄漏超过所述最大阈值,则向所述上层应用报警。

2.根据权利要求1所述的内存泄漏的监测方法,其特征在于,所述基本信息包括:链表和/或分配BUF时赋予的地址和/或分配内存的数量和/或分配内存的次数和/或分配内存的函数入口和需要追溯的堆栈的地址。

3.根据权利要求1所述的内存泄漏的监测方法,其特征在于,所述方法还包括:创建调用进程,所述调用进程接收控制命令,调用读取记录所述基本信息的接口;将所述管理链表中的数据结构体输出至串口上。

4.根据权利要求1所述的内存泄漏的监测方法,其特征在于,所述方法还包括:创建调用进程,所述调用进程接收控制命令,所述调用进程根据所述控制命令同一删除所述管理链表的节点,并且清理内存泄漏链表。

5.根据权利要求1所述的内存泄漏的监测方法,其特征在于,所述方法还包括:所述最大阈值为变量,当分配内存时,叠加所述最大阈值,释放内存时,递减所述最大阈值。

6.根据权利要求1、3任意一个所述的内存泄漏的监测方法,其特征在于,所述方法还包括:
所述内存泄漏链表设有上限,当记录所述内存泄漏的管理信息时,将所述管理信息插入所述内存泄漏链表的链表头。

7.根据权利要求6所述的内存泄漏的监测方法,其特征在于,所述方法还包括:当到达所述内存泄漏链表上限时,移除所述内存泄漏链表的链表尾的记录后,将所述管理信息插入所述内存泄漏链表的链表头。

8.根据权利要求1所述的内存泄漏的监测方法,其特征在于,所述方法还包括:记录内存泄漏的堆栈,通过GDB调试确定定位所述堆栈。
说明书

技术领域

[0001] 本发明涉及内存领域,尤其涉及一种内存泄漏的监测方法。

背景技术

[0002] 内存泄露是软件开发中十分常见并且十分常见的错误跟踪起来相当困难。内存泄露引发的段错误轻则使软件功能失效,重则使设备CPU0等重启现象,所以快速的检测和快速的定位内存溢出的机制就十分重要。另外对于无屏的嵌入式设备(如路由器,交换机等)需要一种对于内存溢出错误的告警机制,因为这些设备没有屏幕显示错误,只有当调试人员连接串口、telnet查看、web页面登入客户端的时候才能看到设备的信息。现有的内存泄露检测方案只描述了如何检测内存泄露出现断错误或者设备重启时才去发现内存泄露,这样定位问题就比较慢,需要长时间拷机复现问题所在,效率比较低下,现有的简单检测方案在嵌入式设备上并不能达到定位问题。

发明内容

[0003] 针对现有技术中存在的问题,本发明能够在无屏的路由器嵌入式设备上能快速的检测定位内存溢出问题,并且将问题进行记录,方便开发人员的调试。
[0004] 本发明采用如下技术方案:
[0005] 一种内存泄漏的监测方法,应用于在路由器内存发生泄漏时报警,所述监测方法包括:
[0006] 对内存进行分配,在管理链表中用数据结构体记录内存分配的基本信息;
[0007] 释放内存,遍历所述管理链表,寻找所述内存对应的数据结构体;
[0008] 判断释放内存的地址与所述数据结构体记录的内存分配BUF地址是否相同;
[0009] 若相同则释放所述管理链表,释放分配的内存,若不同,则判断出现内存泄漏,发出报警信号。
[0010] 优选的,所述基本信息包括:链表和/或分配BUF时赋予的地址和/或分配内存的数量和/或分配内存的次数和/或分配内存的函数入口和需要追溯的堆栈的地址。
[0011] 优选的,所述方法还包括:
[0012] 创建内存泄漏链表,保存内存泄漏的所述数据结构体于所述内存泄露链表中;
[0013] 记录和保存内存泄漏的管理信息。
[0014] 优选的,所述方法还包括:
[0015] 创建调用进程,所述调用进程接收控制命令,调用读取记录所述基本信息的接口;
[0016] 将所述管理链表中的数据结构体输出至串口上。
[0017] 优选的,所述方法还包括:
[0018] 创建调用进程,所述调用进程接收控制命令,所述调用进程根据所述控制命令同一删除所述管理链表的节点,并且清理内存泄漏链表。
[0019] 优选的,所述方法中:
[0020] 提供一相对于所述内存泄漏链表的上层应用,所述上层应用调用所述内存泄漏链表的最大阈值,当内存泄漏超过所述最大阈值,则向所述上层应用报警。
[0021] 优选的,所述方法还包括:
[0022] 所述最大阈值为变量,当分配内存时,叠加所述最大阈值,释放内存时,递减所述最大阈值。
[0023] 优选的,所述方法还包括:
[0024] 所述内存泄漏链表设有上限,当记录所述内存泄漏的管理信息时,将所述管理信息插入所述内存泄漏链表的链表头。
[0025] 优选的,所述方法还包括:
[0026] 当到达所述内存泄漏链表上限时,移除所述内存泄漏链表的链表尾的记录后,将所述管理信息插入所述内存泄漏链表的链表头。
[0027] 优选的,所述方法还包括:
[0028] 记录内存泄漏的堆栈,通过GDB调试确定定位所述堆栈。
[0029] 本发明的有益效果是:
[0030] 本发明详细描述内存泄露的检测方法,内存泄露问题的定位机制和报警机制。能够对无屏幕的路由器进行内存泄漏的监测,能够实现智能化的监测。

实施方案

[0033] 需要说明的是,在不冲突的情况下,下述技术方案,技术特征之间可以相互组合。
[0034] 下面结合附图对本发明的具体实施方式作进一步的说明:
[0035] 本实施例可以实现在一般路由器上面,可以通过本发明中的技术方案,只要是linux平台都可以拿过来直接利用,适用性非常广泛,移植这套方案不需要做过多的改动,无需人为一直跟踪,只需要设置好值之后调用lib库的接口,就可以发出报警,提前预防内存泄露,避免造成后续工程量大了之后定位起来比较麻烦。
[0036] 本实施例首先生成了一个内存泄露检测的共享库,此共享库实现了如下功能:
[0037] 在共享库内实现一个管理链表和一个内存泄露链表,管理链表的每个节点都有一个记录的结构体(数据结构体),用于保存内存分配的基本信息。内存泄露链表用来管理所有出现内存泄露的管理信息,此链表设有上限,防止链表(内存泄露链表)过长耗尽内存。此链表的尾节点始终是最旧的记录,新的记录(管理信息)以前插的方式插入链表头。如果链表长度已达到上限,但有新记录要加入链表,则将链表最旧的节点(链表尾节点)移出链表,将新记录的内容复制到这个节点上,再重新插入链表头。
[0038] 本实施例对标准c库(C标准库)的内存分配和内存回收函数做了封装,详细说明如下:
[0039] 内存分配:内存在申请分配的用下面的数据结构记录起来:
[0040]
[0041]
[0042] 其中stack(堆栈)可以通过backtrace(追溯)这个系统函数进行获取以及进行保存,或者对一般的函数进行改动,只需要修改其中的三个地址函数就可以拿过来利用。
[0043] 内存释放:在内存释放时,首先遍历管理链表,寻找出对应的内存管理结构体(数据结构体),然后对buf的地址进行判断,并进行对比,如果发现地址是相同的,则释放管理结构体链表(管理链表),释放分配的内存;如果遍历没有发现对应的地址,说明出现了内存泄露现象,则向上层应用发出告警信号,出现了内存泄露。上层应用在如下进行介绍。
[0044] 实现一个读取内存分配的接口:当链接了共享库的进程收到外部的指定命令(消息,信号等),可以调用读取记录的接口,此接口遍历没有释放内存的链表,将链表中结构体(上述的结构体)输出到串口上。清理的接口类似,当进程(调用进程)收到指定命令(控制命令)后,统一删除释放链表(管理链表)节点,清理内存溢出链表(内存泄漏链表)。
[0045] 设置告警(报警)功能:在这个库(共享库)里面提供一个给上层应用调用的可以设置内存泄露最大阀值的接口,如果超过这个阀值就立马向上层应用报警,这个实现可以定义一个变量来计算内存泄露的大小,内存分配时叠加其大小,释放成功就在这个全局变量上进行递减,时时监控内存的使用情况。
[0046] 定位内存泄露堆栈所在位置:内存泄露的堆栈记录下来,通过gdb调试找到对应的堆栈对应的模块以及模块对应的.c文件以及对应的哪行,迅速的定位出来哪里出现了内存泄露问题。
[0047] 本发明一个较佳的实施例,记录堆栈的深度可以自己自行定义,方便更深入的超找,一旦出现内存泄露是可以指定一个阀值或者一旦出现这个现象,共享库提供的一个接口马上进行报告,这就相当于智能上报。
[0048] 本发明一个较佳的实施例,创建内存管理结构,结构中保存函数调用堆栈。当出现内存溢出时,开发人员只要调用相应接口打印出函数调用堆栈,通过gdb调试就可以找到是什么地方出现了内存泄露,而内存泄露肯定是出现在使用这块内存的时候。这样就可以快速的定位问题。
[0049] 本发明一个较佳的实施例,创建了内存链表(内存泄漏链表),所有出现内存泄露的内存管理结构都保存在这个链表上,能够对内存泄露进行记录和保存,此点改进尤其适合不能实时观察系统运行状态的嵌入式系统。
[0050] 本发明一个较佳的实施例,由于以上所有功能都是通过共享库的方式完成的,所以只要链接了共享库的进程在其各自的内存空间内都维护着本进程的内存泄露链表,这样可以针对某一个进程单独调试,而不需要打印出所有进程的内存溢出信息。另外使用共享库的另一个优点在于可以通过宏来打开和关闭所有进程的内存管理的打印信息,因为上述内存泄露管理打印信息都属于调试信息,往往只在开发版的过程当中以及内部测试才用得到,出厂的时候完全可以通过宏进行关闭。
[0051] 本发明一个较佳的实施例,分配内存的时候记录堆栈的地址,超过最大内存泄露阀值,就告警,之后就把没有释放内存的模块堆栈信息打印出来以及对应的库的名字打印出来,通过对应的库名字找到对应模块,之后再通过地址找到对应模块的第几行出现内存申请没有释放的地方在哪里,修正内存泄露的问题。
[0052] 通过说明和附图,给出了具体实施方式的特定结构的典型实施例,基于本发明精神,还可作其他的转换。尽管上述发明提出了现有的较佳实施例,然而,这些内容并不作为局限。
[0053] 对于本领域的技术人员而言,阅读上述说明后,各种变化和修正无疑将显而易见。因此,所附的权利要求书应看作是涵盖本发明的真实意图和范围的全部变化和修正。在权利要求书范围内任何和所有等价的范围与内容,都应认为仍属本发明的意图和范围内。

附图说明

[0031] 图1为本发明内存分配的流程图;
[0032] 图2为本发明中内存释放的流程图。
版权所有:盲专网 ©2023 zlpt.xyz  蜀ICP备2023003576号