掌桥专利:专业的专利平台
掌桥专利
首页

一种Java程序内存情况分析及处理的方法和装置

文献发布时间:2024-04-18 19:59:31


一种Java程序内存情况分析及处理的方法和装置

技术领域

本发明涉及软件监控领域,更具体地,特别是指一种Java程序内存情况分析及处理的方法、系统、设备和存储介质。

背景技术

随着计算机行业技术的发展,系统规模越来越大,分布式系统成为大型应用服务器部署方案的重要选择,但是如何保证分布式系统的稳定运行成为摆在很多软件厂商不得不面对的问题。随着应用规模的增长,各类问题层出不穷。在实际使用过程中由于Java虚拟机的GC(垃圾回收)特性会导致在操作系统和Java内部监控的内存使用情况即使达到100%也不能证明出现了内存不足的问题,导致运维人员无法在某些节点出现内存类的性能问题时无法做出准确判断。

发明内容

有鉴于此,本发明实施例的目的在于提出一种Java程序内存情况分析及处理的方法、系统、电子设备及计算机可读存储介质,本发明通过读取并发过程中各类监控指标经过计算,最终得到一个系统稳定性的指标值,通过该值可以评估软件系统对应时间段内内存使用的情况是否出现异常;使用多种算法对内存情况进行分析,以减少单个算法的误报情况,并且采用投票机制,只有多数算法认为待测点为异常点,才将待测点确定为异常点,提高了检测的准确性。

基于上述目的,本发明实施例的一方面提供了一种Java程序内存情况分析及处理的方法,包括如下步骤:通过调用Java管理扩展接口实时获取Java内存中各区的指标数据;通过所述指标数据判断节点服务或者数值波动是否异常;响应于节点服务和/或数值波动异常,通过多种算法综合计算得到指标值,并根据所述指标值确定节点服务和/或数值波动异常是否由内存异常引起;以及响应于节点服务和/或数值波动异常是由内存异常引起,保存内存快照文件,并对所述快照文件进行分析以确定处理方式。

在一些实施方式中,所述通过调用Java管理扩展接口实时获取Java内存中各区的指标数据的步骤包括:获取应用平均响应时间、应用时间段内前十最大响应时间、不同时间段平均负载、各类CPU使用百分比、各线程CPU使用百分比、内存使用量、内存使用最大值、垃圾回收次数和垃圾回收耗时中的至少一个。

在一些实施方式中,所述通过所述指标数据判断节点服务或者数值波动是否异常的步骤包括:检测所述应用平均响应时间是否超过第一阈值和/或所述应用时间段内前十最大响应时间是否超过第二阈值;以及响应于所述应用平均响应时间超过第一阈值和/或所述应用时间段内前十最大响应时间超过第二阈值,确定节点服务出现异常。

在一些实施方式中,所述通过所述指标数据判断节点服务或者数值波动是否异常的步骤包括:响应于所述应用平均响应时间未超过第一阈值和所述应用时间段内前十最大响应时间未超过第二阈值,检测垃圾回收线程CPU使用率是否超过第三阈值和/或垃圾回收线程日志中满垃圾回收的频率和持续时间是否超过第四阈值;以及响应于垃圾回收线程CPU使用率超过第三阈值和/或垃圾回收线程日志中满垃圾回收的频率和持续时间超过第四阈值,确定数值波动异常。

在一些实施方式中,所述通过多种算法综合计算得到指标值,并根据所述指标值确定节点服务和/或数值波动异常是否由内存异常引起的步骤包括:使用多种算法分别确定待测点是否为异常点,将确定待测点为异常点的算法的指标值置一,计算指标值为一的算法的数量与算法的总数量的比值;响应于所述比值大于二分之一,则确定节点服务和/或数值波动异常是由内存异常引起。

在一些实施方式中,所述使用多种算法分别确定待测点是否为异常点的步骤包括:分别使用基于曲线拟合的检测方法、基于同期数据的统计检测算法、基于同期振幅的检测方法、基于环比数据的检测算法和孤立森林算法检测待测点是否为异常点。

