首页> 中国专利> 针对软件系统实现内存泄漏趋势快速判定的方法、装置、处理器及其存储介质

针对软件系统实现内存泄漏趋势快速判定的方法、装置、处理器及其存储介质

摘要

本发明涉及一种针对软件系统实现内存泄漏趋势快速判定的方法,包括采集挂载负载进行信号监测前后的占用内存和CPU使用率数据;将未进行信号监测时存储的占用内存数据取平均值,作为系统占用内存基础值S;将信号监测时存储的占用内存数据通过FFT变换分解为n个周期性波形;获取每个周期性波形对应时间内的最大CPU使用率,作为单周期预测自适应系数αn;通过n个周期的时域波形,对系统长期运行占用内存进行趋势波形分析;评估挂载多个负载时在一定的监测时间内是否存在内存泄露。本发明还涉及相应的装置、处理器及其计算机可读存储介质。采用了本发明的针对软件系统实现内存泄漏趋势快速判定的方法、装置、处理器及存储介质,提高本发明在无线电业务行业软件测试的适用性,针对监测需求及系统硬件配置情况,提高了本方案在无线电业务软件测试中的通用性。

著录项

  • 公开/公告号CN112395162A

    专利类型发明专利

  • 公开/公告日2021-02-23

    原文格式PDF

  • 申请/专利权人 上海创远仪器技术股份有限公司;

    申请/专利号CN202011348830.5

  • 发明设计人 叶干云;

    申请日2020-11-26

  • 分类号G06F11/30(20060101);G06F11/36(20060101);

  • 代理机构31002 上海智信专利代理有限公司;

  • 代理人王洁;郑暄

  • 地址 201601 上海市松江区泗泾镇高技路205弄7号C座

  • 入库时间 2023-06-19 09:58:59

说明书

技术领域

本发明涉及无线电领域,尤其涉及无线电监测领域,具体是指一种针对软件系统实现内存泄漏趋势快速判定的方法、装置、处理器及其计算机可读存储介质。

背景技术

随着无线电业务的迅猛发展、无线电设备的日益增多,以及无线电监测设施的不断建设,要求无线电监测系统能同时使用多设备进行频谱监测及其他监测业务,大量的监测数据能及时进行存储、分发、分析等处理。在有限的服务器资源条件下,要求无线电监测系统在大并发且长时间监测条件下,能够持续的稳定运行。

基于java语言B/S架构的无线电监测系统,JVM的垃圾自动回收机制,具有一定的时间延后性,也需要消耗内存。若无线电监测系统的吞吐量较大时,会加快JVM垃圾回收频率,且Java代码要长时间在服务器上运行,即使在小的垃圾回收内存分配,也会导致JVM耗尽全部可用内存。

因此,在无线电监测业务中,只要确保在业务需求的监测时长内,系统不出现内存耗尽情况,就判定为系统无内存泄露情况。

而在实际开发过程中,由于设备和时间资源的限制,无法对所有情况的长时间监测业务需求均进行测试验证,因此需要一种进行内存泄漏趋势快速判定的方法。

发明内容

本发明的目的是克服了上述现有技术的缺点,提供了一种满足适用性好、通用性好、时间成本低的针对软件系统实现内存泄漏趋势快速判定的方法、装置、处理器及其计算机可读存储介质。

为了实现上述目的,本发明的针对软件系统实现内存泄漏趋势快速判定的方法、装置、处理器及其计算机可读存储介质如下:

该针对软件系统实现内存泄漏趋势快速判定的方法,其主要特点是,所述的方法包括以下步骤:

(1)采集挂载负载进行信号监测前后的占用内存和CPU使用率数据;

(2)计算占用内存基础值S,将未进行信号监测时存储的占用内存数据取平均值,作为系统占用内存基础值S;

(3)将信号监测时存储的占用内存数据通过FFT变换分解为n个周期性波形;

(4)计算单周期预测自适应系数α

(5)通过n个周期的时域波形,对系统长期运行占用内存进行趋势波形分析;

(6)计算出的占用内存变化趋势,评估挂载多个负载时在一定的监测时间内是否存在内存泄露。

较佳地,所述的步骤(1)具体包括以下步骤:

(1.1)创建采集占用内存和CPU使用率的脚本;

