一种内存溢出监测方法、装置、设备及存储介质与流程

文档序号:34653790发布日期:2023-06-29 22:09阅读:25来源:国知局
一种内存溢出监测方法、装置、设备及存储介质与流程

本申请属于内存管理,尤其涉及一种内存溢出监测方法、装置、设备及存储介质。


背景技术:

1、java虚拟机(java virtual machine,简称为jvm)加载类的时候,记录类的元数据,简称为类元数据(class meta data),这些数据会保存在一个单独的内存区域内,该内存区域称为类元数据空间。在java 7里,这个空间被称为永久代(permanent generationspace,简称为permgen或permgenspace),在java 8里,使用元空间(metaspace)代替了永久代。

2、在实际应用中,可以设置类元数据空间的最大容量。在permgen中称为permsize和maxpermsize。在metaspace中称为maxmetaspacesize,用于限制本地内存分配给类元数据的大小。相关技术中,不论是permgen还是metaspace在遇到类元数据泄漏引发的内存溢出(out of memory,简称oom)时,都难以进行对导致溢出的类加载进行监测。


技术实现思路

1、本申请提供了一种内存溢出监测方法、装置、设备及存储介质,以解决现有技术中难以对导致溢出的类进行监测的技术问题。

2、根据本申请的一方面,提供了一种内存溢出监测方法,包括:

3、在监测到向虚拟机加载类的情况下,记录加载的类名,其中,至少部分所述类名包括动态部分和固有部分;

4、在类元数据空间发生溢出或预测到溢出风险的情况下,确定发生溢出或溢出风险的时间;

5、确定所述时间之前预设时间范围内记录的类名的固有部分,并确定每个固有部分对应的加载次数,得到第一数据;

6、确定所述时间所述虚拟机中加载的所有类的类名的固有部分,并确定每个固有部分对应的加载次数,得到第二数据。

7、在本申请一实施例中,还包括:

8、确定所述第一数据中加载次数排在前n位的固有部分,以及所述第二数据中加载次数排在前n位的固有部分,其中n为正整数;

9、在所述第一数据和所述第二数据中加载次数排在前n位的固有部分相同时,将加载次数排在前n位的固有部分对应的类作为内存溢出原因。

10、在本申请一实施例中,监测向虚拟机加载类,包括:

11、监测类加载器的加载类方法;和/或

12、监测字节码转换器的转换方法。

13、在本申请一实施例中,确定类名的固有部分,并确定每个固有部分对应的加载次数,包括:

14、对类名进行聚合以去除类名中的动态部分,得到类名的固有部分;

15、将每个固有部分对应的类名的出现次数作为该固有部分对应的加载次数。

16、在本申请一实施例中,预测溢出风险的方法,包括:

17、按照预设周期获取当前所述虚拟机中加载的类的数量;

18、根据最近预设多个周期获取的所述数量确定所述数量的增长率;

19、在所述增长率大于预设值时,确定具有溢出风险。

20、在本申请一实施例中,根据最近预设多个周期获取的所述数量确定所述数量的增长率,包括:

21、对最近预设多个周期获取的所述数量进行线性回归,得到所述数量随时间变化的增长率。

22、本申请的另一方面,还提供一种内存溢出监测装置,所述装置包括:监测模块,用于在监测到向虚拟机加载类的情况下,记录加载的类名,其中,至少部分所述类名包括动态部分和固有部分;第一确定模块,用于在类元数据空间发生溢出或预测到溢出风险的情况下,确定发生溢出或溢出风险的时间;第二确定模块,用于确定所述时间之前预设时间范围内记录的类名的固有部分,并确定每个固有部分对应的加载次数,得到第一数据;第三确定模块,用于确定所述虚拟机中加载的所有类的类名的固有部分,并确定每个固有部分对应的加载次数,得到第二数据。

23、在本申请一实施例中,还包括:

24、第四确定模块,用于确定所述第一数据中加载次数排在前n位的固有部分,以及所述第二数据中加载次数排在前n位的固有部分,其中n为正整数;

25、溢出定位模块,用于在所述第一数据和所述第二数据中加载次数排在前n位的固有部分相同时,将加载次数排在前n位的固有部分对应的类作为内存溢出原因。

26、本申请的另一方面,还提供一种电子设备,包括:处理器;以及存储程序的存储器,其中,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行本申请实施例的方法。

27、本申请的另一方面,还提供一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使计算机执行本申请实施例的方法。

28、本申请的有益效果为:

29、通过本申请的一个或多个实施例,监测并记录向虚拟机加载的类名,并在类元数据空间发生溢出或预测到溢出风险时,确定近期加载的类名的固有部分及其对应的加载次数,能够得到近期加载的类名和加载次数;进一步的,确定发生溢出或预测到溢出风险时虚拟机中加载的所有类的类名的固有部分及其对应的次数,能够得到确定发生溢出或预测到溢出风险时虚拟机中加载的所有类的类名和加载次数。基于近期加载的类名及其加载次数和虚拟机中加载的所有类的类名及其加载次数,能够简单高效地对导致溢出的类进行监测。



技术特征:

1.一种内存溢出监测方法,其特征在于,包括:

2.根据权利要求1所述的内存溢出监测方法,其特征在于,还包括:

3.根据权利要求1所述的内存溢出监测方法,其特征在于,监测向虚拟机加载类,包括:

4.根据权利要求1所述的内存溢出分析方法,其特征在于,确定类名的固有部分,并确定每个固有部分对应的加载次数,包括:

5.根据权利要求1所述的内存溢出监测方法,其特征在于,预测溢出风险的方法,包括:

6.根据权利要求5所述的内存溢出监测方法,其特征在于,根据最近预设多个周期获取的所述数量确定所述数量的增长率,包括:

7.一种内存溢出监测装置,其特征在于,所述装置包括:

8.根据权利要求7所述的内存溢出监测装置,其特征在于,还包括:

9.一种电子设备,其特征在于,包括:

10.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,当所述计算机程序被计算机的处理器执行时,使计算机执行权利要求1至6中任一项所述的一种内存溢出监测方法。


技术总结
本申请涉及一种内存溢出监测方法、装置、设备及存储介质,通过监控向虚拟机加载的类名,并在类元数据空间发生溢出或预测到溢出风险的情况下,确定近期加载的类名的固有部分对应的加载次数、以及所有加载的类名的固有部分对应的次数。并基于近期加载的类名的固有部分对应的加载次数、以及加载的所有类的类名的固有部分对应的加载次数对溢出的类进行监测。本申请对于在类元数据空间溢出或者存在溢出风险时,可以简单高效地对导致溢出的类进行监测。

技术研发人员:韦远奎
受保护的技术使用者:北京基调网络股份有限公司
技术研发日:
技术公布日:2024/1/13
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1