在一些实施方式中,所述分别使用基于曲线拟合的检测方法、基于同期数据的统计检测算法、基于同期振幅的检测方法、基于环比数据的检测算法和孤立森林算法检测待测点是否为异常点的步骤包括:利用待测点被分入的叶子节点到根的路径长度确定待测点是否为异常点。

本发明实施例的另一方面,提供了一种Java程序内存情况分析及处理的系统,包括:获取模块,配置用于通过调用Java管理扩展接口实时获取Java内存中各区的指标数据;判断模块,配置用于通过所述指标数据判断节点服务或者数值波动是否异常;计算模块,配置用于响应于节点服务和/或数值波动异常,通过多种算法综合计算得到指标值,并根据所述指标值确定节点服务和/或数值波动异常是否由内存异常引起;以及执行模块,配置用于响应于节点服务和/或数值波动异常是由内存异常引起,保存内存快照文件,并对所述快照文件进行分析以确定处理方式。

本发明实施例的又一方面,还提供了一种电子设备,包括:至少一个处理器;以及存储器,所述存储器存储有可在所述处理器上运行的计算机指令,所述指令由所述处理器执行时实现如上方法的步骤。

本发明实施例的再一方面,还提供了一种计算机可读存储介质,计算机可读存储介质存储有被处理器执行时实现如上方法步骤的计算机程序。

本发明具有以下有益技术效果:通过读取并发过程中各类监控指标经过计算,最终得到一个系统稳定性的指标值,通过该值可以评估软件系统对应时间段内内存使用的情况是否出现异常;使用多种算法对内存情况进行分析,以减少单个算法的误报情况,并且采用投票机制,只有多数算法认为待测点为异常点,才将待测点确定为异常点,提高了检测的准确性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。

图1为本发明提供的Java程序内存情况分析及处理的方法的实施例的示意图;

图2为本发明提供的检测java程序内存异常的流程图;

图3为本发明提供的预测java程序内存异常趋势的流程图;

图4为本发明提供的使用率曲线示意图;

图5为本发明提供的Java程序内存情况分析及处理的系统的实施例的示意图;

图6为本发明提供的Java程序内存情况分析及处理的电子设备的实施例的硬件结构示意图;

图7为本发明提供的Java程序内存情况分析及处理的计算机存储介质的实施例的示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。

需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。

本发明实施例的第一个方面,提出了一种Java程序内存情况分析及处理的方法的实施例。图1示出的是本发明提供的Java程序内存情况分析及处理的方法的实施例的示意图。如图1所示,本发明实施例包括如下步骤:

S1、通过调用Java管理扩展接口实时获取Java内存中各区的指标数据;

S2、通过所述指标数据判断节点服务或者数值波动是否异常;

S3、响应于节点服务和/或数值波动异常,通过多种算法综合计算得到指标值,并根据所述指标值确定节点服务和/或数值波动异常是否由内存异常引起;以及

S4、响应于节点服务和/或数值波动异常是由内存异常引起,保存内存快照文件,并对所述快照文件进行分析以确定处理方式。

一般情况下,Java内存可以分成程序计数器、虚拟机栈、本地方法栈、堆以及元空间五个部分,堆内存最常出现内存溢出的情况,在Java1.8版本中,对堆内存的垃圾回收多采用分代回收机制,也就是把堆内存分为年轻代和老年代。由于虚拟机进行垃圾回收的时候会暂停用户线程,如果垃圾回收耗时久或频率高都会影响到系统运行,因此,对Java程序内存的监控应该从内存、垃圾回收的角度完整看待。

通过调用Java管理扩展接口实时获取Java内存中各区的指标数据,通过所述指标数据判断节点服务或者数值波动是否异常,响应于节点服务和/或数值波动异常,通过多种算法综合计算得到指标值,并根据所述指标值确定节点服务和/或数值波动异常是否由内存异常引起,响应于节点服务和/或数值波动异常是由内存异常引起,保存内存快照文件,并对所述快照文件进行分析以确定处理方式。

在一些实施方式中,所述通过调用Java管理扩展接口实时获取Java内存中各区的指标数据的步骤包括:获取应用平均响应时间、应用时间段内前十最大响应时间、不同时间段平均负载、各类CPU使用百分比、各线程CPU使用百分比、内存使用量、内存使用最大值、垃圾回收次数和垃圾回收耗时中的至少一个。

