CN105260314B - 内存泄漏的监测方法 - Google Patents

内存泄漏的监测方法 Download PDF

Info

Publication number
CN105260314B
CN105260314B CN201510736283.0A CN201510736283A CN105260314B CN 105260314 B CN105260314 B CN 105260314B CN 201510736283 A CN201510736283 A CN 201510736283A CN 105260314 B CN105260314 B CN 105260314B
Authority
CN
China
Prior art keywords
memory
chained list
memory overflow
overflow
monitoring method
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.)
Active
Application number
CN201510736283.0A
Other languages
English (en)
Other versions
CN105260314A (zh
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.)
Huzhou Yinglie Intellectual Property Operation Co ltd
Original Assignee
Shanghai Feixun Data Communication 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 Shanghai Feixun Data Communication Technology Co Ltd filed Critical Shanghai Feixun Data Communication Technology Co Ltd
Priority to CN201510736283.0A priority Critical patent/CN105260314B/zh
Publication of CN105260314A publication Critical patent/CN105260314A/zh
Application granted granted Critical
Publication of CN105260314B publication Critical patent/CN105260314B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

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

Description

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

Claims (8)

1.一种内存泄漏的监测方法,其特征在于,应用于在路由器内存发生泄漏时报警,所述监测方法包括:
对内存进行分配,在管理链表中用数据结构体记录内存分配的基本信息;
释放内存,遍历所述管理链表,寻找所述内存对应的数据结构体;
判断释放内存的地址与所述数据结构体记录的内存分配BUF地址是否相同;
若相同则释放所述管理链表,释放分配的内存,若不同,则判断出现内存泄漏,发出报警信号;
创建内存泄漏链表,保存内存泄漏的所述数据结构体于所述内存泄漏链表中;记录和保存内存泄漏的管理信息;
提供一相对于所述内存泄漏链表的上层应用,所述上层应用调用所述内存泄漏链表的最大阈值,当内存泄漏超过所述最大阈值,则向所述上层应用报警。
2.根据权利要求1所述的内存泄漏的监测方法,其特征在于,所述基本信息包括:链表和/或分配BUF时赋予的地址和/或分配内存的数量和/或分配内存的次数和/或分配内存的函数入口和需要追溯的堆栈的地址。
3.根据权利要求1所述的内存泄漏的监测方法,其特征在于,所述方法还包括:创建调用进程,所述调用进程接收控制命令,调用读取记录所述基本信息的接口;将所述管理链表中的数据结构体输出至串口上。
4.根据权利要求1所述的内存泄漏的监测方法,其特征在于,所述方法还包括:创建调用进程,所述调用进程接收控制命令,所述调用进程根据所述控制命令同一删除所述管理链表的节点,并且清理内存泄漏链表。
5.根据权利要求1所述的内存泄漏的监测方法,其特征在于,所述方法还包括:所述最大阈值为变量,当分配内存时,叠加所述最大阈值,释放内存时,递减所述最大阈值。
6.根据权利要求1、3任意一个所述的内存泄漏的监测方法,其特征在于,所述方法还包括:
所述内存泄漏链表设有上限,当记录所述内存泄漏的管理信息时,将所述管理信息插入所述内存泄漏链表的链表头。
7.根据权利要求6所述的内存泄漏的监测方法,其特征在于,所述方法还包括:当到达所述内存泄漏链表上限时,移除所述内存泄漏链表的链表尾的记录后,将所述管理信息插入所述内存泄漏链表的链表头。
8.根据权利要求1所述的内存泄漏的监测方法,其特征在于,所述方法还包括:记录内存泄漏的堆栈,通过GDB调试确定定位所述堆栈。
CN201510736283.0A 2015-11-03 2015-11-03 内存泄漏的监测方法 Active CN105260314B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510736283.0A CN105260314B (zh) 2015-11-03 2015-11-03 内存泄漏的监测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510736283.0A CN105260314B (zh) 2015-11-03 2015-11-03 内存泄漏的监测方法

Publications (2)

Publication Number Publication Date
CN105260314A CN105260314A (zh) 2016-01-20
CN105260314B true CN105260314B (zh) 2018-06-29

Family

ID=55100014

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510736283.0A Active CN105260314B (zh) 2015-11-03 2015-11-03 内存泄漏的监测方法

Country Status (1)

