System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于计算机,尤其是涉及基于多进程协程模型的共享内存泄漏检测方法。
技术介绍
1、“协程”(coroutine)概念最早由melvinconway于1958年提出。协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换。相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低。总的来说,协程为协同任务提供了一种运行时抽象,这种抽象非常适合于协同多任务调度和数据流处理。在现代操作系统和编程语言中,因为用户态线程切换代价比内核态线程小,协程成为了一种轻量级的多任务模型。
2、但现有技术在对协程模式下的内存泄露的过程中存在一下缺点:
3、现有的内存泄漏检测技术,只能检测进程内的内存,无法检测跨进程的内存泄漏,在多进程且基于形成共享内存架构下,原有的技术无法检测内存泄漏;
4、且现有的内存泄漏检测技术,只能检查进程从启动前到停止后,内存申请但是没有释放的场景,然而对于大型系统而言,不能随意启停整个系统,只能对局部进行观测。
技术实现思路
1、有鉴于此,本专利技术旨在提出基于多进程协程模型的共享内存泄漏检测方法,以期解决上述部分技术问题中的至少之一。
2、为达到上述目的,本专利技术的技术方案是这样实现的:
3、本专利技术第一方面提供了基于多进程协程模型的共享内存泄漏检测方法,包括侵入式检测模式和非侵入式检测模式:
4、使用侵入式检测模式执行内存泄露检测的过程如下:
5、在执行数
6、数据库的操作指令执行结束后,再次获取当前指令所在内存池的使用情况,得到内存池的最终状态;
7、比较内存池的初始状态和最终状态,若内存使用情况出现单调增加,则说明存在内存泄漏;
8、如果内存使用情况保持不变,则说明不存在内存泄漏。
9、进一步的,使用非侵入式检测模式执行内存泄露检测的过程如下:
10、使用内核探测工具追踪内存分配函数与和内存释放函数分配的内存的地址、大小以及分配时函数的堆栈;
11、根据内核探测工具追踪得到的结果,判断是否存在内存分配函数已分配内存,但未通过内存释放函数进行释放的情况;
12、若存在,则使用内核探测工具追踪得到的堆栈信息,查找内存泄漏的具体位置。
13、进一步的,将侵入式检测模式和非侵入式检测模式相结合,执行内存泄露检测的过程如下:
14、将侵入式检测模式中,获取的数据库的操作指令执行结束后,当前指令所在内存池的使用情况,分解为内存的分配和释放信息,并传入非侵入式检测模式中作为输入的数据;
15、非侵入式检测模式直接判断是否存在内存分配函数已分配内存,但未通过内存释放函数进行释放的情况发生,并查找内存泄漏的具体位置。
16、进一步的,侵入式检测模式和非侵入式检测模式均为,基于多进程协程模型下设计的共享内存泄露检测模式,其中多进程协程模型的结构具体为:
17、在多进程协程模型下,进程仅作为执行体的容器,线程作为程序的执行体,多个线程均可在不同进程间进行迁移;
18、且多进程协程模型下使用独立于进程之外的共享内存,不同进程间使用同一个内存区域进行交互。
19、进一步的,内存分配函数的工作流程如下:
20、调用内存分配函数后,内存分配函数从当前内存池中分配内存,若当前内存池的空间足够,直接使用内存池的内存;若当前内存池的空间不足,则从段中分配内存;
21、若段中的空间足够,则从段中分配内存;若段中的空间不足,则判断待分配的内存是否超过总内存的容量上限;
22、若超过总内存的容量上限,则返回错误消息并停止分配;若未超过总内存的容量上限,则创建新段,并在新段中申请内存。
23、进一步的,在内存分配函数的工作过程中执行如下操作:
24、在线程开启时,通过内核探测工具记录每个线程使用的内存池的数量;
25、每次执行内存的分配或释放操作时,记录当前内存池的使用情况,更新每个内存池使用的内存的大小;
26、每次执行内存的分配操作时,记录每次内存申请的具体信息,包括申请点、申请内存的地址和大小。
27、本专利技术第二方面提供了一种电子设备,包括处理器以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,其特征在于:所述处理器用于执行上述第一方面任一所述的基于多进程协程模型的共享内存泄漏检测方法。
28、本专利技术第三方面提供了一种服务器,其特征在于:包括至少一个处理器,以及与所述处理器通信连接的存储器,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,以使所述至少一个处理器执行如第一方面任一所述的基于多进程协程模型的共享内存泄漏检测方法。
29、本专利技术第四方面提供了一种计算机可读取存储介质,存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现第一方面任一项所述的基于多进程协程模型的共享内存泄漏检测方法。
30、相对于现有技术,本专利技术所述的基于多进程协程模型的共享内存泄漏检测方法具有以下有益效果:
31、1)将常用内存泄漏检测工具的思想,应用于这种架构的程序,而且不必侵入程序(就是不用修改程序的代码),同时,不必启停程序,就能观测程序部分指令的内存泄漏。
32、2)可以在多进程且基于协程共享内存架构程序里,非侵入式检测内存泄漏。
本文档来自技高网...【技术保护点】
1.基于多进程协程模型的共享内存泄漏检测方法,包括侵入式检测模式,其特征在于:
2.根据权利要求1所述的基于多进程协程模型的共享内存泄漏检测方法,其特征在于,还包括非侵入式检测模式:
3.根据权利要求1所述的基于多进程协程模型的共享内存泄漏检测方法,其特征在于:
4.根据权利要求1所述的基于多进程协程模型的共享内存泄漏检测方法,其特征在于:
5.根据权利要求2所述的基于多进程协程模型的共享内存泄漏检测方法,其特征在于:
6.根据权利要求5所述的基于多进程协程模型的共享内存泄漏检测方法,其特征在于:
7.一种电子设备,包括处理器以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,其特征在于:所述处理器用于执行上述权利要求1-6任一所述的基于多进程协程模型的共享内存泄漏检测方法。
8.一种服务器,其特征在于:包括至少一个处理器,以及与所述处理器通信连接的存储器,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,以使所述至少一个处理器执行如权利要求1-6任一所述的基于
9.一种计算机可读取存储介质,存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1-6任一项所述的基于多进程协程模型的共享内存泄漏检测方法。
...【技术特征摘要】
1.基于多进程协程模型的共享内存泄漏检测方法,包括侵入式检测模式,其特征在于:
2.根据权利要求1所述的基于多进程协程模型的共享内存泄漏检测方法,其特征在于,还包括非侵入式检测模式:
3.根据权利要求1所述的基于多进程协程模型的共享内存泄漏检测方法,其特征在于:
4.根据权利要求1所述的基于多进程协程模型的共享内存泄漏检测方法,其特征在于:
5.根据权利要求2所述的基于多进程协程模型的共享内存泄漏检测方法,其特征在于:
6.根据权利要求5所述的基于多进程协程模型的共享内存泄漏检测方法,其特征在于:
7.一种电子设备,包括处理器...
【专利技术属性】
技术研发人员:韩愈强,
申请(专利权)人:天津南大通用数据技术股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。