在一些实施方式中,所述通过所述指标数据判断节点服务或者数值波动是否异常的步骤包括:检测所述应用平均响应时间是否超过第一阈值和/或所述应用时间段内前十最大响应时间是否超过第二阈值;以及响应于所述应用平均响应时间超过第一阈值和/或所述应用时间段内前十最大响应时间超过第二阈值,确定节点服务出现异常。

在一些实施方式中,所述通过所述指标数据判断节点服务或者数值波动是否异常的步骤包括:响应于所述应用平均响应时间未超过第一阈值和所述应用时间段内前十最大响应时间未超过第二阈值,检测垃圾回收线程CPU使用率是否超过第三阈值和/或垃圾回收线程日志中满垃圾回收的频率和持续时间是否超过第四阈值;以及响应于垃圾回收线程CPU使用率超过第三阈值和/或垃圾回收线程日志中满垃圾回收的频率和持续时间超过第四阈值,确定数值波动异常。

图2为本发明提供的检测java程序内存异常的流程图,如图2所示,S101、通过调用Java管理扩展接口实时获取Java内存中各区的指标数据。指标数据包括但不限于:应用平均响应时间、应用时间段内前10最大响应时间,不同时间段平均负载、各类CPU使用百分比、各线程CPU使用百分比,内存使用量、内存使用最大值、垃圾回收次数和垃圾回收耗时。S102、对收集数据进行处理,确认各应用节点状态。通过实时计算数据库对指标数据按照设定的时间单位进行聚合计算获得各节点各类型指标数据。检测平均响应时间和指定时段中top10最大响应时间是否超过配置的阈值,两个指标只要有一个超过即判断节点服务存在异常。S103:判断存在异常后,通过多种算法综合计算得出指标值,据此评估系统节点异常是否是由内存类问题引发,如果是则进入S104,否则继续调用其他异常检查模块定位问题根因。S104:确认为内存异常后,立即触发自动保存coredump内存快照文件并保存至内存分析服务器,使用mat工具对快照进行解析进行根因分析,保存完成后根据配置策略决定是自动对该异常节点下线重启还是发出告警信息由运维人员手动处理问题。

图2的执行主体可以为PC、终端等,通过实时监控应用所在节点,应用响应时间,应用Java虚拟机中内存垃圾回收相关指标和内存使用相关指标,从多个维度来实时监控系统的运行情况,并且设置阈值,当内存相关指标突破阈值时,进行指标分析,如果符合即启动预警系统,实现了通过垃圾回收指标对Java内存使用情况进行监控分析诊断预警的技术效果。

当应用节点仍可以正常服务,但是部分或全部检测指标数据出现异常时,通过实时计算数据库对指标数据按照设定的时间单位进行聚合计算获得各区内存使用数据,图3为本发明提供的预测java程序内存异常趋势的流程图,如图3所示,S201:通过调用Java管理扩展接口实时获取Java内存中各区的指标数据。指标数据包括但不限于:应用平均响应时间、应用时间段内前10最大响应时间,不同时间段平均负载、各类CPU使用百分比、各线程CPU使用百分比,内存使用量、内存使用最大值、垃圾回收次数和垃圾回收耗时;S202:对收集数据进行处理,确认各应用节点数值异常情况,通过实时计算数据库对指标数据按照设定的时间单位进行聚合计算获得各节点各类型指标数据。除了图2中有的检测平均响应时间和指定时段中top10最大响应时间是否超过配置的阈值,两个指标只要有一个超过即判断存在异常,还需要检测GC线程CPU占用情况,超过阈值即判断存在异常;检查GClog中FullGC的频率和持续时间,任一指标超过阈值即判断存在异常。S203:判断存在异常后,通过多种算法综合计算得出指标值,据此评估系统数值波动是否达到警戒值,如果是则进入S204,否则保持监听状态不变。S204:确认为内存异常后,立即触发自动保存coredump内存快照文件并保存至内存分析服务器,使用mat工具对快照进行解析进行根因分析,保存完成后根据配置策略决定是自动对该异常节点下线重启还是发出告警信息由运维人员手动处理问题。