(1.2)在系统挂载负载未进行监测时运行脚本,对服务器占用内存按一定的时间间隔采集;

(1.3)在进行信号监测时运行脚本,对服务器占用内存和CPU使用率按一定的时间间隔采集。

较佳地,所述的步骤(2)中计算占用内存基础值S,具体为:

根据以下公式计算占用内存基础值S:

其中,N为采集的未信号监测时的内存数据总帧数,s[n]为采集的未信号监测时的内存数据,n为0,1,2,......,N-1。

较佳地,所述的步骤(3)具体包括以下步骤:

(3.1)进行离散傅里叶变换,将占用内存数据x[n]从时域转换为频域;

(3.2)对转换出的频域数据去底噪,将计算出的频域数据取平均值,并提取出大于平均值的数据,并记录这些数据所对应的时域上的周期值;

(3.3)将去底噪的频域数据进行离散傅里叶逆变换,转换回具有周期性波形的时域数据。

较佳地,所述的步骤(3.2)中进行离散傅里叶逆变换,具体为:

根据以下公式进行离散傅里叶逆变换:

其中,N为采集的内存数据的总帧数,e为自然底数,i为复数单位,k为0,1,2,......,N-1。

较佳地,所述的步骤(4)中计算单周期预测自适应系数α

根据以下公式计算单周期预测自适应系数α

其中,t

较佳地,所述的步骤(5)具体包括以下步骤:

(5.1)通过实测数据,计算每个周期性波形占用内存数据的增量Δx

(5.2)预测每个周期性波形数据在当前采集时刻到未来某个时间之间的增量Δx

(5.3)根据预测的当前采集时刻到未来某时刻的增量,预测每个周期性波形当前采集时刻前两个或两个周期以上的变化量;

(5.4)重复步骤(5.2)至(5.3),预测长时间监测时占用内存变化趋势x(t+Δt)。

较佳地,所述的步骤(5.1)中计算每个周期性波形占用内存数据的增量Δx

根据以下公式计算每个周期性波形占用内存数据的增量Δx

Δx

其中,x

较佳地,所述的步骤(5.2)中预测每个周期性波形数据在当前采集时刻到未来某个时间之间的增量Δx

根据以下公式预测每个周期性波形数据在当前采集时刻到未来某个时间之间的增量Δx

Δx

其中,T

较佳地,所述的步骤(5.3)中预测每个周期性波形当前采集时刻前两个或两个周期以上的变化量,具体为:

根据以下公式预测每个周期性波形当前采集时刻前两个或两个周期以上的变化量:

其中,T

较佳地,所述的步骤(6)具体包括以下步骤:

(6.1)计算挂载M个负载同时进行信号监测时占用内存变化趋势X

(6.1)根据计算出的占用内存变化趋势X

较佳地,所述的步骤(6.1)中计算XX,具体为:

根据以下公式计算XX:

X

其中,M为挂载负载个数,S为未进行信号监测时系统占用内存基础值。

该针对软件系统实现内存泄漏趋势快速判定的装置,其主要特点是,所述的装置包括:

处理器,被配置成执行计算机可执行指令;

存储器,存储一个或多个计算机可执行指令,所述的计算机可执行指令被所述的处理器执行时,实现上述的针对软件系统实现内存泄漏趋势快速判定的方法的步骤。

该针对软件系统实现内存泄漏趋势快速判定的处理器,其主要特点是,所述的处理器被配置成执行计算机可执行指令,所述的计算机可执行指令被所述的处理器执行时,实现上述的针对软件系统实现内存泄漏趋势快速判定的方法的步骤。

该计算机可读存储介质,其主要特点是,其上存储有计算机程序,所述的计算机程序可被处理器执行以实现上述的针对软件系统实现内存泄漏趋势快速判定的方法的各个步骤。

采用了本发明的针对软件系统实现内存泄漏趋势快速判定的方法、装置、处理器及其计算机可读存储介质,替代了长时间监测稳定性的测试用例需求,节约了系统开发时bug回归的时间成本。本发明建立在成熟的大数据趋势分析模型的基础上,添加了无线电监测业务实际需求,提高了本发明在无线电业务行业软件测试的适用性。本发明针对无线电业务行业不同的监测需求及系统硬件配置情况,灵活的调整技术方案算法中涉及的基础参数,提高了本方案在无线电业务软件测试中的通用性。

