一种内存泄露监控方法、内存泄露检测方法及相应装置制造方法及图纸

技术编号:31846059 阅读:8 留言:0更新日期:2022-01-12 13:27
本申请提供一种内存泄露监控方法、内存泄露检测方法及相应装置,该方法包括:在待检测程序通过预加载机制调用内存监控动态库时,拦截获取待检测程序的内存操作信息,内存监控动态库中的内存分配函数和内存释放函数是被重写过的;向服务器发送待检测程序的内存操作信息。在上述的实现过程中,通过在待检测程序通过预加载机制调用内存监控动态库时,拦截获取待检测程序的内存操作信息,并向服务器发送待检测程序的内存操作信息,从而避免了在终端设备上执行多余的存储、查询、检索和符号解析等复杂处理操作,从而在实现内存泄露监测和检测的同时,极大地降低了对待检测程序本身执行的影响。影响。影响。

【技术实现步骤摘要】
一种内存泄露监控方法、内存泄露检测方法及相应装置


[0001]本申请涉及计算机内存管理、内存泄露监控和内存泄露检测的
,具体而言,涉及一种内存泄露监控方法、内存泄露检测方法及相应装置。

技术介绍

[0002]内存泄露(Memory Leak),又被称为内存泄漏,是在计算机科学中的一种资源泄漏,内存泄漏并非指内存在物理上的消失,而是应用程序在使用完之后未被释放,导致这段内存空间无法再被程序利用,从而造成了内存的浪费。内存泄漏在通常情况下只能由获得程序源代码的程序员才能分析出来。
[0003]目前,主流的内存泄漏检测方法有静态代码分析和动态代码分析。静态代码分析大部分情况下是指在程序的编译阶段借助编译器等工具分析进程的源代码,检测出可能存在的泄露点。动态代码分析是在待检测程序运行时对程序的内存分配、释放进行分析,通常采用函数重写、代码插桩的方式收集程序的内存分配释放信息,再进一步分析进程是否发生内存泄露。
[0004]在具体实践过程中发现,这两种方法均对待检测程序本身执行有较大影响,以动态代码分析为例,动态代码分析通常需要程序手动链接到分析工具的库或修改程序的本身的代码去调用指定的申请释放、初始化接口等。也就是说,目前的内存泄漏检测方法在实现内存泄露监测和检测的同时,对待检测程序本身执行有较大影响。

技术实现思路