在一些实施方式中,所述通过多种算法综合计算得到指标值,并根据所述指标值确定节点服务和/或数值波动异常是否由内存异常引起的步骤包括:使用多种算法分别确定待测点是否为异常点,将确定待测点为异常点的算法的指标值置一,计算指标值为一的算法的数量与算法的总数量的比值;响应于所述比值大于二分之一,则确定节点服务和/或数值波动异常是由内存异常引起。

在一些实施方式中,所述使用多种算法分别确定待测点是否为异常点的步骤包括:分别使用基于曲线拟合的检测方法、基于同期数据的统计检测算法、基于同期振幅的检测方法、基于环比数据的检测算法和孤立森林算法检测待测点是否为异常点。

本发明实施例中当任意一个数据超过阈值后,触发本发明实施例中的判断机制,触发后,系统会收集对应服务器指标数据,针对时间序列的指标数据进行进一步异常检测。

基于曲线拟合的检测方法是一种常用的数据分析和异常检测技术。它用于确定一组数据点所满足的曲线模型,并据此进行检测、拟合和估计。该方法的基本思想是,在给定的数据点集合中,通过拟合一个数学函数或曲线模型来描述数据的整体趋势和特征。常见的拟合模型包括线性、多项式、指数、对数、正弦等函数。通过最小化数据点与拟合曲线的残差,可以确定最佳的曲线拟合参数。

对于时间序列(是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列)来说,T时刻的数值对于T-1时刻有很强的依赖性。故针对最近时间窗口内的数据遵循某种趋势的现象,使用一条曲线对该趋势进行拟合,如果新的数据打破了这种趋势,使曲线变得不平滑,则该点就出现了异常。曲线拟合的方法有很多,比如回归、movingaverage……。本发明选择使用EWMA,即指数权重移动平均方法来拟合曲线。EWMA的递推公式是:

EWMA(1)=p(1)

EWMA(i)=α*p(i)+(1-α)*EWMA(i-1)

其中α是一个0~1间的小数,称为smoothing factor(平滑因子)。EWMA(1)取前若干值的平均值,α越小时EWMA(1)的取值越重要。

可以从上面公式得出,下一点的平均值是由上一点的平均值,加上当前点的实际值修正而来。对于每一个EWMA值,每个数据的权重是不一样的,最近的数据将拥有越高的权重。有了平均值之后,本发明使用3-sigma理论来判断新的input是否超过了容忍范围。比较实际的值是否超出了这个范围就可以知道是否出现异常了。超出了上界,可能是流量突然增加了;低于下界,可能是流量突然降低了,这两种情况都需要告警。

EWMA由于其时效性被广泛应用在时间序列的预测,它的优势在于:可以检测到一个异常较短时间后发生的另一个(不太高的突变型)异常;因为它更多的是参考突变之前的点,所以能更快对异常作出反应;非常敏感,历史如果波动很小,方差就很小,容忍的波动范围也会非常小。

基于同期数据的统计检测算法是一种常用的数据分析和异常检测技术。它利用同一时间段内的历史数据作为基准,通过对当前数据与基准数据之间的差异进行统计分析,来判断是否存在异常或异常行为。基于同期数据的统计检测算法的基本思想是将当前数据与历史数据进行对比,以确定当前数据是否与历史模式相符。

本发明实施例通过引入周期性的检测方法针对性处理具有周期性趋势的曲线,很多监控项具有一定周期性,对于当前时间节点的值记为x

其中x

θ

其中θ

基于同期数据的检测方法能够反映出周期性;可以确保发现大的故障,出现告警一定是大问题。

图4为本发明提供的使用率曲线示意图,使用基于同期数据的检测方法无法检测出图4中的现象,比如今天是11月18日,过去14天的历史曲线必然会比今天的曲线低很多。那么今天出了一个小故障,曲线下跌了,相对于过去14天的曲线仍然是高很多的。这样的故障使用方法二就检测不出来,需要使用基于同期振幅的检测方法。

