System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及计算机,尤其涉及一种内存异常检测方法、装置、电子设备及存储介质。
技术介绍
1、由于开发人员在开发过程中的疏忽或者受开发人员技术水平影响,在软件开发过程中,总是不可避免的出现各种内存异常,例如内存泄漏、内存越界访问、内存重复释放、已释放内存再次访问等,尤其在大型、复杂的软件系统中内存异常的问题更为突出。其中,内存泄漏会导致程序消耗大量的内存资源,最终引发内存溢出、性能下降甚至系统崩溃等问题。
2、目前,内存泄漏问题通常利用内存泄漏排查工具检测或者采用人工手动检测。其中,内存泄漏排查工具对内存泄漏的检测速度较慢,且需要在进程退出后才可以进行内存泄漏检测;人工检测通常是对比两个时间点的内存快照,人工分析查找两次内存快照之间的差异,确定内存增长的模块,以缩小排查范围,这种方法无法观察到各个模块内存的时序变化,容易对内存波动的模块进行误判,内存泄漏检测错误率较高,并且耗费大量人力物力。
技术实现思路
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、当接收到第三函数对所述目标内存块的访问请求时,触发已释放内存再次访问异常,并控制所述第三函数终止运行。
32、可选的,所述方法还包括:
33、响应于对目标内存块的内存释放操作,将所述目标内存块置于第二等待队列;
34、在满足预设的第二队列清理策略时,自所述第二等待队列中移除所述目标内存块,并清除所述目标内存块的禁止访问属性;
35、所述当接收到第三函数对所述目标内存块的访问请求时,触发已释放内存再次访问异常,并控制所述第三函数终止运行,包括:
36、当接收到第三函数对所述目标内存块的访问请求时,若所述目标内存块处于所述第二等待队列中,则触发已释放内存再次访问异常,并控制所述第三函数终止运行。
37、根据本申请实施例的第二方面,提供了一种内存异常检测装置,包括:
38、第一单元,用于获取目标检测对象在设定时间段内的内存占用量统计序列;
39、第二单元,用于按照设定序列长度对所述内存占用量统计序列进行子序列划分;
40、第三单元,用于根据划分的各个子序列各自对应的内存变化趋势,确定所述目标检测对象是否发生内存泄漏。
41、根据本申请实施例的第三方面,提供了一种电子设备,包括存储器和处理器;
42、所述存储器与所述处理器连接,用于存储程序;
43、所述处理器用于通过运行所述存储器中的程序,实现如本申请实施例的第一方面中任意一项所述的内存异常检测方法。
44、根据本申请实施例的第四方面,提供了一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器运行时,实现如本申请实施例的第一方面中任意一项所述的内存异常检测方法。
45、本申请提出的内存异常检测方法,首先获取目标检测对象在设定时间段内的内存占用量统计序列,然后按照设定序列长度对所述内存占用量统计序列进行子序列划分,最后根据划分的各个子序列各自对应的内存变化趋势,确定所述目标检测对象是否发生内存泄漏。
46、本申请提出的内存异常检测方法,能够观察到目标检测对象的内存时序变化,消除内存波动对内存泄漏检测造成的误判,提高检测正确率,同时实现了对内存泄漏的实时自动检测,降低了人力成本,提高了检本文档来自技高网...
【技术保护点】
1.一种内存异常检测方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述根据划分的各个子序列各自对应的内存变化趋势,确定所述目标检测对象是否发生内存泄漏,包括:
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
4.根据权利要求3所述的方法,其特征在于,所述第一操作包括所述内存分配操作;
5.根据权利要求3所述的方法,其特征在于,所述第一操作包括所述内存释放操作;
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
7.根据权利要求3所述的方法,其特征在于,所述第一操作包括所述内存释放操作;
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
9.一种内存异常检测装置,其特征在于,包括:
10.一种电子设备,其特征在于,包括存储器和处理器;
11.一种存储介质,其特征在于,所述存储介质上存储有计算机程序,所述计算机程序被处理器运行时,实现如权利要求1-8中任意一项所述的内存异常检测方法。
【技术特征摘要】
1.一种内存异常检测方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述根据划分的各个子序列各自对应的内存变化趋势,确定所述目标检测对象是否发生内存泄漏,包括:
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
4.根据权利要求3所述的方法,其特征在于,所述第一操作包括所述内存分配操作;
5.根据权利要求3所述的方法,其特征在于,所述第一操作包括所述内存释放操作;
6.根据权利要求5...
【专利技术属性】
技术研发人员:桑维光,李永超,魏冲洲,
申请(专利权)人:西安讯飞超脑信息科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。