附图说明

图1为本发明的针对软件系统实现内存泄漏趋势快速判定的方法的流程图。

图2为本发明的针对软件系统实现内存泄漏趋势快速判定的方法的将存储的占用内存数据通过FFT变换分解为n个周期性波形的流程图。

图3为本发明的针对软件系统实现内存泄漏趋势快速判定的方法的对系统长期运行占用内存进行趋势波形分析的流程图。

图4为本发明的针对软件系统实现内存泄漏趋势快速判定的方法的保存的内存泄露快速判定的基础数据的效果图。

图5为本发明的针对软件系统实现内存泄漏趋势快速判定的方法的x(t)函数波形效果图。

图6为本发明的针对软件系统实现内存泄漏趋势快速判定的方法的单周期预测自适应系数数据效果图。

图7为本发明的针对软件系统实现内存泄漏趋势快速判定的方法的用7×24小时的实测结果进行验证的测试结果图。

图8为本发明的针对软件系统实现内存泄漏趋势快速判定的方法的10个负载持续监测7×24小时后服务器的性能监测数据示意图。

具体实施方式

为了能够更清楚地描述本发明的技术内容,下面结合具体实施例来进行进一步的描述。

本发明的该针对软件系统实现内存泄漏趋势快速判定的方法,其中包括以下步骤:

(1)采集挂载负载进行信号监测前后的占用内存和CPU使用率数据;

(1.1)创建采集占用内存和CPU使用率的脚本;

(1.2)在系统挂载负载未进行监测时运行脚本,对服务器占用内存按一定的时间间隔采集;

(1.3)在进行信号监测时运行脚本,对服务器占用内存和CPU使用率按一定的时间间隔采集;

(2)计算占用内存基础值S,将未进行信号监测时存储的占用内存数据取平均值,作为系统占用内存基础值S;

(3)将信号监测时存储的占用内存数据通过FFT变换分解为n个周期性波形;

(3.1)进行离散傅里叶变换,将占用内存数据x[n]从时域转换为频域;

(3.2)对转换出的频域数据去底噪,将计算出的频域数据取平均值,并提取出大于平均值的数据,并记录这些数据所对应的时域上的周期值;

(3.3)将去底噪的频域数据进行离散傅里叶逆变换,转换回具有周期性波形的时域数据;

(4)计算单周期预测自适应系数α

(5)通过n个周期的时域波形,对系统长期运行占用内存进行趋势波形分析;

(5.1)通过实测数据,计算每个周期性波形占用内存数据的增量Δx

(5.2)预测每个周期性波形数据在当前采集时刻到未来某个时间之间的增量Δx

(5.3)根据预测的当前采集时刻到未来某时刻的增量,预测每个周期性波形当前采集时刻前两个或两个周期以上的变化量;

(5.4)重复步骤(5.2)至(5.3),预测长时间监测时占用内存变化趋势x(t+Δt);

(6)计算出的占用内存变化趋势,评估挂载多个负载时在一定的监测时间内是否存在内存泄露;

(6.1)计算挂载M个负载同时进行信号监测时占用内存变化趋势X

(6.1)根据计算出的占用内存变化趋势X

作为本发明的优选实施方式,所述的步骤(2)中计算占用内存基础值S,具体为:

根据以下公式计算占用内存基础值S:

其中,N为采集的未信号监测时的内存数据总帧数,s[n]为采集的未信号监测时的内存数据,n为0,1,2,......,N-1。

作为本发明的优选实施方式,所述的步骤(3.2)中进行离散傅里叶逆变换,具体为:

根据以下公式进行离散傅里叶逆变换:

其中,N为采集的内存数据的总帧数,e为自然底数,i为复数单位,k为0,1,2,......,N-1。

作为本发明的优选实施方式,所述的步骤(4)中计算单周期预测自适应系数α

根据以下公式计算单周期预测自适应系数α

其中,t

作为本发明的优选实施方式,所述的步骤(5.1)中计算每个周期性波形占用内存数据的增量Δx

根据以下公式计算每个周期性波形占用内存数据的增量Δx

Δx

其中,x