本发明实施例中使用x(t)–x(t-1)再除以x(t-1)来表示t时刻的振幅。如果参考过去14天的数据,会得到14个振幅值。使用14个振幅的绝对值作为标准,如果m时刻的振幅({m(t)–m(t-1)]/m(t-1))大于amplitude*threshold并且m时刻的振幅大于0,则认为该时刻发生突增,而如果m时刻的振幅大于amplitude*threshold并且m时刻的振幅小于0,则认为该时刻发生突减。

基于同期振幅的检测方法比绝对值要敏感;利用了时间周期性,规避了业务曲线自身的周期性陡降产生的影响。

基于环比数据的检测算法是一种用于识别时间序列中异常点的方法。它基于环比(比较相邻时间点的值)的变化来判断数据点是否异常。对于时间序列(是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列)来说,T时刻的数值对于T-1时刻有很强的依赖性。本发明使用最近时间窗口(T)内的数据遵循某种趋势的现象来设计算法。比如我们将T设置为7,则我们取检测值(now_value)和过去7个(记为i)点进行比较,如果大于阈值我们将count加1,如果count超过我们设置的count_num,则认为该点是异常点。

上式中的threshold需要根据实际生产环境修改,而count_num可以根据的需求进行设置,比如对异常敏感,可以设置count_num小一些,而如果对异常不敏感,可以将count_num设置的大一些。

业界关于动态阈值设置的方法有很多,本发明选用一种针对lvs流量异常检测的阈值设置方法。通常阈值设置方法会参考过去一段时间内的均值、最大值以及最小值,我们也同样应用此方法。取过去一段时间(比如T窗口)的平均值、最大值以及最小值,然后取max-avg和avg-min的最小值。之所以取最小值的原因是让筛选条件设置的宽松一些,让更多的值通过此条件,减少一些漏报的事件。

在一些实施方式中,所述分别使用基于曲线拟合的检测方法、基于同期数据的统计检测算法、基于同期振幅的检测方法、基于环比数据的检测算法和孤立森林算法检测待测点是否为异常点的步骤包括:利用待测点被分入的叶子节点到根的路径长度确定待测点是否为异常点。

孤立森林(Isolation Forest)是一种用于异常检测的机器学习算法,它是基于iForest(Isolation Forest)算法发展而来的。孤立森林的目标是通过构建一个随机的集合(森林)来识别数据集中的异常点。该方法利用数据构建iTree,进而构建iForest,是一种无监督的检测方法,具有很好的效果。该算法是由iTree构建而成的。iTree是一种随机二叉树,每个节点要么有两个子节点,要么该节点为叶子节点。对于给定的数据集D,数据集中的所有的特征都是连续变量,iTree的构造如下:

(1)在数据集D中随机选择一个特征A;

(2)随机选择特征A的一个可能取值value;

(3)根据特征A以及值value将数据集D分为两个子集,将特征A的值小于value的样本归入左子节点,余下部分归入右子节点;

(4)递归构造左右子树直至满足以下的终止条件:

a.传入的数据集只有一条记录或者多条相同记录,

b.树的高度达到了限定高度。

代码可以如下:

iTree建立以后,就可以对数据进行预测,预测的过程是将测试记录在iTree上面走一遍。iTree能有效的检测异常点是基于异常点都很稀有这一假设,异常点应该在iTree中很快被划分到叶子节点,因此可以利用检测点被分入的叶子节点到根的路径长度h(x)判断检测点x是否为异常点。

c(n)=2H(n-1)-(2(n-1)/n)

H(k)=ln(k)+ξ

其中ξ为欧拉常数,在构建好了iTree后就可以构建iForest,iForest中的每棵树在构造时并不是将所有的数据都用上,而是随机采样,抽取一部分构造iTree,尽量保证每棵树都不相同。事实上,如果iTree在构造时运用很多的数据点反而不能得到很好的效果,主要因为数据点会有重叠,因此效果不够显著。而且因为由iTree变成iForest因此S(x,n)的计算公式也要改变,将h(x)变为E(h(x))是检测点x在每棵树上的平均高度。

利用iForest算法进行判断时,如果检测点的孤立森林分数为正数,那么检测点为正常点,否则为异常点。

通过算法确认,可以得出一个系统稳定性的指标值。其中所述系统稳定性的指标值超过50%,即超过一半的算法结果认为该检测点为异常点,系统会继续进入下一流程,触发相关预警,并按配置好的预警方案决定是自动处理还是向相关运维人员发出指定级别告警信息由人工介入处理。

