一种内存溢出的预警方法及装置、电子设备、存储介质与流程

文档序号:33016863发布日期:2023-01-20 16:32阅读:41来源:国知局
一种内存溢出的预警方法及装置、电子设备、存储介质与流程

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.第二确定单元,用于基于各个所述类型对应的当前执行频率峰值,确定各个所述类型对应的当前目标执行频率峰值;
47.第三计算单元,用于基于各个所述类型对应的当前目标期望值及其对应的当前目标执行频率峰值,计算各个所述类型对应的占用内存峰值;
48.第四计算单元,用于根据各个所述类型对应的占用内存峰值及其对应的当前目标期望值,计算所述目标时间段内的内存占用的总峰值;
49.反馈单元,用于若所述总峰值不小于第一预设阈值,则向前端反馈预警信息。
50.可选地,在上述的内存溢出的预警装置中,所述第一获取单元,包括:
51.第二获取单元,用于获取目标时间段内的各个当前查询语句;
52.分类单元,用于根据预设规则,对各个所述当前查询语句进行分类,得到各个类型的当前查询语句集合;
53.标识单元,用于分别针对各个所述类型,利用所述类型的各个所述当前查询语句的共同特征值对所述类型的当前查询语句集合进行标识。
54.可选地,在上述的内存溢出的预警装置中,所述第一确定单元,包括:
55.第一查找单元,用于基于各个所述类型的当前查询语句集合的共同特征值,查找
是否存在各个所述类型对应的历史目标期望值;
56.第三确定单元,用于若查找出不存在各个所述类型对应的历史目标期望值,则将各个所述类型对应的当前期望值确定为各个所述类型对应的当前目标期望值;
57.第一加权求和单元,用于若查找出存在各个所述类型对应的历史目标期望值,则分别将各个所述类型对应的当前期望值及其对应的历史目标期望值进行加权求和,得到各个所述类型对应的当前目标期望值。
58.可选地,在上述的内存溢出的预警装置中,所述第二确定单元,包括:
59.第二查找单元,用于基于各个所述类型的当前查询语句集合的共同特征值,查找是否存在各个所述类型对应的历史目标执行频率峰值;
60.第四确定单元,用于若查找出不存在各个所述类型对应的历史执行频率峰值,则将各个所述类型对应的当前执行频率峰值确定为各个所述类型对应的当前目标执行频率峰值;
61.第二加权求和单元,用于若查找出存在各个所述类型对应的历史目标执行频率峰值,则分别将各个所述类型对应的当前执行频率峰值及其对应的历史目标执行频率峰值进行加权求和,得到各个所述类型对应的当前目标执行频率峰值。
62.可选地,在上述的内存溢出的预警装置中,所述第一计算单元,包括:
63.第三获取单元,用于通过切面方式获取各个所述类型的各个当前查询语句的内存占用值;
64.第五计算单元,用于计算各个所述类型的各个所述当前查询语句的内存占用值的平均值,得到各个所述类型对应的平均值;
65.第四获取单元,用于获取各个所述类型的当前查询语句集合在所述目标时间段内的采样总数以及所述目标时间段内的时间单位个数;
66.第六计算单元,用于基于所述采样总数以及所述目标时间段内的时间单位个数,计算各个所述类型的当前查询语句集合的执行频率,得到各个所述类型对应的执行频率;
67.第七计算单元,用于根据各个所述类型对应的平均值及其对应的执行频率,利用目标算法计算各个所述类型的当前查询语句集合占用内存的期望值,得到各个所述类型对应的当前期望值。
68.可选地,在上述的内存溢出的预警装置中,所述第二计算单元,包括:
69.第五获取单元,用于获取各个所述类型的各个所述当前查询语句的执行时间戳;
70.第八计算单元,用于基于各个所述类型的各个所述当前查询语句的执行时间戳,计算各个所述类型在所述目标时间段的各个时间单位内执行各个所述当前查询语句的最大次数值,得到各个所述类型对应的最大次数值;
71.第五确定单元,用于将各个所述类型对应的最大次数值确定为各个所述类型对应的当前执行频率峰值。
72.可选地,在上述的内存溢出的预警装置中,还包括:
73.判断单元,判断各个所述类型对应的当前目标期望值中是否存在小于第二预设阈值的当前目标期望值;
74.删除单元,用于若判断出各个所述类型对应的当前目标期望值中存在小于所述第二预设阈值的当前目标期望值,则将小于所述第二预设阈值的当前目标期望值对应的类型
的当前查询语句集合进行删除。
75.本技术第三方面提供了一种电子设备,包括:
76.存储器和处理器;
77.其中,所述存储器用于存储程序;
78.所述处理器用于执行所述程序,所述程序被执行时,具体用于实现如上述任意一项所述的一种内存溢出的预警方法。
79.本技术第四方面提供了一种计算机存储介质,用于存储计算机程序,所述计算机程序被执行时,用于实现如上述任意一项所述的一种内存溢出的预警方法。
80.本技术提供的一种内存溢出的预警方法,通过获取目标时间段内的各个类型的当前查询语句集合,其次分别计算各个类型的当前查询语句集合占用内存的期望值,得到各个类型对应的当前期望值,再次基于各个类型对应的当前期望值,确定各个类型对应的当前目标期望值,接着分别计算各个类型的当前查询语句集合的执行频率峰值,得到各个类型对应的当前执行频率峰值,随后基于各个类型对应的当前执行频率峰值,确定各个类型对应的当前目标执行频率峰值,然后基于各个类型对应的当前目标期望值及其对应的当前目标执行频率峰值,计算各个类型对应的占用内存峰值,再根据各个类型对应的占用内存峰值及其对应的当前目标期望值,计算目标时间段内的内存占用的总峰值,最后若总峰值大于第一预设阈值,则向前端反馈预警信息。从而解决了不考虑执行语句的差异性问题,容易导致误报内存溢出的错误率较高的问题,也解决了没有系统地考虑到计算的规律性,导致耗费较多的系统资源的问题。
附图说明
81.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
82.图1为本技术实施例提供的一种内存溢出的预警方法的流程图;
83.图2为本技术实施例提供的一种查询语句集合的获取方法的流程图;
84.图3为本技术实施例提供的一种当前期望值的获取方法的流程图;
85.图4为本技术实施例提供的一种当前目标期望值的获取方法的流程图;
86.图5为本技术实施例提供的一种当前执行频率峰值的获取方法的流程图;
87.图6为本技术实施例提供的一种当前目标执行频率峰值的获取方法的流程图;
88.图7为本技术另一实施例提供的一种内存溢出的预警装置的结构示意图;
89.图8为本技术另一实施例提供的一种电子设备的结构示意图。
具体实施方式
90.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
91.在本技术中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
92.本技术实施例提供了一种内存溢出的预警方法,如图1所示,具体包括以下步骤:
93.s101、获取目标时间段内的各个类型的当前查询语句集合。
94.需要说明的是,目标时间段指代系统使用频率较高的时间段,系统是获取目标时间段内的各个查询语句所形成的各个当前查询语句集合。
95.可选地,在本技术另一实施例中,步骤s101的一种具体实施方式,如图2所示,包括以下步骤:
96.s201、获取目标时间段内的各个当前查询语句。
97.具体的,系统可通过查询日志或者设置采集设备等多种方式,来获取目标时间段内的各个查询语句。
98.s202、根据预设规则,对各个当前查询语句进行分类,得到各个类型的当前查询语句集合。
99.可选地,预设规则可以为当任意两个查询语句执行查询的表和语法特征等均相同时,只是查询条件对应的值不同时,比如:select*from user where name=jimmy与select*from user where name=lucy,其中,这两个查询语句就只是查询条件对应的值不同,所以可以将这两个查询语句视为同一个类型的语句,并将其放在同一集合中。
100.可选地,由于当前应用系统的数据库处理框架(如常用的orm框架,hibernate、mybatis等)中的查询语句都有固定的id标识,因此还可以将拥有共同id标识的各个查询语句归为同一个集合中。
101.s203、分别针对各个类型,利用类型的各个当前查询语句的共同特征值对类型的当前查询语句集合进行标识。
102.需要说明的是,执行步骤s203是为了后续凭借各个类型的共同特征值查找各个类型所对应的历史计算结果,因此需要利用各个类型的各个当前查询语句的共同特征值对各个类型的当前查询语句集合进行标识。
103.可选地,提取各个当前查询语句的共同特征值可以采取字符串的提取方式,也可以是使用工具对各个当前查询语句进行解析处理,得到共同特征值,比如java提供了jsqlparser工具,可以对各个当前查询语句的关键信息(查询的表名、where条件等)进行提取,然后将提取出的关键信息作为各个当前共同查询语句的特征值。
104.s102、分别计算各个类型的当前查询语句集合占用内存的期望值,得到各个类型对应的当前期望值。
105.其中,占用内存的期望值指代是计算查询语句集合对应的查询对象集合所占用内存空间的平均值,具体的,要想获取查询对象集合占用内存值较为直接的方法就是执行该查询对象所对应的查询语句,当查询对象处于内存中时,方可计算该查询对象的内存占用
值,所以对于任意一类的查询语句集合,需要先获取该查询语句集合的各个查询语句执行后赋值的查询对象所占用的内存值,然后需要基于各个内存值,即可计算得到该查询语句集合的期望值。
106.可选地,在本技术另一实施例中,步骤s102的一种具体实施方式,如图3所示,包括以下步骤:
107.s301、通过切面方式获取各个类型的各个当前查询语句的内存占用值。
108.具体的,可以通过切面方式在执行查询语句的代码处,插入计算查询对象内存占用值的代码,待计算过后可通过日志等记录方式记录查询语句对对应的查询对象的内存占用值。需要说明的是,切面方式获取的各个类型中可以将基本类型和非结构化类型去掉,只获取list、set、map等结构化类型的对象,因为一般单个对象和基本类型占用内存可以忽略不计,只需要考虑对应的查询语句所返回的多行数据。
109.s302、计算各个类型的各个当前查询语句的内存占用值的平均值,得到各个类型对应的平均值。
110.s303、获取各个类型的当前查询语句集合在目标时间段内的采样总数以及目标时间段内的时间单位个数。
111.需要说明的是,在本技术实施例中是周期性计算内存占用值,所以才需要获取在目标时间段内的采样总数以及目标时间段内的时间单位个数,以精准计算内存占用值。
112.s304、基于采样总数以及目标时间段内的时间单位个数,计算各个类型的当前查询语句集合的执行频率,得到各个类型对应的执行频率。
113.具体的,各个类型对应的执行频率的计算表达式为:
114.目标时间段内的采样总数
÷
目标时间段内的时间单位个数
115.比如:若目标时间段为1小时,时间单位定为1秒,则目标时间段内的时间单位个数为3600个,因此这1小时内某个当前查询语句集合的采样个数为7200,则该当前查询语句的执行频率为7200
÷
3600=2。
116.特殊的,若计算所得执行频率小于1,则将该执行频率设置为1。
117.s305、根据各个类型对应的平均值及其对应的执行频率,利用目标算法计算各个类型的当前查询语句集合占用内存的期望值,得到各个类型对应的当前期望值。
118.具体的,各个类型对应的当前期望值的计算方法为:
119.占用内存的期望值=内存占用的平均值
×
执行频率
120.s103、基于各个类型对应的当前期望值,确定各个类型对应的当前目标期望值。
121.可选地,在本技术另一实施例中,步骤s103的一种具体实施方式,如图4所示,包括以下步骤:
122.s401、基于各个类型的当前查询语句集合的共同特征值,查找是否存在各个类型对应的历史目标期望值。
123.需要说明的是,在本技术实施例中预警机制是要求周期性采样与计算的,后续的计算过程可能需要借鉴与整合上一次的计算结果作为使用,其中,每一轮计算都会将有用信息保留以作后续计算使用,有用信息可以包括各个类型的内存占用期望值、峰值、共同特征值等等,从而可以提高预警机制的有效性,使得内存溢出预警更加的准确,当然,也不是各个类型都会存在其上一次的计算过程用于后续的计算,并且也有可能是首次进行计算,
因此需要基于各个类型的当前查询语句集合的共同特征值,查找是否存在各个类型对应的历史目标期望值,若查找出不存在各个类型对应的历史目标期望值,说明各个类型可能为首次计算,也有可能是上一次的计算结果不足以有效,因此需要执行步骤s402。若查找出存在各个类型对应的历史目标期望值,说明各个类型对应的当前期望值需要与上一次的计算结果进行整合与借鉴,因此需要执行步骤s403。
124.s402、将各个类型对应的当前期望值确定为各个类型对应的当前目标期望值。
125.s403、分别将各个类型对应的当前期望值及其对应的历史目标期望值进行加权求和,得到各个类型对应的当前目标期望值。
126.具体的,根据s102计算得到的各个类型对应的当前期望值及其保留的对应的历史目标期望进行加权求和,获得整合后的各个类型对应的当前目标期望值的计算表达式可以为:
127.x=x1*f1+x2*f2(当x1》x2)
128.x=x1*f2+x2*f1(当x1《x2)
129.特别的,当x1=0时,x=x2。
130.其中x1为各个类型对应的历史目标期望值(若不存在则为0),x2为各个类型对应的当前期望值(若不存在则为0),x为所求各个类型对应的当前目标期望值,f1、f2为权值,且f1》f2,f1+f2=1,其中,权值可以根据需求自行设置,但要满足条件,并且该计算方式倾向于保留前后两次采样计算所得较大的期望值。
131.然后对于当x2=0时,x=x1*f1,说明各个类型的当前查询语句集合中没有找到对应的查询语句,则需要将当前目标期望值x赋值为各个类型对应的历史目标期望乘以一个小于1的权重,因为这种方式可以将长期不执行的查询语句的期望值不断下调,最终可以将其排除计算范围,使得预警机制灵活多变。
132.需要说明的是,还需要将当前目标期望值用于后续的计算,并将其保留到各个类型的历史集合中,作为下一轮计算所使用的历史目标期望值。
133.s104、分别计算各个类型的当前查询语句集合的执行频率峰值,得到各个类型对应的当前执行频率峰值。
134.需要说明的是,在本技术实施例中,在计算过程中考虑到多维度的影响因素(sql执行频率、sql执行频率峰值等)可能会导致最后的计算结果不够的准确,所以为了能有针对性地优化计算过程,使得后续的计算结果足够的准确,因此也将查询语句集合的执行频率峰值考虑到计算中去,让后续能够灵活高效地计算占用内存峰值。
135.可选地,在本技术另一实施例中,步骤s104的一种具体实施方式,如图5所示,包括以下步骤:
136.s501、获取各个类型的各个当前查询语句的执行时间戳。
137.需要说明的是,执行时间戳指代查询语句的执行时间点,可以根据执行时间点可以知道在某一时间段内该查询语句是否执行,从而知道该时间段内有多少个类型查询的执行。
138.s502、基于各个类型的各个当前查询语句的执行时间戳,计算各个类型在目标时间段的各个时间单位内执行各个当前查询语句的最大次数值,得到各个类型对应的最大次数值。
139.具体的,若任意一个类型的当前查询语句在12:37:33至12:37:34的时间段内,执行了100次,是这1秒内执行的最大次数值,则认为该类型的当前频率峰值为100。
140.s503、将各个类型对应的最大次数值确定为各个类型对应的当前执行频率峰值。
141.可选地,在申请实施例中,在执行步骤s103之后,步骤s104之前,进一步包括:
142.判断各个类型对应的当前目标期望值中是否存在小于第二预设阈值的当前目标期望值。
143.需要说明的是,为了能准确地计算出内存的占用情况,在本技术实施例中需要具体考虑的是,若期望值(内存占用值)较小且执行频率值较高,在这种情况下,查询所生成的内存对象在内存中存在是时长较短,会在使用后很快被销毁,因此可以认为不会同时存在大量此类对象,并且其较高的执行频率一般也不会造成占用过多内存的情况,若对于占用内存较多查询,尽管其执行频率值较低,但是其在某时刻的执行会瞬间占用较多内存,且一般占用时间也会较长,而会倾向于保留此类情况的数据用于后续计算。但又为了可以简化系统的计算量,提高系统的计算效率,可以过滤掉一些占用内存比较小的查询语句集合,所以会相应地设置一个过滤值,对各个类型对应的当前目标期望值进行判定,即判断各个类型对应的当前目标期望值中是否存在小于第二预设阈值的当前目标期望值。若判断出各个类型对应的当前目标期望值中存在小于第二预设阈值的当前目标期望值,则将小于第二预设阈值的当前目标期望值对应的类型的当前查询语句集合进行删除。
144.可选地,第二预设阈值可以为0.2m,当然,也可以是其他阈值,具体的可根据实际情况进行设置。
145.s105、基于各个类型对应的当前执行频率峰值,确定各个类型对应的当前目标执行频率峰值。
146.可选地,在本技术另一实施例中,步骤s105的一种具体实施方式,如图6所示,包括以下步骤:
147.s601、基于各个类型的当前查询语句集合的共同特征值,查找是否存在各个类型对应的历史目标执行频率峰值。
148.需要说明的是,步骤s602的具体实施方式可相应地参考步骤s401,此处不再赘述。
149.还需要说明的是,若查找出不存在各个类型对应的历史执行频率峰值,说明各个类型可能为首次计算,也有可能是上一次的计算结果不足以有效,因此需要执行步骤s602。若查找出存在各个类型对应的历史执行频率峰值,说明各个类型对应的当前执行频率峰值需要与上一次的计算结果进行整合与借鉴,因此需要执行步骤s603。
150.s602、将各个类型对应的当前执行频率峰值确定为各个类型对应的当前目标执行频率峰值。
151.s603、分别将各个类型对应的当前执行频率峰值及其对应的历史目标执行频率峰值进行加权求和,得到各个类型对应的当前目标执行频率峰值。
152.具体的,根据s104计算得到的各个类型对应的当前执行频率峰值及其保留的对应的历史目标执行频率峰值进行加权求和,获得整合后的各个类型对应的目标执行频率峰值的计算表达式可以为:
153.y=y1*f1+y2*f2(当y1》y2)
154.y=y1*f2+y2*f1(当y1《y2)
155.特别的,当y1=0时,y=y2。
156.其中y1为各个类型对应的历史目标执行频率峰值(若不存在则为0),y2为各个类型对应的当前执行频率峰值(若不存在则为0),y为所求整合后各个类型对应的目标执行频率峰值,f1、f2为权值,且f1》f2,f1+f2=1,其中,权值可以根据需求自行设置,但要满足条件,即该计算方式倾向于保留前后两次采样计算所得较大的执行频率峰值。
157.然后对于当y2=0时,y=y1*f1,说明各个类型的当前查询语句集合中没有找到对应查询语句,则需要将各个类型对应的目标执行频率峰值y赋值为各个类型对应的历史目标执行频率峰值乘以一个小于1的权重。
158.s106、基于各个类型对应的当前目标期望值及其对应的当前目标执行频率峰值,计算各个类型对应的占用内存峰值。
159.具体的,根据步骤s103计算得到的各个类型对应的当前目标期望值,以及步骤s105计算得到的各个类型对应的当前目标执行频率峰值,可以通过目标算法计算得到各个类型对应的占用内存峰值,其中,目标算法为:占用内存峰值=当前目标期望
×
当前目标执行频率峰值。
160.s107、根据各个类型对应的占用内存峰值及其对应的当前目标期望值,计算目标时间段内的内存占用的总峰值。
161.具体的,根据各个类型对应的占用内存峰值及其对应的当前目标期望值,则可以根据预设算法计算内存占用的总峰值,其中,预设算法为:
162.total=f1+(f2+avg2)/2+(f3+avg3)/2+(f4+avg4)/2+