[0005]本申请实施例的目的在于提供一种内存泄露监控方法、内存泄露检测方法及相应装置,用于改善在实现内存泄露监测和检测的同时对待检测程序本身执行有较大影响的问题。
>[0006]本申请实施例提供了一种内存泄露监控方法,应用于终端设备,包括:在待检测程序通过预加载机制调用内存监控动态库时,拦截获取待检测程序的内存操作信息,内存监控动态库中的内存分配函数和内存释放函数是被重写过的;向服务器发送待检测程序的内存操作信息。在上述的实现过程中,通过在待检测程序通过预加载机制调用内存监控动态库时,拦截获取待检测程序的内存操作信息,并向服务器发送待检测程序的内存操作信息,从而避免了在终端设备上执行多余的存储、查询、检索和符号解析等复杂处理操作,从而在实现内存泄露监测和检测的同时,极大地降低了对待检测程序本身执行的影响。
[0007]可选地,在本申请实施例中,内存操作信息包括:内存分配信息和内存释放信息;向服务器发送待检测程序的内存操作信息,包括:通过共享队列向服务器发送内存分配信息和内存释放信息。在上述的实现过程中,通过共享队列向服务器发送内存分配信息和内存释放信息,使得服务器可以接收内存分配信息和内存释放信息,从而提高了服务器与终端设备之间的通信效率。
[0008]可选地,在本申请实施例中,在通过共享队列向服务器发送内存分配信息和内存
释放信息之前,还包括:判断待检测程序是否满足预设条件,预设条件是在监控名单列表中且首次调用内存监控动态库;若是,则初始化共享队列。在上述的实现过程中,通过在待检测程序是在监控名单列表中且首次调用内存监控动态库的情况下,才初始化共享队列,该监控名单列表(又被称为白名单)是提供给用户自主配置需要检测的进程的配置文件,从而实现对指定应用程序进行内存监控和内存检测的功能。
[0009]可选地,在本申请实施例中,内存分配信息包括:分配内存大小、分配返回地址、栈回溯地址、进程ID信息;内存释放信息包括:释放内存地址、栈回溯地址、进程ID信息。
[0010]本申请实施例还提供了一种内存泄露检测方法,应用于服务器,包括:接收终端设备发送的待检测程序的内存操作信息,待检测程序的内存操作信息是在待检测程序通过预加载机制调用内存监控动态库时拦截获取的,内存监控动态库中的内存分配函数和内存释放函数是被重写过的;将待检测程序的内存操作信息进行解析并存储在哈希链表中。在上述的实现过程中,相比于只提供短期内存泄露检测,在获得检测报告之后就退出的方式来说,使用服务器来接收和分析内存操作信息,使得服务器可以对长期运行的服务进程(例如守护进程等)进行持续的监控,从而达到提供持续的内存泄露监控和检测的效果。
[0011]可选地,在本申请实施例中,将待检测程序的内存操作信息进行解析并存储在哈希链表中,包括:从内存操作信息中解析出栈回溯地址,并根据栈回溯地址计算出哈希值;以哈希值为节点标识,将内存操作信息存储或者更新在哈希链表中。
[0012]可选地,在本申请实施例中,还包括:获取命令终端程序发送的内存查看命令请求;根据内存查看命令请求向命令终端程序发送内存泄露的检测结果,以使命令终端程序输出内存泄露的检测结果。
[0013]本申请实施例还提供了一种内存泄露监控装置,应用于终端设备,包括:内存操作拦截模块,用于在待检测程序通过预加载机制调用内存监控动态库时,拦截获取待检测程序的内存操作信息,内存监控动态库中的内存分配函数和内存释放函数是被重写过的;操作信息发送模块,用于向服务器发送待检测程序的内存操作信息。
[0014]可选地,在本申请实施例中,内存操作信息包括:内存分配信息和内存释放信息;操作信息发送模块,包括:内存信息发送模块,用于通过共享队列向服务器发送内存分配信息和内存释放信息。
[0015]可选地,在本申请实施例中,内存泄露监控装置,还包括:检测程序判断模块,用于判断待检测程序是否满足预设条件,预设条件是在监控名单列表中且首次调用内存监控动态库;环形队列初始化模块,用于若待检测程序满足预设条件,则初始化共享队列。可选地,在本申请实施例中,内存分配信息包括:分配内存大小、分配返回地址、栈回溯地址、进程ID信息;内存释放信息包括:释放内存地址、栈回溯地址、进程ID信息。
[0016]本申请实施例还提供了一种内存泄露检测装置,应用于服务器,包括:操作信息接收模块,用于接收终端设备发送的待检测程序的内存操作信息,待检测程序的内存操作信息是在待检测程序通过预加载机制调用内存监控动态库时拦截获取的,内存监控动态库中的内存分配函数和内存释放函数是被重写过的;操作信息存储模块,用于将待检测程序的内存操作信息进行解析并存储在哈希链表中。
[0017]可选地,在本申请实施例中,操作信息存储模块,包括:节点哈希值计算模块,用于从内存操作信息中解析出栈回溯地址,并根据栈回溯地址计算出哈希值;元素节点存储模
块,用于以哈希值为节点标识,将内存操作信息存储或者更新在哈希链表中。
[0018]可选地,在本申请实施例中,内存泄露检测装置,还包括:查看命令获取模块,用于获取命令终端程序发送的内存查看命令请求;检测结果获得模块,用于根据内存查看命令请求向命令终端程序发送内存泄露的检测结果,以使命令终端程序输出内存泄露的检测结果。
[0019]本申请实施例还提供了一种电子设备,包括:处理器和存储器,存储器存储有处理器可执行的机器可读指令,机器可读指令被处理器执行时执行如上面描述的方法。
[0020]本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如上面描述本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种内存泄露监控方法,其特征在于,应用于终端设备,包括:在待检测程序通过预加载机制调用内存监控动态库时,拦截获取所述待检测程序的内存操作信息,所述内存监控动态库中的内存分配函数和内存释放函数是被重写过的;向服务器发送所述待检测程序的内存操作信息。2.根据权利要求1所述的方法,其特征在于,所述内存操作信息包括:内存分配信息和内存释放信息;所述向服务器发送所述待检测程序的内存操作信息,包括:通过共享队列向服务器发送所述内存分配信息和所述内存释放信息。3.根据权利要求2所述的方法,其特征在于,在所述通过共享队列向服务器发送所述内存分配信息和所述内存释放信息之前,还包括:判断所述待检测程序是否满足预设条件,所述预设条件是在监控名单列表中且首次调用所述内存监控动态库;若是,则初始化所述共享队列。4.根据权利要求2或3所述的方法,其特征在于,所述内存分配信息包括:分配内存大小、分配返回地址、栈回溯地址、进程ID信息;所述内存释放信息包括:释放内存地址、栈回溯地址、进程ID信息。5.一种内存泄露检测方法,其特征在于,应用于服务器,包括:接收终端设备发送的待检测程序的内存操作信息,所述待检测程序的内存操作信息是在所述待检测程序通过预加载机制调用内存监控动态库时拦截获取的,所述内存监控动态库中的内存分配函数和内存释放函数是被重写过...

【专利技术属性】
技术研发人员:陈旭方博伦胡亚运
申请(专利权)人:北京天融信科技有限公司北京天融信软件有限公司
类型:发明
国别省市:

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

1