需要特别指出的是,上述Java程序内存情况分析及处理的方法的各个实施例中的各个步骤均可以相互交叉、替换、增加、删减,因此,这些合理的排列组合变换之于Java程序内存情况分析及处理的方法也应当属于本发明的保护范围,并且不应将本发明的保护范围局限在实施例之上。

基于上述目的,本发明实施例的第二个方面,提出了一种Java程序内存情况分析及处理的系统。如图5所示,系统200包括如下模块:获取模块,配置用于通过调用Java管理扩展接口实时获取Java内存中各区的指标数据;判断模块,配置用于通过所述指标数据判断节点服务或者数值波动是否异常;计算模块,配置用于响应于节点服务和/或数值波动异常,通过多种算法综合计算得到指标值,并根据所述指标值确定节点服务和/或数值波动异常是否由内存异常引起;以及执行模块,配置用于响应于节点服务和/或数值波动异常是由内存异常引起,保存内存快照文件,并对所述快照文件进行分析以确定处理方式。

在一些实施方式中,所述获取模块配置用于:获取应用平均响应时间、应用时间段内前十最大响应时间、不同时间段平均负载、各类CPU使用百分比、各线程CPU使用百分比、内存使用量、内存使用最大值、垃圾回收次数和垃圾回收耗时中的至少一个。

在一些实施方式中,所述判断模块配置用于:检测所述应用平均响应时间是否超过第一阈值和/或所述应用时间段内前十最大响应时间是否超过第二阈值;以及响应于所述应用平均响应时间超过第一阈值和/或所述应用时间段内前十最大响应时间超过第二阈值,确定节点服务出现异常。

在一些实施方式中,所述判断模块配置用于:响应于所述应用平均响应时间未超过第一阈值和所述应用时间段内前十最大响应时间未超过第二阈值,检测垃圾回收线程CPU使用率是否超过第三阈值和/或垃圾回收线程日志中满垃圾回收的频率和持续时间是否超过第四阈值;以及响应于垃圾回收线程CPU使用率超过第三阈值和/或垃圾回收线程日志中满垃圾回收的频率和持续时间超过第四阈值,确定数值波动异常。

在一些实施方式中,所述计算模块配置用于:使用多种算法分别确定待测点是否为异常点,将确定待测点为异常点的算法的指标值置一,计算指标值为一的算法的数量与算法的总数量的比值;响应于所述比值大于二分之一,则确定节点服务和/或数值波动异常是由内存异常引起。

在一些实施方式中,所述计算模块配置用于:分别使用基于曲线拟合的检测方法、基于同期数据的统计检测算法、基于同期振幅的检测方法、基于环比数据的检测算法和孤立森林算法检测待测点是否为异常点。

在一些实施方式中,所述计算模块配置用于:利用待测点被分入的叶子节点到根的路径长度确定待测点是否为异常点。

基于上述目的,本发明实施例的第三个方面,提出了一种电子设备,包括:至少一个处理器;以及存储器,存储器存储有可在处理器上运行的计算机指令,指令由处理器执行以实现如下步骤:S1、通过调用Java管理扩展接口实时获取Java内存中各区的指标数据;S2、通过所述指标数据判断节点服务或者数值波动是否异常;S3、响应于节点服务和/或数值波动异常,通过多种算法综合计算得到指标值,并根据所述指标值确定节点服务和/或数值波动异常是否由内存异常引起;以及S4、响应于节点服务和/或数值波动异常是由内存异常引起,保存内存快照文件,并对所述快照文件进行分析以确定处理方式。

在一些实施方式中,所述通过调用Java管理扩展接口实时获取Java内存中各区的指标数据的步骤包括:获取应用平均响应时间、应用时间段内前十最大响应时间、不同时间段平均负载、各类CPU使用百分比、各线程CPU使用百分比、内存使用量、内存使用最大值、垃圾回收次数和垃圾回收耗时中的至少一个。