163.其中,f1表示在所有的当前查询语句集合的内存占用峰值的最大值,f2,f3,f4...表示除f1对应的当前查询语句集合之外的其他所有的当前查询语句集合的内存占用峰值,avg2、avg3、avg4分别表示f2、f3、f4对应的当前查询语句集合的占用内存的期望值。
164.s108、判断总峰值是否不小于第一预设阈值。
165.需要说明的是,步骤s107计算得到的内存占用的总峰值可能不存在内存溢出的情况,因此也不需要发送内存溢出预警,所以为了获知总峰值是否达到内存溢出值,还需进一步地对总峰值进行判定,即判断总峰值是否大于第一预设阈值,若判断出总峰值大于第一预设阈值,说明总峰值已达到内存溢出值,此时需要执行步骤s109,若判断出总峰值小于第一预设阈值,则继续监测各个类型占用内存的情况。
166.可选地,第一预设阈值可以为2g,当然,也可以是其他阈值,具体的可以根据实际系统服务器的内存情况设定一个合适的阈值。
167.s109、向前端反馈预警信息。
168.具体的,当总峰值不小于第一预设阈值时,需要及时地向前端发送预警信息,其中,预警信息主要用于告知工作人员内存存在溢出情况,请及时清理内存,避免影响工作的处理效率。
169.本技术提供的一种内存溢出的预警方法,通过获取目标时间段内的各个类型的当前查询语句集合,其次分别计算各个类型的当前查询语句集合占用内存的期望值,得到各个类型对应的当前期望值,再次基于各个类型对应的当前期望值,确定各个类型对应的当前目标期望值,接着分别计算各个类型的当前查询语句集合的执行频率峰值,得到各个类型对应的当前执行频率峰值,随后基于各个类型对应的当前执行频率峰值,确定各个类型
对应的当前目标执行频率峰值,然后基于各个类型对应的当前目标期望值及其对应的当前目标执行频率峰值,计算各个类型对应的占用内存峰值,再根据各个类型对应的占用内存峰值及其对应的当前目标期望值,计算目标时间段内的内存占用的总峰值,最后若总峰值大于第一预设阈值,则向前端反馈预警信息。从而解决了不考虑执行语句的差异性问题,容易导致误报内存溢出的错误率较高的问题,也解决了没有系统地考虑到计算的规律性,导致耗费较多的系统资源的问题。
170.本技术另一实施例提供了一种内存溢出的预警装置,如图7所示,包括以下单元:
171.第一获取单元701,用于获取目标时间段内的各个类型的当前查询语句集合。
172.第一计算单元702,用于分别计算各个类型的当前查询语句集合占用内存的期望值,得到各个类型对应的当前期望值。
173.第一确定单元703,用于基于各个类型对应的当前期望值,确定各个类型对应的当前目标期望值。
174.第二计算单元704,用于分别计算各个类型的当前查询语句集合的执行频率峰值,得到各个类型对应的当前执行频率峰值。
175.第二确定单元705,用于基于各个类型对应的当前执行频率峰值,确定各个类型对应的当前目标执行频率峰值。
176.第三计算单元706,用于基于各个类型对应的当前目标期望值及其对应的当前目标执行频率峰值,计算各个类型对应的占用内存峰值。
177.第四计算单元707,用于根据各个类型对应的占用内存峰值及其对应的当前目标期望值,计算目标时间段内的内存占用的总峰值。
178.反馈单元708,用于若总峰值不小于第一预设阈值,则向前端反馈预警信息。
179.需要说明的是,本技术实施例中的上述单元的具体工作过程可相应地参考上述方法实施例中的步骤s101~步骤s109,此处不再赘述。
180.可选地,本技术另一实施例提供的一种内存溢出的预警装置中,第一获取单元,包括:
181.第二获取单元,用于获取目标时间段内的各个当前查询语句。
182.分类单元,用于根据预设规则,对各个当前查询语句进行分类,得到各个类型的当前查询语句集合。
183.标识单元,用于分别针对各个类型,利用类型的各个当前查询语句的共同特征值对类型的当前查询语句集合进行标识。
184.需要说明的是,本技术上述实施例提供的各个单元的具体工作过程可相应地参考上述方法实施例中的相应的步骤,此处不再赘述。
185.可选地,本技术另一实施例提供的一种内存溢出的预警装置中,第一确定单元,包括:
186.第一查找单元,用于基于各个类型的当前查询语句集合的共同特征值,查找是否存在各个类型对应的历史目标期望值。
187.第三确定单元,用于若查找出不存在各个类型对应的历史目标期望值,则将各个类型对应的当前期望值确定为各个类型对应的当前目标期望值。
188.第一加权求和单元,用于若查找出存在各个类型对应的历史目标期望值,则分别
将各个类型对应的当前期望值及其对应的历史目标期望值进行加权求和,得到各个类型对应的当前目标期望值。
189.需要说明的是,本技术上述实施例提供的各个单元的具体工作过程可相应地参考上述方法实施例中的相应的步骤,此处不再赘述。
190.可选地,本技术另一实施例提供的一种内存溢出的预警装置中,第二确定单元,包括:
191.第二查找单元,用于基于各个类型的当前查询语句集合的共同特征值,查找是否存在各个类型对应的历史目标执行频率峰值。
192.第四确定单元,用于若查找出不存在各个类型对应的历史执行频率峰值,则将各个类型对应的当前执行频率峰值确定为各个类型对应的当前目标执行频率峰值。
193.第二加权求和单元,用于若查找出存在各个类型对应的历史目标执行频率峰值,则分别将各个类型对应的当前执行频率峰值及其对应的历史目标执行频率峰值进行加权求和,得到各个类型对应的当前目标执行频率峰值。
194.需要说明的是,本技术上述实施例提供的各个单元的具体工作过程可相应地参考上述方法实施例中的相应的步骤,此处不再赘述。
195.可选地,本技术另一实施例提供的一种内存溢出的预警装置中,第一计算单元,包括:
196.第三获取单元,用于通过切面方式获取各个类型的各个当前查询语句的内存占用值。
197.第五计算单元,用于计算各个类型的各个当前查询语句的内存占用值的平均值,得到各个类型对应的平均值。
198.第四获取单元,用于获取各个类型的当前查询语句集合在目标时间段内的采样总数以及目标时间段内的时间单位个数。
199.第六计算单元,用于基于采样总数以及目标时间段内的时间单位个数,计算各个类型的当前查询语句集合的执行频率,得到各个类型对应的执行频率。
200.第七计算单元,用于根据各个类型对应的平均值及其对应的执行频率,利用目标算法计算各个类型的当前查询语句集合占用内存的期望值,得到各个类型对应的当前期望值。
201.需要说明的是,本技术上述实施例提供的各个单元的具体工作过程可相应地参考上述方法实施例中的相应的步骤,此处不再赘述。
202.可选地,本技术另一实施例提供的一种内存溢出的预警装置中,第二计算单元,包括:
203.第五获取单元,用于获取各个类型的各个当前查询语句的执行时间戳。
204.第八计算单元,用于基于各个类型的各个当前查询语句的执行时间戳,计算各个类型在目标时间段的各个时间单位内执行各个当前查询语句的最大次数值,得到各个类型对应的最大次数值。
205.第五确定单元,用于将各个类型对应的最大次数值确定为各个类型对应的当前执行频率峰值。
206.需要说明的是,本技术上述实施例提供的各个单元的具体工作过程可相应地参考
上述方法实施例中的相应的步骤,此处不再赘述。
207.可选地,本技术另一实施例提供的一种内存溢出的预警装置中,还包括:
208.判断单元,用于判断各个类型对应的当前目标期望值中是否存在小于第二预设阈值的当前目标期望值。
209.删除单元,用于若判断出各个类型对应的当前目标期望值中存在小于第二预设阈值的当前目标期望值,则将小于第二预设阈值的当前目标期望值对应的类型的当前查询语句集合进行删除。
210.需要说明的是,本技术上述实施例提供的各个单元的具体工作过程可相应地参考上述方法实施例中的相应的步骤,此处不再赘述。
211.本技术另一实施例提供了一种电子设备,如图8所示,包括:
212.存储器801和处理器802。
213.其中,存储器801用于存储程序。
214.处理器802用于执行程序,程序被执行时,具体用于实现如上述任意一个实施例提供的一种内存溢出的预警方法。
215.本技术另一实施例提供了一种计算机存储介质,用于存储计算机程序,计算机程序被执行时,用于实现如上述任意一个实施例提供的一种内存溢出的预警方法。
216.计算机存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
217.专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
218.对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本技术。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本技术的精神或范围的情况下,在其它实施例中实现。因此,本技术将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1