作为本发明的优选实施方式,所述的步骤(5.2)中预测每个周期性波形数据在当前采集时刻到未来某个时间之间的增量Δx

根据以下公式预测每个周期性波形数据在当前采集时刻到未来某个时间之间的增量Δx

Δx

其中,T

作为本发明的优选实施方式,所述的步骤(5.3)中预测每个周期性波形当前采集时刻前两个或两个周期以上的变化量,具体为:

根据以下公式预测每个周期性波形当前采集时刻前两个或两个周期以上的变化量:

其中,T

作为本发明的优选实施方式,所述的步骤(6.1)中计算XX,具体为:

根据以下公式计算XX:

X

其中,M为挂载负载个数,S为未进行信号监测时系统占用内存基础值。

作为本发明的优选实施方式,该针对软件系统实现内存泄漏趋势快速判定的装置,其中包括:

处理器,被配置成执行计算机可执行指令;

存储器,存储一个或多个计算机可执行指令,所述的计算机可执行指令被所述的处理器执行时,实现上述的针对软件系统实现内存泄漏趋势快速判定的方法的步骤。

作为本发明的优选实施方式,该针对软件系统实现内存泄漏趋势快速判定的处理器,其被配置成执行计算机可执行指令,所述的计算机可执行指令被所述的处理器执行时,实现上述的针对软件系统实现内存泄漏趋势快速判定的方法的步骤。

作为本发明的优选实施方式,该计算机可读存储介质,其上存储有计算机程序,所述的计算机程序可被处理器执行以实现上述的针对软件系统实现内存泄漏趋势快速判定的方法的各个步骤。

本发明的具体实施方式中,本发明涉及无线电监测领域,从无线电信号长时间监测业务需求出发,提出了一种进行内存泄漏趋势快速判定的方法,该方法分为六个步骤,如图1所示。

第一步:采集挂载一个负载进行信号监测前后的占用内存、CPU使用率数据

创建一个采集占用内存、CPU使用率的脚本。

在系统挂载一个负载未进行监测时运行脚本,对服务器占用内存按一定的时间间隔采集,并保存在一个txt文件中。

再在进行信号监测时运行脚本,对服务器占用内存和CPU使用率按一定的时间间隔采集,并分别保存在两个txt文件中。

以上保存在txt文件中的数据,为进行内存泄露快速判定提供基础数据。

实测结果如图4所示。

第二步:将未进行信号监测时存储的占用内存数据取平均值,作为系统占用内存基础值S。

公式为:

其中,N为采集的未信号监测时的内存数据总帧数,n=0,1,2,......,N-1;s[n]为采集的未信号监测时的内存数据。

第三步:将信号监测时存储的占用内存数据通过FFT变换分解为n个周期性波形

如图2所示,计算步骤如下:

1)先通过离散傅里叶变换,将占用内存数据x[n]从时域转换为频域。采用的离散傅里叶变换公式为:

其中,N为采集的进行信号监测时的内存数据总帧数,k=0,1,2,......,N-1,e为自然底数,i为复数单位,x[n]为采集的进行信号监测时的内存数据。

2)对转换出的频域数据去底噪。将计算出的频域数据取平均值,并提取出大于平均值的数据,并记录这些数据所对应的时域上的周期值。

3)再将选取出来的频域数据分别通过离散傅里叶逆变换转换回时域,得到n个周期的波形x

其中,N为采集的内存数据的总帧数,k=0,1,2,......,N-1,e为自然底数,i为复数单位。

第四步:获取每个周期性波形对应时间内的最大CPU使用率,作为单周期预测自适应系数α

公式为:

其中,t

第五步:通过n个周期的时域波形,对系统长期运行占用内存进行趋势波形分析

如图3所示,计算步骤如下:

1)先计算每个周期性波形占用内存数据的增量Δx

Δx

其中,i=1,2,......,n,x

2)预测x

Δx

其中,i=1,2,......,n,T

3)对每个周期性波形时刻前两个或者两个周期以上的变化量进行预测,得出每个周期性

波形从此时刻t到未来某时刻t+Δt时间段内的增量,公式为:

其中,i=3,4,......,n,T

4)通过多次重复计算(3)(4),预测长时间监测时,占用内存变化趋势x(t+Δt),公式为:

x(t+Δt)=x(t)+Δx(t+Δt)=x(t)+Δx

第六步:评估挂载多个负载时在一定的监测时间内是否存在内存泄露

先计算挂载M个负载同时进行信号监测时,占用内存变化趋势X

X

=S·(1-M)+M·(x(t)+Δx

其中,M为挂载负载个数,S为未进行信号监测时,系统占用内存基础值。

再根据计算出的占用内存变化趋势X

结合技术方案和附图对本发明的具体实施方案做进一步的详细说明:

第一步:采集挂载一个负载进行信号监测前后的占用内存、CPU使用率数据;

在系统挂载一个负载且未进行监测时运行脚本,对服务器占用内存每秒采集一帧,持续采集1分钟,保存在Mem_before.txt文件中。

在进行信号监测时运行脚本,对服务器占用内存和CPU使用率每秒采集一帧,持续采集30分钟,并分别保存在Mem_after.txt、Cpu.txt文件中。

保存的内存泄露快速判定的基础数据如图4所示。

第二步:将未进行信号监测时存储的占用内存数据取平均值,作为系统占用内存基础值S:

通过第一步存储在Mem_before.txt文件中的数据,计算获得系统占用内存基础值S=3721609(KB)

第三步:将信号监测时存储的占用内存数据通过FFT变换分解为n个周期性波形如图5所示为x(t)函数波形图,通过FFT变换,占用内存数据周期性波形函数为

x(t)=sin(2·π·5·t)+sin(2·π·10·t)+sin(2·π·20·t)+......

第四步:获取每个周期性波形对应时间内的最大CPU使用率,作为单周期预测自适应系数α

通过第三步周期性函数对应的周期,获取的对应时间内的最大CPU使用率的单周期自适应数据如图6所示。

第五步:通过n个周期的时域波形,对系统长期运行占用内存进行趋势波形分析

在30分钟(1800秒)采集的占用内存、CPU使用率的基础上,计算出的占用内存变化趋势函数为

x(1800+Δt)=x(1800)+Δx

第六步:评估挂载多个负载时在一定的监测时间内是否存在内存泄露

在一次项目的实际应用中,要求挂载10个负载,能够同时进行7×24小时的持续监测,项目部署的服务器的硬件配置条件为:内存8GB、CPU 4核8线程。

通过内存变化趋势函数,推算出挂载10个负载7×24小时(604800秒)后的占用内存为:

X

根据实际无线电监测业务实际应用经验,但服务器运行时占用内存超过物理内存的80%以后,Java的GC回收内存速度将达不到分配内存的速度,从而导致内存泄露,引起系统崩溃。因此,将80%的物理内存使用率作为内存泄露的临界点。

8GB的物理内存的利用了80%的占用内存为:8·1024·1024·80%=6710886(KB)

推算出的X

用7×24小时的实测结果进行验证,无线电监测系统服务端7×24小时持续监测时资源监测情况的测试结果如图7所示。

从上图红色框选部分看出,系统占用内存已达到java分配上线,但持续监测一段时间后,但占用内存趋于稳定。

10个负载持续监测7×24小时后服务器的性能监测数据如图8所示。

持续监测7×24小时后,服务器的占用内存为4.88GB,物理内存使用率为74%,小于80%,验证推论合理。

本实施例的具体实现方案可以参见上述实施例中的相关说明,此处不再赘述。

可以理解的是,上述各实施例中相同或相似部分可以相互参考,在一些实施例中未详细说明的内容可以参见其他实施例中相同或相似的内容。

需要说明的是,在本发明的描述中,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是指至少两个。

流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行装置执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。

上述提到的存储介质可以是只读存储器,磁盘或光盘等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

采用了本发明的针对软件系统实现内存泄漏趋势快速判定的方法、装置、处理器及其计算机可读存储介质,替代了长时间监测稳定性的测试用例需求,节约了系统开发时bug回归的时间成本。本发明建立在成熟的大数据趋势分析模型的基础上,添加了无线电监测业务实际需求,提高了本发明在无线电业务行业软件测试的适用性。本发明针对无线电业务行业不同的监测需求及系统硬件配置情况,灵活的调整技术方案算法中涉及的基础参数,提高了本方案在无线电业务软件测试中的通用性。

在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号