在一些实施方式中,所述通过所述指标数据判断节点服务或者数值波动是否异常的步骤包括:检测所述应用平均响应时间是否超过第一阈值和/或所述应用时间段内前十最大响应时间是否超过第二阈值;以及响应于所述应用平均响应时间超过第一阈值和/或所述应用时间段内前十最大响应时间超过第二阈值,确定节点服务出现异常。

在一些实施方式中,所述通过所述指标数据判断节点服务或者数值波动是否异常的步骤包括:响应于所述应用平均响应时间未超过第一阈值和所述应用时间段内前十最大响应时间未超过第二阈值,检测垃圾回收线程CPU使用率是否超过第三阈值和/或垃圾回收线程日志中满垃圾回收的频率和持续时间是否超过第四阈值;以及响应于垃圾回收线程CPU使用率超过第三阈值和/或垃圾回收线程日志中满垃圾回收的频率和持续时间超过第四阈值,确定数值波动异常。

在一些实施方式中,所述通过多种算法综合计算得到指标值,并根据所述指标值确定节点服务和/或数值波动异常是否由内存异常引起的步骤包括:使用多种算法分别确定待测点是否为异常点,将确定待测点为异常点的算法的指标值置一,计算指标值为一的算法的数量与算法的总数量的比值;响应于所述比值大于二分之一,则确定节点服务和/或数值波动异常是由内存异常引起。

在一些实施方式中,所述使用多种算法分别确定待测点是否为异常点的步骤包括:分别使用基于曲线拟合的检测方法、基于同期数据的统计检测算法、基于同期振幅的检测方法、基于环比数据的检测算法和孤立森林算法检测待测点是否为异常点。

在一些实施方式中,所述分别使用基于曲线拟合的检测方法、基于同期数据的统计检测算法、基于同期振幅的检测方法、基于环比数据的检测算法和孤立森林算法检测待测点是否为异常点的步骤包括:利用待测点被分入的叶子节点到根的路径长度确定待测点是否为异常点。

如图6所示,为本发明提供的上述Java程序内存情况分析及处理的电子设备的一个实施例的硬件结构示意图。

以如图6所示的装置为例,在该装置中包括一个处理器301以及一个存储器302。

处理器301和存储器302可以通过总线或者其他方式连接,图6中以通过总线连接为例。

存储器302作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本申请实施例中的Java程序内存情况分析及处理的方法对应的程序指令/模块。处理器301通过运行存储在存储器302中的非易失性软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现Java程序内存情况分析及处理的方法。

存储器302可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据Java程序内存情况分析及处理的方法的使用所创建的数据等。此外,存储器302可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器302可选包括相对于处理器301远程设置的存储器,这些远程存储器可以通过网络连接至本地模块。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

一个或者多个Java程序内存情况分析及处理的方法对应的计算机指令303存储在存储器302中,当被处理器301执行时,执行上述任意方法实施例中的Java程序内存情况分析及处理的方法。

执行上述Java程序内存情况分析及处理的方法的电子设备的任何一个实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。

本发明还提供了一种计算机可读存储介质,计算机可读存储介质存储有被处理器执行时执行Java程序内存情况分析及处理的方法的计算机程序。

如图7所示,为本发明提供的上述Java程序内存情况分析及处理的计算机存储介质的一个实施例的示意图。以如图7所示的计算机存储介质为例,计算机可读存储介质401存储有被处理器执行时执行如上方法的计算机程序402。

最后需要说明的是,本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关硬件来完成,Java程序内存情况分析及处理的方法的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,程序的存储介质可为磁碟、光盘、只读存储记忆体(ROM)或随机存储记忆体(RAM)等。上述计算机程序的实施例,可以达到与之对应的前述任意方法实施例相同或者相类似的效果。

以上是本发明公开的示例性实施例,但是应当注意,在不背离权利要求限定的本发明实施例公开的范围的前提下,可以进行多种改变和修改。根据这里描述的公开实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明实施例公开的元素可以以个体形式描述或要求,但除非明确限制为单数,也可以理解为多个。

应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。

上述本发明实施例公开实施例序号仅仅为了描述,不代表实施例的优劣。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本发明实施例公开的范围(包括权利要求)被限于这些例子;在本发明实施例的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,并存在如上的本发明实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。因此,凡在本发明实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。

技术分类

06120116522459