Country Link
CN (1) CN105260314B (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105791300B (zh) * 2016-03-23 2018-10-02 东北大学 基于追踪痕迹重要性评估的单包溯源方法
CN106383743B (zh) * 2016-09-27 2020-04-17 腾讯科技(深圳)有限公司 业务处理方法及系统
CN106844207A (zh) * 2017-01-17 2017-06-13 上海斐讯数据通信技术有限公司 一种诊断内存泄漏的方法及设备
CN107066390B (zh) * 2017-04-24 2020-01-17 许继集团有限公司 一种动态内存泄漏检测方法及系统
CN107451054A (zh) * 2017-07-26 2017-12-08 武汉虹信通信技术有限责任公司 一种用于linux环境中的内存池调试方法
CN107506285A (zh) * 2017-09-01 2017-12-22 郑州云海信息技术有限公司 一种snmp监测方法、服务器以及snmp监测系统
CN107783908B (zh) * 2017-11-07 2020-12-25 晶晨半导体(上海)股份有限公司 一种基于Linux内核内存泄露的检测方法
CN108182146B (zh) * 2017-12-27 2021-08-24 北京奇艺世纪科技有限公司 一种内存泄漏的检测方法及系统
CN109933525A (zh) * 2019-02-22 2019-06-25 深圳市吉祥腾达科技有限公司 一种通用的内存泄露检测方法
CN110727585B (zh) * 2019-09-11 2023-07-21 锐捷网络股份有限公司 内存泄漏检测方法、装置、电子设备及可读存储介质
CN111858317A (zh) * 2020-06-30 2020-10-30 北京金山云网络技术有限公司 内存泄漏的检测方法和装置
CN112199195B (zh) * 2020-10-16 2023-10-27 新华三信息安全技术有限公司 进程资源处理方法及装置
CN112631941B (zh) * 2020-12-31 2022-04-19 广州鲁邦通物联网科技股份有限公司 定位linux内核slub内存泄漏的方法和系统
CN115220970B (zh) * 2021-12-10 2023-09-08 广州汽车集团股份有限公司 一种定位内存泄漏方法、装置、计算机设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1466057A (zh) * 2002-06-20 2004-01-07 华为技术有限公司 一种软件内存泄露的检查方法
CN101587455A (zh) * 2008-12-11 2009-11-25 南京南瑞继保电气有限公司 一种用于vxWorks操作系统检查内存泄漏的方法
CN102866947A (zh) * 2012-08-29 2013-01-09 深圳市共进电子股份有限公司 一种Linux内核内存泄漏的检测方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8626993B2 (en) * 2011-11-18 2014-01-07 Apple Inc. Method for tracking memory usages of a data processing system

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1466057A (zh) * 2002-06-20 2004-01-07 华为技术有限公司 一种软件内存泄露的检查方法
CN101587455A (zh) * 2008-12-11 2009-11-25 南京南瑞继保电气有限公司 一种用于vxWorks操作系统检查内存泄漏的方法
CN102866947A (zh) * 2012-08-29 2013-01-09 深圳市共进电子股份有限公司 一种Linux内核内存泄漏的检测方法

Also Published As

Publication number Publication date
CN105260314A (zh) 2016-01-20

Similar Documents

Publication Publication Date Title
CN105260314B (zh) 内存泄漏的监测方法
CN102999716B (zh) 虚拟机器监控系统及方法
CN107104824B (zh) 一种网络拓扑确定方法和装置
US10191789B2 (en) Tracing system operations across remote procedure linkages to identify request originators
CN102446259B (zh) 组件访问控制方法及电子设备
JP6441803B2 (ja) マルチクライアント・アーキテクチャでのデータ・ログ管理
CN104951395A (zh) 一种嵌入式系统调试信息处理方法及装置
CN106844793A (zh) 实例服务的管理方法、装置及系统
CN108093207A (zh) 一种数据存储、获取方法及装置
CN108769207B (zh) 一种云平台资源监控方法和系统
CN102354296A (zh) 一种可扩展监控资源的监控系统和方法
CN103699835A (zh) 一种面向Android系统资源的访问控制方法
CN113849266A (zh) 多Kubernetes集群的业务部署方法及装置
CN110519224B (zh) 一种虚拟化环境中智能生成网络防护策略的方法和设备
CN103617129A (zh) 一种内存处理的方法及装置
CN114625535A (zh) 多Kubernetes集群的业务部署方法及装置
CN114297630A (zh) 恶意数据的检测方法、装置、存储介质及处理器
CN103810038A (zh) 一种ha集群中虚拟机存储文件迁移方法及其装置
CN113794696A (zh) 一种基于因果模型的网络安全信息处理方法和系统
CN110321199B (zh) 一种共用数据变更的通知方法、装置、电子设备及介质
CN107479827A (zh) 一种基于io和元数据分离的混合存储系统实现方法
CN102868747B (zh) 资源信息管理方法和资源信息管理装置
CN108259214B (zh) 一种配置命令管理方法、装置和机器可读存储介质
CN115567258B (zh) 网络安全态势感知方法、系统、电子设备及存储介质
CN115150253B (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
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20201209

Address after: 313028 Industrial Park, balidian Town, Huzhou City, Zhejiang Province

Patentee after: HUZHOU FENGYUAN AGRICULTURAL EQUIPMENT MANUFACTURE Co.,Ltd.

Address before: 201616 No. 3666 Sixian Road, Songjiang District, Shanghai

Patentee before: Phicomm (Shanghai) Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20230105

Address after: 313000 room 1019, Xintiandi commercial office, Yishan street, Wuxing District, Huzhou, Zhejiang, China

Patentee after: Huzhou YingLie Intellectual Property Operation Co.,Ltd.

Address before: 313028 Industrial Park, balidian Town, Huzhou City, Zhejiang Province

Patentee before: HUZHOU FENGYUAN AGRICULTURAL EQUIPMENT MANUFACTURE Co.,Ltd.