CN107346266A - 基于VxWorks操作系统的内存分配信息跟踪方法及装置 - Google Patents
基于VxWorks操作系统的内存分配信息跟踪方法及装置 Download PDFInfo
- Publication number
- CN107346266A CN107346266A CN201710433988.4A CN201710433988A CN107346266A CN 107346266 A CN107346266 A CN 107346266A CN 201710433988 A CN201710433988 A CN 201710433988A CN 107346266 A CN107346266 A CN 107346266A
- Authority
- CN
- China
- Prior art keywords
- distribution
- memory
- information
- operating system
- task
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于VxWorks操作系统的内存分配信息跟踪方法及装置,涉及嵌入式操作系统领域。该方法包括以下步骤:编译VxWorks操作系统底层的分配函数、释放函数,接管VxWorks操作系统的内存分配接口、释放接口;将内存的特定区域预留出来,划分为若干分配信息块;调用分配内存时,记录分配的地址、字节数、时间戳、分配内存的任务,存储进分配信息块;释放内存的空间时,搜索到相应分配信息块,进行销毁,实现内存信息跟踪;统计内存的使用情况,若分配信息块的数量一直增加,有分配信息块一直没被销毁,推定对应的任务导致内存泄漏,锁定该任务,实现分配轨迹追踪。本发明对内存的泄漏进行精确跟踪和定位,从而解决内存泄漏的问题。
Description
技术领域
本发明涉及嵌入式操作系统领域,具体是涉及一种基于VxWorks操作系统的内存分配信息跟踪方法及装置。
背景技术
随着嵌入式设备的高速发展,嵌入式操作系统越来越广泛的被使用,其软件系统也越来越复杂,例如,VxWorks操作系统就是一种由风河公司开发的嵌入式操作系统。
对一台PON(Passive Optical Network,无源光网络)系统OLT(Optical LineTerminal,光线路终端)设备,常常需要存储数千个ONU(Optical Network Unit,光网络单元)的用户数据,系统的任务数也达到上百个。此时,系统的内存分配和释放将变得极为频繁,如果程序设计不合理,极有可能在系统运行过程中出现内存泄漏,危及嵌入式系统的稳定,长时间的内存泄漏将导致系统崩溃。
传统方法在应对内存泄漏的定位时,通常是通过对内存分配/释放函数的替换,在分配和释放时记录配置和释放信息,以便定位是否存在内存泄漏,但这种方法存在一些难以克服的问题:
1、需要对全部源码进行库编译,让跟踪函数链接到每个上层应用的库里;
2、如果malloc/free已经在模块内被替换,应用此方法,需要在模块内修改最底层的内存分配释放函数,否则无效;
3、只能跟踪最底层的malloc/free函数,无法跟踪上级调用,在很多情况下,难以定位问题。
发明内容
本发明的目的是为了克服上述背景技术的不足,提供一种基于VxWorks操作系统的内存分配信息跟踪方法及装置,对内存的泄漏进行精确跟踪和定位,从而解决内存泄漏的问题。
本发明提供一种基于VxWorks操作系统的内存分配信息跟踪方法,包括以下步骤:
A、编译VxWorks操作系统底层的分配函数、释放函数,接管VxWorks操作系统的内存分配接口、释放接口;
B、将内存的特定区域预留出来,划分为若干分配信息块;调用VxWorks操作系统的分配内存时,记录分配的地址、字节数、时间戳、分配内存的任务,存储进分配信息块;释放内存的空间时,搜索到相应分配信息块,进行销毁,实现内存信息跟踪;
C、统计内存的使用情况,如果分配信息块的数量一直增加,有分配信息块一直没有被销毁,推定该分配信息块对应的任务导致内存泄漏,锁定该任务,实现分配轨迹追踪。
在上述技术方案的基础上,步骤C中,统计内存的使用情况时,统计分配次数、释放次数、分配总的字节数、分配频率。
在上述技术方案的基础上,步骤C中,还包括以下步骤:如果发现内存中某个任务的分配异常,跟踪该任务的分配调用轨迹,定位内存分配的上层函数。
在上述技术方案的基础上,所述跟踪该任务的分配调用轨迹,定位内存分配的上层函数的过程为:调用VxWorks操作系统的任务栈空间跟踪功能,在应用层软件嵌套调用分配函数,从栈顶逐层跟踪,跟踪2~40层的分配上级调用层次,根据实际情况,分析出内存泄漏的泄漏点。
本发明还提供一种基于VxWorks操作系统的内存分配信息跟踪系统,该系统包括编译单元、内存信息跟踪单元、分配轨迹追踪单元,其中:
编译单元用于:编译VxWorks操作系统底层的分配函数、释放函数,接管VxWorks操作系统的内存分配接口、释放接口;
内存信息跟踪单元用于:将内存的特定区域预留出来,划分为若干分配信息块;调用VxWorks操作系统的分配内存时,记录分配的地址、字节数、时间戳、分配内存的任务信息,存储进分配信息块;释放内存的空间时,搜索到相应分配信息块,进行销毁,实现内存信息跟踪;
分配轨迹追踪单元用于:统计内存的使用情况,如果分配信息块的数量一直增加,有分配信息块一直没有被销毁,推定该分配信息块对应的任务导致内存泄漏,锁定该任务,实现分配轨迹追踪。
在上述技术方案的基础上,所述分配轨迹追踪单元统计内存的使用情况时,统计分配次数、释放次数、分配总的字节数、分配频率。
在上述技术方案的基础上,所述分配轨迹追踪单元如果发现内存中某个任务的分配异常,跟踪该任务的分配调用轨迹,定位内存分配的上层函数。
在上述技术方案的基础上,所述分配轨迹追踪单元调用VxWorks操作系统的任务栈空间跟踪功能,在应用层软件嵌套调用分配函数,从栈顶逐层跟踪,跟踪2~40层的分配上级调用层次,根据实际情况,分析出内存泄漏的泄漏点。
与现有技术相比,本发明的优点如下:
(1)本发明编译VxWorks操作系统底层的分配函数、释放函数,接管VxWorks操作系统的内存分配接口、释放接口;将内存的特定区域预留出来,划分为若干分配信息块;调用VxWorks操作系统的分配内存时,记录分配的地址、字节数、时间戳、分配内存的任务,存储进分配信息块;释放内存的空间时,搜索到相应分配信息块,进行销毁,实现内存信息跟踪;统计内存的使用情况,如果分配信息块的数量一直增加,有分配信息块一直没有被销毁,推定该分配信息块对应的任务导致内存泄漏,锁定该任务,实现分配轨迹追踪。本发明不需要被检测模块源码修改和替换,增加内存跟踪模块的库之后,原代码和库无需任何修改,就能够被跟踪和检查。在需要跟踪内存分配/释放信息时,在内存反复使用过程中,对内存的泄漏进行精确跟踪和定位,从而解决内存泄漏的问题。
(2)如果发现内存中某个任务的分配异常,跟踪该任务的分配调用轨迹,定位内存分配的上层函数。本发明能够跟踪调用内存分配的任务信息。
(3)本发明调用VxWorks操作系统的任务栈空间跟踪功能,在应用层软件嵌套调用分配函数,从栈顶逐层跟踪,跟踪2~40层的分配上级调用层次,根据实际情况,分析出内存泄漏的泄漏点。本发明还能够跟踪调用分配栈轨迹,记录内存分配调用的整个过程。
附图说明
图1是本发明实施例中基于VxWorks操作系统的内存分配信息跟踪方法的流程图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步的详细描述。
参见图1所示,本发明实施例提供一种基于VxWorks操作系统的内存分配信息跟踪方法,包括以下步骤:
A、编译VxWorks操作系统底层的分配函数、释放函数,接管VxWorks操作系统的内存分配接口、释放接口;VxWorks操作系统内其他模块无需做修改;
B、将内存的特定区域预留出来,划分为若干分配信息块;调用VxWorks操作系统的分配内存时,记录分配的地址、字节数、时间戳、分配内存的任务,存储进分配信息块;释放内存的空间时,搜索到相应分配信息块,进行销毁,实现内存信息跟踪;
C、统计内存的使用情况,如果分配信息块的数量一直增加,有分配信息块一直没有被销毁,推定该分配信息块对应的任务导致内存泄漏,锁定该任务,实现分配轨迹追踪。
步骤C中,统计内存的使用情况时,统计分配次数(malloc_count)、释放次数(free_count)、分配总的字节数(malloc_bytes)、分配频率(malloc_freq)。
步骤C中,还包括以下步骤:如果发现内存中某个任务的分配异常,例如:出现频繁的大量malloc调用和字节数,跟踪该任务的分配调用轨迹,定位内存分配的上层函数。
跟踪该任务的分配调用轨迹,定位内存分配的上层函数的过程为:调用VxWorks操作系统的任务栈空间跟踪功能,在应用层软件嵌套调用分配函数,从栈顶逐层跟踪,跟踪2~40层的分配上级调用层次,根据实际情况,分析出内存泄漏的泄漏点。
本发明实施例还提供一种基于VxWorks操作系统的内存分配信息跟踪系统,该系统包括编译单元、内存信息跟踪单元、分配轨迹追踪单元,其中:
编译单元用于:编译VxWorks操作系统底层的分配函数、释放函数,接管VxWorks操作系统的内存分配接口、释放接口;
内存信息跟踪单元用于:将内存的特定区域预留出来,划分为若干分配信息块;调用VxWorks操作系统的分配内存时,记录分配的地址、字节数、时间戳、分配内存的任务信息,存储进分配信息块;释放内存的空间时,搜索到相应分配信息块,进行销毁,实现内存信息跟踪;
分配轨迹追踪单元用于:统计内存的使用情况,如果分配信息块的数量一直增加,有分配信息块一直没有被销毁,推定该分配信息块对应的任务导致内存泄漏,锁定该任务,实现分配轨迹追踪。
分配轨迹追踪单元统计内存的使用情况时,统计分配次数(malloc_count)、释放次数(free_count)、分配总的字节数(malloc_bytes)、分配频率(malloc_freq)。
分配轨迹追踪单元如果发现内存中某个任务的分配异常,例如:出现频繁的大量malloc调用和字节数,跟踪该任务的分配调用轨迹,定位内存分配的上层函数:分配轨迹追踪单元调用VxWorks操作系统的任务栈空间跟踪功能,在应用层软件嵌套调用分配函数,从栈顶逐层跟踪,跟踪2~40层的分配上级调用层次,根据实际情况,分析出内存泄漏的泄漏点。
下面举例说明。
首先,编译VxWorks操作系统底层的分配函数、释放函数,接管VxWorks操作系统的内存分配接口、释放接口;VxWorks操作系统内其他模块无需做修改;
然后,使能内存分配信息跟踪功能:
在命令行中调用命令set malloc_debug enable,开始记录VxWorks操作系统中各任务的内存分配/释放,实现内存信息跟踪。
查看内存分配统计信息:调用命令show malloc_debug statis;
继续查看内存分配统计情况:show malloc_debug detail;
Show malloc_debug detail命令显示的每一条记录为一次内存的分配记录,通常内存分配/释放配对出现,在一个稳定的VxWorks操作系统中,分配的记录数目基本保持稳定,不会大幅增加,如果分配记录一直增加,VxWorks操作系统可能存在内存泄漏,VxWorks操作系统将在内存耗尽后崩溃或出现异常。以此案为例,tIGMPv3任务有一条存在51秒的记录。
追踪任务的分配轨迹:
当发现出现异常的分配记录时,可以通过追踪分配轨迹定位内存分配的上层函数,以上图中的tIGMPv3任务为例,追踪此任务的上层分配轨迹,层数为4(缺省)。
通过跟踪栈任务,可以定位到上层调用内存分配的函数为igmp_join_add_group。
本领域的技术人员可以对本发明实施例进行各种修改和变型,倘若这些修改和变型在本发明权利要求及其等同技术的范围之内,则这些修改和变型也在本发明的保护范围之内。
说明书中未详细描述的内容为本领域技术人员公知的现有技术。
Claims (8)
1.一种基于VxWorks操作系统的内存分配信息跟踪方法,其特征在于,包括以下步骤:
A、编译VxWorks操作系统底层的分配函数、释放函数,接管VxWorks操作系统的内存分配接口、释放接口;
B、将内存的特定区域预留出来,划分为若干分配信息块;调用VxWorks操作系统的分配内存时,记录分配的地址、字节数、时间戳、分配内存的任务,存储进分配信息块;释放内存的空间时,搜索到相应分配信息块,进行销毁,实现内存信息跟踪;
C、统计内存的使用情况,如果分配信息块的数量一直增加,有分配信息块一直没有被销毁,推定该分配信息块对应的任务导致内存泄漏,锁定该任务,实现分配轨迹追踪。
2.如权利要求1所述的基于VxWorks操作系统的内存分配信息跟踪方法,其特征在于:步骤C中,统计内存的使用情况时,统计分配次数、释放次数、分配总的字节数、分配频率。
3.如权利要求2所述的基于VxWorks操作系统的内存分配信息跟踪方法,其特征在于:步骤C中,还包括以下步骤:如果发现内存中某个任务的分配异常,跟踪该任务的分配调用轨迹,定位内存分配的上层函数。
4.如权利要求3所述的基于VxWorks操作系统的内存分配信息跟踪方法,其特征在于:所述跟踪该任务的分配调用轨迹,定位内存分配的上层函数的过程为:调用VxWorks操作系统的任务栈空间跟踪功能,在应用层软件嵌套调用分配函数,从栈顶逐层跟踪,跟踪2~40层的分配上级调用层次,根据实际情况,分析出内存泄漏的泄漏点。
5.一种基于VxWorks操作系统的内存分配信息跟踪系统,其特征在于:该系统包括编译单元、内存信息跟踪单元、分配轨迹追踪单元,其中:
编译单元用于:编译VxWorks操作系统底层的分配函数、释放函数,接管VxWorks操作系统的内存分配接口、释放接口;
内存信息跟踪单元用于:将内存的特定区域预留出来,划分为若干分配信息块;调用VxWorks操作系统的分配内存时,记录分配的地址、字节数、时间戳、分配内存的任务信息,存储进分配信息块;释放内存的空间时,搜索到相应分配信息块,进行销毁,实现内存信息跟踪;
分配轨迹追踪单元用于:统计内存的使用情况,如果分配信息块的数量一直增加,有分配信息块一直没有被销毁,推定该分配信息块对应的任务导致内存泄漏,锁定该任务,实现分配轨迹追踪。
6.如权利要求5所述的基于VxWorks操作系统的内存分配信息跟踪系统,其特征在于:所述分配轨迹追踪单元统计内存的使用情况时,统计分配次数、释放次数、分配总的字节数、分配频率。
7.如权利要求6所述的基于VxWorks操作系统的内存分配信息跟踪系统,其特征在于:所述分配轨迹追踪单元如果发现内存中某个任务的分配异常,跟踪该任务的分配调用轨迹,定位内存分配的上层函数。
8.如权利要求7所述的基于VxWorks操作系统的内存分配信息跟踪系统,其特征在于:所述分配轨迹追踪单元调用VxWorks操作系统的任务栈空间跟踪功能,在应用层软件嵌套调用分配函数,从栈顶逐层跟踪,跟踪2~40层的分配上级调用层次,根据实际情况,分析出内存泄漏的泄漏点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710433988.4A CN107346266A (zh) | 2017-06-09 | 2017-06-09 | 基于VxWorks操作系统的内存分配信息跟踪方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710433988.4A CN107346266A (zh) | 2017-06-09 | 2017-06-09 | 基于VxWorks操作系统的内存分配信息跟踪方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107346266A true CN107346266A (zh) | 2017-11-14 |
Family
ID=60253320
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710433988.4A Pending CN107346266A (zh) | 2017-06-09 | 2017-06-09 | 基于VxWorks操作系统的内存分配信息跟踪方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107346266A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110781075A (zh) * | 2019-09-19 | 2020-02-11 | 深圳震有科技股份有限公司 | 一种内存泄漏的检测方法、装置、系统及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101587455A (zh) * | 2008-12-11 | 2009-11-25 | 南京南瑞继保电气有限公司 | 一种用于vxWorks操作系统检查内存泄漏的方法 |
CN103268287A (zh) * | 2013-06-05 | 2013-08-28 | 福州瑞芯微电子有限公司 | 检测内存泄露的方法与装置 |
CN103455424A (zh) * | 2013-09-18 | 2013-12-18 | 哈尔滨工业大学 | 基于VxWorks操作系统的动态内存泄漏检测方法及装置 |
CN104239192A (zh) * | 2013-06-21 | 2014-12-24 | 中兴通讯股份有限公司 | 内存监控处理方法及装置 |
CN104965779A (zh) * | 2015-05-22 | 2015-10-07 | 浪潮电子信息产业股份有限公司 | 一种基于PoolMon的内存泄露检测和定位的方法及装置 |
CN105204996A (zh) * | 2015-09-24 | 2015-12-30 | 努比亚技术有限公司 | 内存泄露检测装置及方法、终端 |
CN105373479A (zh) * | 2015-12-14 | 2016-03-02 | 厦门美图移动科技有限公司 | 一种内存泄露的自动化测试方法、装置及移动终端 |
-
2017
- 2017-06-09 CN CN201710433988.4A patent/CN107346266A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101587455A (zh) * | 2008-12-11 | 2009-11-25 | 南京南瑞继保电气有限公司 | 一种用于vxWorks操作系统检查内存泄漏的方法 |
CN103268287A (zh) * | 2013-06-05 | 2013-08-28 | 福州瑞芯微电子有限公司 | 检测内存泄露的方法与装置 |
CN104239192A (zh) * | 2013-06-21 | 2014-12-24 | 中兴通讯股份有限公司 | 内存监控处理方法及装置 |
CN103455424A (zh) * | 2013-09-18 | 2013-12-18 | 哈尔滨工业大学 | 基于VxWorks操作系统的动态内存泄漏检测方法及装置 |
CN104965779A (zh) * | 2015-05-22 | 2015-10-07 | 浪潮电子信息产业股份有限公司 | 一种基于PoolMon的内存泄露检测和定位的方法及装置 |
CN105204996A (zh) * | 2015-09-24 | 2015-12-30 | 努比亚技术有限公司 | 内存泄露检测装置及方法、终端 |
CN105373479A (zh) * | 2015-12-14 | 2016-03-02 | 厦门美图移动科技有限公司 | 一种内存泄露的自动化测试方法、装置及移动终端 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110781075A (zh) * | 2019-09-19 | 2020-02-11 | 深圳震有科技股份有限公司 | 一种内存泄漏的检测方法、装置、系统及存储介质 |
CN110781075B (zh) * | 2019-09-19 | 2022-08-30 | 深圳震有科技股份有限公司 | 一种内存泄漏的检测方法、装置、系统及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102099544B1 (ko) | 스트리밍 데이터의 분배 처리 방법 및 디바이스 | |
US8429620B2 (en) | Memory leak diagnosis | |
CN103455424B (zh) | 基于VxWorks操作系统的动态内存泄漏检测方法及装置 | |
CN102567399B (zh) | 一种访问数据库的方法和装置 | |
CN102760080A (zh) | 一种内存管理的方法和装置 | |
CN105912601A (zh) | 能量管理系统分布式实时内存数据库的分区存储方法 | |
CN102693283A (zh) | 一种嵌入式系统的数据分区存储方法及系统引导启动方法 | |
CN110413521A (zh) | 一种堆内存的写越界检测方法和装置 | |
CN101198937A (zh) | 安全存储管理系统和方法 | |
CN102752672A (zh) | 光纤配线方法、设备及系统 | |
CN101763415B (zh) | 一种数据库的b树索引的生成方法及装置 | |
CN111324450A (zh) | 一种基于lte协议栈的内存池泄露的方法及其系统 | |
CN100570568C (zh) | 用于实时操作系统的定时方法和系统 | |
CN103309796A (zh) | 一种组件对象模型对象的监控方法和装置 | |
CN110493670A (zh) | 一种光缆中断判定方法及装置 | |
CN107346266A (zh) | 基于VxWorks操作系统的内存分配信息跟踪方法及装置 | |
CN106326014A (zh) | 一种资源访问方法及装置 | |
CN104951370B (zh) | 一种内存管理方法及装置 | |
CN102945163A (zh) | 一种用于嵌入式系统的信号槽结构 | |
CN104683148B (zh) | 一种统一端口系统及其访问逻辑端口的方法 | |
CN101621396A (zh) | 单板自动管理装置及方法 | |
CN101887456A (zh) | 一种数据迁移系统和方法 | |
CN106484778A (zh) | 基于soa的物料分发方法及物料分发装置 | |
CN103365716A (zh) | 业务操作任务中的数据跟踪方法、装置及主机 | |
CN102664754B (zh) | 一种更新端口索引的方法、设备以及多设备系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171114 |