CN117632379A - 一种java内存堆栈数据分析方法及系统 - Google Patents
一种java内存堆栈数据分析方法及系统 Download PDFInfo
- Publication number
- CN117632379A CN117632379A CN202410101382.0A CN202410101382A CN117632379A CN 117632379 A CN117632379 A CN 117632379A CN 202410101382 A CN202410101382 A CN 202410101382A CN 117632379 A CN117632379 A CN 117632379A
- Authority
- CN
- China
- Prior art keywords
- memory
- history process
- stack
- taking
- index
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 230000015654 memory Effects 0.000 title claims abstract description 462
- 238000000034 method Methods 0.000 title claims abstract description 362
- 238000007405 data analysis Methods 0.000 title claims abstract description 18
- 230000008569 process Effects 0.000 claims abstract description 311
- 238000013467 fragmentation Methods 0.000 claims abstract description 140
- 238000006062 fragmentation reaction Methods 0.000 claims abstract description 140
- 238000004140 cleaning Methods 0.000 claims abstract description 92
- 230000008859 change Effects 0.000 claims description 109
- 238000009826 distribution Methods 0.000 claims description 24
- 238000013528 artificial neural network Methods 0.000 claims description 14
- 230000001174 ascending effect Effects 0.000 claims description 9
- 238000004422 calculation algorithm Methods 0.000 claims description 9
- 238000003860 storage Methods 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 6
- 238000013507 mapping Methods 0.000 claims description 6
- 238000005259 measurement Methods 0.000 claims description 4
- 238000009825 accumulation Methods 0.000 claims description 2
- 238000012545 processing Methods 0.000 abstract description 3
- 230000006870 function Effects 0.000 description 6
- 230000000694 effects Effects 0.000 description 5
- 239000012634 fragment Substances 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000004064 recycling Methods 0.000 description 2
- ORILYTVJVMAKLC-UHFFFAOYSA-N Adamantane Natural products C1C(C2)CC3CC1CC2C3 ORILYTVJVMAKLC-UHFFFAOYSA-N 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000000739 chaotic effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000006403 short-term memory Effects 0.000 description 1
- 238000012549 training Methods 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Memory System (AREA)
Abstract
本申请涉及数字数据处理技术领域,提出了一种JAVA内存堆栈数据分析方法及系统,包括:获取栈内存信息数据及堆内存信息数据;根据栈内存信息数据获取近邻元素序列及近邻簇集;根据近邻元素序列及近邻簇集获取垃圾清理间隔指数;根据堆内存信息数据获取堆内存碎片化系数;根据垃圾清理间隔指数及堆内存碎片化系数获取内存碎片化程度指数;根据内存碎片化程度指数获取当前进程的内存碎片化程度指数及判断阈值;根据当前进程的内存碎片化程度指数及判断阈值对堆栈内存进行内存碎片化清理。本申请对历史进程内部以及历史进程之间的关系对堆栈内存进行分析,提高了堆栈内存碎片化清理的效率。
Description
技术领域
本申请涉及数字数据处理技术领域,具体涉及一种JAVA内存堆栈数据分析方法及系统。
背景技术
随着计算机信息技术的发展,JAVA虚拟机在JAVA领域发挥越来越重要的作用。JAVA虚拟机具有完善的硬体架构,如处理器、堆栈等,使得JAVA虚拟机具备较强的内存清理能力。在JAVA虚拟机中,一个进程包括许多线程,当进程在运行时会不断地产生对象,进而相应的产生堆内存信息与栈内存信息。而部分对象使用结束后就无用了,并且这部分对象产生的堆内存信息和栈内存信息也是无用的,程序会对该部分对象以及该部分对象产生的堆栈内存信息进行垃圾回收,达到释放内存空间的目的。
一般情况下,垃圾回收后的会产生大量的不连续的内存碎片,内存碎片的空间分布较为零散时,会使得堆栈内存中没有足够连续的内存。当下一个进程运行时,需要分配堆栈内存空间时,无法找到足够连续的内存而对进程的运行产生影响,此时往往需要进行内存碎片化清理。
但是,并非每次垃圾回收都需要内存碎片化清理,内存碎片化清理往往是在连续内存空间不够用的情况下进行的,以求提高JAVA虚拟机的性能和稳定性。传统方法中对内存碎片化清理主要基于内存碎片率,缺乏考虑连续内存大小以及下一进程需要申请空间大小的具体情况,导致JAVA虚拟机的堆栈内存清理效果较差,无法有效地提高JAVA虚拟机的性能。
发明内容
本申请提供一种JAVA内存堆栈数据分析方法及系统,以解决堆栈内存清理效果较差的问题,所采用的技术方案具体如下:
第一方面,本申请一个实施例提供了一种JAVA内存堆栈数据分析方法,该方法包括以下步骤:
获取堆栈信息数据,所述堆栈信息数据包括上一次内存碎片化清理后到当前时刻之间历史进程数量、每个历史进程的堆内存大小和堆内存位置、每个历史进程的线程数量、每个历史进程的每个线程的栈内存大小和栈内存位置;
根据每个历史进程的所有线程的栈内存大小获取每个历史进程的栈内存空间变化序列中每个元素的近邻元素序列,根据每个历史进程的所有线程的栈内存位置获取每个历史进程的栈内存位置变化序列中每个元素的近邻簇集;根据所述近邻元素序列和近邻簇集获取每个历史进程的垃圾清理间隔指数;
根据每个历史进程的堆内存大小及堆内存位置获取每个历史进程的堆内存碎片化系数,根据每个历史进程的堆内存碎片化系数及垃圾清理间隔指数获取每个历史进程的内存碎片化程度指数;利用LSTM长短时记忆神经网络基于所述内存碎片化程度指数获取当前进程的内存碎片化程度指数,根据所有历史进程的内存碎片化程度指数获取判断阈值;
利用判断阈值及当前进程的内存碎片化程度指数对堆栈内存进行内存碎片化清理。
优选的,所述根据每个历史进程的所有线程的栈内存大小获取每个历史进程的栈内存空间变化序列中每个元素的近邻元素序列,根据每个历史进程的所有线程的栈内存位置获取每个历史进程的栈内存位置变化序列中每个元素的近邻簇集的方法为:
将每个历史进程作为目标历史进程,将目标历史进程的所有线程的栈内存大小按照时间升序的顺序组成的序列作为目标历史进程的栈内存空间变化序列,将目标历史进程的所有线程的栈内存位置按照时间升序的顺序组成的序列作为目标历史进程的栈内存位置变化序列;
将目标历史进程的栈内存空间变化序列中每个元素作为第一目标元素,将与第一目标元素数值之间元素差值最小的第一预设参数个元素按照时间升序的顺序组成的序列作为第一目标元素的近邻元素序列;
将目标历史进程的栈内存位置变化序列中每个元素作为第二目标元素,将与第二目标元素位置之间欧氏距离最小的第一预设参数个元素组成的集合作为第二目标元素的近邻簇集。
优选的,所述根据所述近邻元素序列和近邻簇集获取每个历史进程的垃圾清理间隔指数的方法为:
根据每个历史进程的栈内存空间变化序列中每个元素的近邻元素序列获取每个历史进程的栈内存空间变化序列中每个元素的栈内存清理变化指数;
根据每个历史进程的栈内存位置变化序列中每个元素的近邻簇集获取每个历史进程的栈内存位置变化序列中每个元素的栈内存分布凌乱度;
计算每个历史进程的栈内存空间变化序列中所有元素的栈内存清理变化指数均值,计算每个历史进程的栈内存位置变化序列中所有元素的栈内存分布凌乱度均值,将以自然常数为底数,以所述栈内存清理变化指数均值为指数的负映射结果作为分子;将所述栈内存分布凌乱度均值与第二预设参数的和作为分母;计算分子与分母之比的相反数,将所述相反数与第二预设参数的和作为每个历史进程的垃圾清理间隔指数。
优选的,所述根据每个历史进程的栈内存空间变化序列中每个元素的近邻元素序列获取每个历史进程的栈内存空间变化序列中每个元素的栈内存清理变化指数的方法为:
将每个历史进程的栈内存空间变化序列中每个元素作为第三目标元素,计算第三目标元素的近邻元素序列内每个元素数值与上一个元素数值之差的绝对值,将所述绝对值在所述近邻元素序列上累加和的均值作为第一乘积因子;
计算第三目标元素的近邻元素序列与所述栈内存空间变化序列中每个元素的近邻元素序列之间的度量距离,将所述度量距离在栈内存空间变化序列上累加和的均值作为第二乘积因子;
将第一乘积因子与第二乘积因子的乘积作为第三目标元素的栈内存清理变化指数。
优选的,所述根据每个历史进程的栈内存位置变化序列中每个元素的近邻簇集获取每个历史进程的栈内存位置变化序列中每个元素的栈内存分布凌乱度的方法为:
将每个历史进程的栈内存位置变化序列中每个元素作为第四目标元素,计算第四目标元素的近邻簇集中每个元素与上一个元素之间的欧氏距离,将所述欧氏距离在所述近邻簇集上累加和的均值作为第一组成因子;
计算第四目标元素的近邻簇集与所述栈内存位置变化序列中每个元素的近邻簇集之间的杰卡德相似系数,将所述杰卡德相似系数与第三预设参数之和的倒数在所述栈内存位置变化序列上累加和的均值作为第二组成因子;
将第一组成因子与第二组成因子的乘积作为第四目标元素的栈内存分布凌乱度。
优选的,所述根据每个历史进程的堆内存大小及堆内存位置获取每个历史进程的内存碎片化程度指数的方法为:
将所有历史进程的堆内存位置作为DPC密度峰值聚类算法的输入,利用DPC密度峰值聚类算法获取每个历史进程的堆内存位置的局部密度,将每个历史进程的堆内存位置的局部密度作为每个历史进程的堆内存位置的连续存储指数;
将每个历史进程作为标记历史进程,将标记历史进程的上一个历史进程作为标记历史进程的相邻历史进程;
根据每个历史进程的堆内存大小及堆内存位置获取每个历史进程的进程连续性变化指数;
计算以自然常数为底数,以所述连续存储指数为指数的负映射结果,将所述负映射结果与进程连续性变化指数的乘积作为每个历史进程的堆内存碎片化系数;
将每个历史进程的垃圾清理间隔指数与堆内存碎片化系数的乘积作为每个历史进程的内存碎片化程度指数。
优选的,所述根据每个历史进程的堆内存大小及堆内存位置获取每个历史进程的进程连续性变化指数的方法为:
对于第一个历史进程,将0作为历史进程的进程连续性变化指数;
对于除第一个历史进程外的任意一个历史进程,计算历史进程的堆内存大小与历史进程的相邻历史进程的堆内存大小之差的绝对值,计算历史进程的堆内存位置与历史进程的相邻历史进程的堆内存位置之间的欧氏距离,将所述绝对值与欧氏距离的乘积作为历史进程的进程连续性变化指数。
优选的,所述利用LSTM长短时记忆神经网络基于所述内存碎片化程度指数获取当前进程的内存碎片化程度指数,根据所有历史进程的内存碎片化程度指数获取判断阈值的方法为:
将所有历史进程的内存碎片化程度指数作为LSTM长短时记忆神经网络的输入,将LSTM长短时记忆神经网络的输出作为当前进程的内存碎片化程度指数;
将所有历史进程的内存碎片化程度指数的最大值作为判断阈值。
优选的,所述利用判断阈值及当前进程的内存碎片化程度指数对堆栈内存进行内存碎片化清理的方法为:
通过内存清理平台获取当前进程的申请空间大小、每个历史进程的申请空间大小;
若当前进程的内存碎片化程度指数高于判断阈值,并且当前进程的申请空间大小高于所有历史进程的申请空间大小的最大值时,在当前进程运行之前对堆栈内存进行内存碎片化清理。
第二方面,本申请实施例还提供了一种JAVA内存堆栈数据分析系统,包括存储器、处理器以及存储在所述存储器中并在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意一项所述方法的步骤。
本申请的有益效果是:本申请根据栈内存信息数据获取栈内存空间变化序列及栈内存位置变化序列,根据栈内存空间变化序列及栈内存位置变化序列获取近邻元素序列及近邻簇集,根据近邻元素序列及近邻簇集获取栈内存清理变化指数及栈内存分布凌乱度,根据栈内存清理变化指数及栈内存分布凌乱度获取垃圾清理间隔指数,同时根据堆内存信息数据获取进程连续性变化指数,根据进程连续性变化指数获取堆内存碎片化系数,根据垃圾清理间隔指数及堆内存碎片化系数获取内存碎片化程度指数,利用LSTM长短时记忆神经网络基于内存碎片化程度指数得到当前进程的内存碎片化程度指数,根据历史进程的内存碎片化程度指数获取判断阈值,基于判断阈值及当前进程的内存碎片化程度指数对堆栈内存进行内存碎片化清理。其有益效果在于,通过历史进程内部以及历史进程之间的关系对堆栈内存进行分析得到内存碎片化程度指数,进而结合当前进程的内存碎片化程度指数对堆栈内存进行内存碎片化清理,避免当进程运行时无法找到足够连续的堆栈内存而对进程的运行产生影响,提高了堆栈内存碎片化清理的效率与效果。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一个实施例所提供的一种JAVA内存堆栈数据分析方法的流程示意图;
图2为本申请一个实施例所提供的一种JAVA内存堆栈数据分析方法的实施流程图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
请参阅图1,其示出了本申请一个实施例提供的一种JAVA内存堆栈数据分析方法的流程图,该方法包括以下步骤:
步骤S001,获取历史进程在垃圾回收后的堆内存信息数据和栈内存信息数据。
本申请为了更好的实现对堆栈内存的碎片化清理,通过JAVA虚拟机的内存清理平台获取从上一次内存碎片化清理后每个历史进程在垃圾回收后的堆栈信息数据,所述堆栈信息数据包括堆内存信息数据和栈内存信息数据,其中栈内存信息数据是指历史进程的每个线程的栈内存大小和栈内存位置,堆内存信息数据是指历史进程的堆内存大小和堆内存位置。除此之外,通过JAVA虚拟机的内存清理平台获取每个历史进程的线程的数量,以及上一次内存碎片化清理后到当前时刻之间所有历史进程的数量。
至此,得到每个历史进程在垃圾回收后的堆内存信息数据、栈内存信息数据,每个历史进程的线程的数量,以及上一次内存碎片化清理后到当前时刻之间所有历史进程的数量。
步骤S002,根据栈内存信息数据获取栈内存空间变化序列及栈内存位置变化序列,根据栈内存空间变化序列及栈内存位置变化序列获取近邻元素序列及近邻簇集,根据近邻元素序列及近邻簇集获取栈内存清理变化指数及栈内存分布凌乱度,根据栈内存清理变化指数及栈内存分布凌乱度获取垃圾清理间隔指数。
在历史进程运行结束后中,由于部分堆栈信息已经成为多余信息,即在之后进程运行时这部分堆栈信息是多余的,JAVA虚拟机中的程序会识别多余信息进行垃圾回收,从而达到释放内存空间的作用。但是,垃圾回收往往会遗留堆栈内存碎片化的问题,若不及时解决,会极大程度上影响后面进程的运行,产生进程的内存空间分配困难的问题。因此,基于上述在每次垃圾回收后收集的堆内存信息数据和栈内存信息数据进行内存碎片化的分析,避免内存碎片化处理的不及时,影响之后进程的运行。
进一步地,任意一个历史进程在垃圾回收结果后,若该历史进程的所有线程的栈内存大小变化较为混乱,说明垃圾回收后不同线程的栈帧中清理了较多的多余信息,导致不同线程的栈内存出现较大的差异,一定程度上越有可能出现内存碎片化现象;同时,不同线程的栈内存位置分布的越零散,说明垃圾回收后产生的内存零散化现象越明显。
具体地,基于上述分析,将每个历史进程作为目标历史进程,将目标历史进程的所有线程的栈内存大小按照时间升序的顺序组成的序列作为目标历史进程的栈内存空间变化序列,将目标历史进程的所有线程的栈内存位置按照时间升序的顺序组成的序列作为目标历史进程的栈内存位置变化序列。将目标历史进程的栈内存空间变化序列中每个元素作为第一目标元素,将与第一目标元素数值之间元素差值最小的K个元素按照时间升序的顺序组成的序列作为第一目标元素的近邻元素序列,K的经验取值为20。同理,将目标历史进程的栈内存位置变化序列中每个元素作为第二目标元素,将与第二目标元素位置之间欧氏距离最小的K个元素组成的集合作为第二目标元素的近邻簇集。
进一步地,计算每个历史进程的垃圾清理间隔指数:
式中,表示第i个历史进程的栈内存空间变化序列中第j个元素的栈内存清理变化指数,/>和/>分别表示第i个历史进程的栈内存空间变化序列中第j个元素的近邻元素序列内第g个、第g-1个元素数值,M表示第i个历史进程的栈内存空间变化序列中第j个元素的近邻元素序列内元素数目,/>和/>分别表示第i个历史进程的栈内存空间变化序列中第j个、第k个元素的近邻元素序列,/>表示/>距离函数,/>表示第i个历史进程的栈内存空间变化序列中第j个、第k个元素的近邻元素序列之间的/>距离,/>表示第i个历史进程的栈内存空间变化序列中元素数目;
表示第i个历史进程的栈内存位置变化序列中第j个元素的栈内存分布凌乱度,和/>分别表示第i个历史进程的栈内存位置变化序列中第j个元素的近邻簇集内第c个、第c-1个元素位置,/>表示欧氏距离函数,/>表示第i个历史进程的栈内存位置变化序列中第j个元素的近邻簇集内第c个、第c-1个元素位置之间的欧氏距离,/>表示第i个历史进程的栈内存位置变化序列中第j个元素的近邻簇集内元素数目,/>和/>分别表示第i个历史进程的栈内存位置变化序列中第j个、第d个元素的近邻簇集,/>表示杰卡德相似系数函数,/>表示第i个历史进程的栈内存位置变化序列中第j个、第d个元素的近邻簇集之间的杰卡德相似系数,/>为误差参数,避免分母为0,误差参数的经验取值为1,/>表示第i个历史进程的栈内存位置变化序列中元素数目;
表示第i个历史进程的垃圾清理间隔指数,/>表示以自然常数为底数的指数函数,/>表示第i个历史进程的栈内存空间变化序列中所有元素的栈内存清理变化指数均值,/>表示第i个历史进程的栈内存位置变化序列中所有元素的栈内存分布凌乱度均值。
第i个历史进程的栈内存空间变化序列中第j个元素的近邻元素序列内第g个、第g-1个元素数值之间的差异越大,即第一乘积因子/>越大,并且第i个历史进程的栈内存空间变化序列中第j个、第k个元素的近邻元素序列之间的/>距离越大,即第二乘积因子/>越大,说明不同线程的栈内存大小的差异性越大,由于随着垃圾清理回收产生内存碎片化现象会导致不同线程的栈内存大小存在差异,即栈内存清理变化情况越明显,则栈内存清理变化指数越大。另外,第i个历史进程的栈内存位置变化序列中第j个元素的近邻簇集内第c个、第c-1个元素位置之间的欧氏距离越大,即第一组成因子/>越大,并且第i个历史进程的栈内存位置变化序列中第j个、第d个元素的近邻簇集之间的杰卡德相似系数/>越小,即第二组成因子/>越大,说明不同线程的栈内存之间分布越零散,内存分布的越不连续,即栈内存分布的凌乱程度,则栈内存分布凌乱度越大。因此,第i个历史进程的栈内存空间变化序列中所有元素的栈内存清理变化指数均值/>越大,第i个历史进程的栈内存位置变化序列中所有元素的栈内存分布凌乱度均值/>越大,一定程度上越能说明垃圾回收产生内存碎片化现象,即垃圾清理回收使内存空间有较多的间隔,此时连续的内存空间越小,越需要进行内存碎片化清理,则垃圾清理间隔指数越大。
至此,得到每个历史进程的垃圾清理间隔指数。
步骤S003,根据堆内存信息数据获取进程连续性变化指数,根据进程连续性变化指数获取堆内存碎片化系数,根据垃圾清理间隔指数及堆内存碎片化系数获取内存碎片化程度指数,利用LSTM长短时记忆神经网络基于内存碎片化程度指数得到当前进程的内存碎片化程度指数。
进一步地,由于进程在运行时会不断地产生对象和回收对象,对象一般存储在堆内存中,而相邻进程之间堆内存的变化越大,说明此时相邻进程运行之间回收较多的对象,越有可能产生大量不连续的内存碎片。同时,堆内存之间存储位置的差别越大,说明内存碎片化清理的效果越差。
具体地,将上一次内存碎片化清理后到当前时刻之间所有历史进程的堆内存位置作为DPC密度峰值聚类算法(Density Peaks Clustering,DPC)的输入,截断距离的选取规则为:选择使平均每个堆内存位置周围距离小于截断距离的堆内存位置数目占所有堆内存位置数目的2%,将DPC密度峰值聚类算法的输出作为每个历史进程的堆内存位置的局部密度,将每个历史进程的堆内存位置的局部密度作为每个历史进程的堆内存位置的连续存储指数,DPC密度峰值聚类算法为公知技术,具体过程不再赘述。另外,为了便于后续的计算,除上一次内存碎片化清理后第一个历史进程外,将上一次内存碎片化清理后每个历史进程作为目标历史进程,将目标历史进程的上一个历史进程作为目标历史进程的相邻历史进程。
进一步地,基于上述分析,计算上一次内存碎片化清理后每个历史进程的内存碎片化程度指数:
式中,表示上一次内存碎片化清理后第i个历史进程的进程连续性变化指数,/>和/>分别表示上一次内存碎片化清理后第i个历史进程的堆内存大小、堆内存位置,/>和分别表示上一次内存碎片化清理后第i个历史进程的相邻历史进程的堆内存大小、堆内存位置,/>表示欧氏距离函数,i表示上一次内存碎片化清理后历史进程的序号,其中,V表示上一次内存碎片化清理后到当前时刻之间历史进程的数目;
表示上一次内存碎片化清理后第i个历史进程的堆内存碎片化系数,/>表示以自然常数为底数的指数函数,/>表示上一次内存碎片化清理后第i个历史进程的堆内存位置的连续存储指数;
表示上一次内存碎片化清理后第i个历史进程的内存碎片化程度指数,/>表示上一次内存碎片化清理后第i个历史进程的垃圾清理间隔指数。
上一次内存碎片化清理后第i个历史进程的堆内存大小与其相邻历史进程的堆内存大小之间的差异越大,并且上一次内存碎片化清理后第i个历史进程的堆内存位置与其相邻历史进程的堆内存位置之间的欧氏距离/>越大,说明历史进程与其相邻历史进程之间存在较大的差异,此时历史进程转变时堆内存中存在较多无用的对象,垃圾回收时做出了较多的清理,从而导致相邻历史进程之间连续性发生较大的变化,则进程连续性变化指数越大。同时,上一次内存碎片化清理后第i个历史进程的进程连续性变化指数/>越大,并且上一次内存碎片化清理后第i个历史进程的堆内存位置的连续存储指数/>越小,说明相邻历史进程之间连续性发生较大的变化,垃圾回收时做出了较多的清理,一定程度上反映了堆内存碎片化现象越严重,且上一次内存碎片化清理后第i个历史进程的堆内存位置的局部密度较小,说明历史进程的堆内存之间的分布越离散,即堆内存碎片化现象越严重,则堆内存碎片化系数越大。因此,上一次内存碎片化清理后第i个历史进程的堆内存碎片化系数/>越大,且上一次内存碎片化清理后第i个历史进程的垃圾清理间隔指数越大,说明此时栈内存和堆内存都发生较大程度上的垃圾回收,越有可能导致内存碎片化,则内存碎片化程度指数越大。
内存碎片化程度指数一定程度上反映了每次历史进程结束后由垃圾回收产生内存碎片化的严重程度,内存碎片化程度指数越大,则内存碎片化的严重程度越高。
进一步地,为了判断当前时刻是否需要进行内存碎片化清理,需要对当前进程的内存碎片化程度指数进行预测。将上一次内存碎片化清理后所有历史进程的内存碎片化程度指数作为LSTM长短时记忆神经网络(Long Short Term Memory,LSTM)的输入,即将上一次内存碎片化清理后前V个历史进程的内存碎片化程度指数作为LSTM长短时记忆神经网络的输入,以Adam算法为优化算法,以平均绝对误差为损失函数,将LSTM长短时记忆神经网络的输出作为第V+1个进程的内存碎片化程度指数,即当前进程的内存碎片化程度指数,神经网络的训练为公知技术,具体过程不再赘述。
至此,得到当前进程的内存碎片化程度指数。
步骤S004,根据历史进程的内存碎片化程度指数获取判断阈值,基于判断阈值及当前进程的内存碎片化程度指数对堆栈内存进行内存碎片化清理。
进一步地,将上一次内存碎片化清理后所有历史进程的内存碎片化程度指数的最大值作为判断阈值,将判断阈值记为。为了选择合适的内存碎片化清理的时间,提高内存碎片化清理的效率,若当前进程的内存碎片化程度指数高于判断阈值/>,且当前进程的申请空间大小高于上一次内存碎片化清理后所有历史进程的申请空间大小的最大值时,在当前进程运行之前对堆栈内存进行内存碎片化清理,通过新建临时堆栈内存空间,将所有旧的堆栈内存数据拷贝整理到临时堆栈内存空间并使之没有内存碎片,从而旧的有内存碎片的堆栈内存空间释放掉,将临时堆栈内存空间作为新的堆栈内存空间,以此避免当进程运行时无法找到足够连续的堆栈内存而对进程的运行产生影响,内存碎片化清理为公知技术,具体过程不再赘述。本申请的实施流程图如图2所示。
至此,完成一种JAVA内存堆栈数据分析方法。
基于与上述方法相同的发明构思,本申请实施例还提供了一种JAVA内存堆栈数据分析系统,包括存储器、处理器以及存储在所述存储器中并在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述一种JAVA内存堆栈数据分析方法中任意一项所述方法的步骤。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种JAVA内存堆栈数据分析方法,其特征在于,该方法包括以下步骤:
获取堆栈信息数据,所述堆栈信息数据包括上一次内存碎片化清理后到当前时刻之间历史进程数量、每个历史进程的堆内存大小和堆内存位置、每个历史进程的线程数量、每个历史进程的每个线程的栈内存大小和栈内存位置;
根据每个历史进程的所有线程的栈内存大小获取每个历史进程的栈内存空间变化序列中每个元素的近邻元素序列,根据每个历史进程的所有线程的栈内存位置获取每个历史进程的栈内存位置变化序列中每个元素的近邻簇集;根据所述近邻元素序列和近邻簇集获取每个历史进程的垃圾清理间隔指数;
根据每个历史进程的堆内存大小及堆内存位置获取每个历史进程的堆内存碎片化系数,根据每个历史进程的堆内存碎片化系数及垃圾清理间隔指数获取每个历史进程的内存碎片化程度指数;利用LSTM长短时记忆神经网络基于所述内存碎片化程度指数获取当前进程的内存碎片化程度指数,根据所有历史进程的内存碎片化程度指数获取判断阈值;
利用判断阈值及当前进程的内存碎片化程度指数对堆栈内存进行内存碎片化清理。
2.根据权利要求1所述的一种JAVA内存堆栈数据分析方法,其特征在于,所述根据每个历史进程的所有线程的栈内存大小获取每个历史进程的栈内存空间变化序列中每个元素的近邻元素序列,根据每个历史进程的所有线程的栈内存位置获取每个历史进程的栈内存位置变化序列中每个元素的近邻簇集的方法为:
将每个历史进程作为目标历史进程,将目标历史进程的所有线程的栈内存大小按照时间升序的顺序组成的序列作为目标历史进程的栈内存空间变化序列,将目标历史进程的所有线程的栈内存位置按照时间升序的顺序组成的序列作为目标历史进程的栈内存位置变化序列;
将目标历史进程的栈内存空间变化序列中每个元素作为第一目标元素,将与第一目标元素数值之间元素差值最小的第一预设参数个元素按照时间升序的顺序组成的序列作为第一目标元素的近邻元素序列;
将目标历史进程的栈内存位置变化序列中每个元素作为第二目标元素,将与第二目标元素位置之间欧氏距离最小的第一预设参数个元素组成的集合作为第二目标元素的近邻簇集。
3.根据权利要求1所述的一种JAVA内存堆栈数据分析方法,其特征在于,所述根据所述近邻元素序列和近邻簇集获取每个历史进程的垃圾清理间隔指数的方法为:
根据每个历史进程的栈内存空间变化序列中每个元素的近邻元素序列获取每个历史进程的栈内存空间变化序列中每个元素的栈内存清理变化指数;
根据每个历史进程的栈内存位置变化序列中每个元素的近邻簇集获取每个历史进程的栈内存位置变化序列中每个元素的栈内存分布凌乱度;
计算每个历史进程的栈内存空间变化序列中所有元素的栈内存清理变化指数均值,计算每个历史进程的栈内存位置变化序列中所有元素的栈内存分布凌乱度均值,将以自然常数为底数,以所述栈内存清理变化指数均值为指数的负映射结果作为分子;将所述栈内存分布凌乱度均值与第二预设参数的和作为分母;计算分子与分母之比的相反数,将所述相反数与第二预设参数的和作为每个历史进程的垃圾清理间隔指数。
4.根据权利要求3所述的一种JAVA内存堆栈数据分析方法,其特征在于,所述根据每个历史进程的栈内存空间变化序列中每个元素的近邻元素序列获取每个历史进程的栈内存空间变化序列中每个元素的栈内存清理变化指数的方法为:
将每个历史进程的栈内存空间变化序列中每个元素作为第三目标元素,计算第三目标元素的近邻元素序列内每个元素数值与上一个元素数值之差的绝对值,将所述绝对值在所述近邻元素序列上累加和的均值作为第一乘积因子;
计算第三目标元素的近邻元素序列与所述栈内存空间变化序列中每个元素的近邻元素序列之间的度量距离,将所述度量距离在栈内存空间变化序列上累加和的均值作为第二乘积因子;
将第一乘积因子与第二乘积因子的乘积作为第三目标元素的栈内存清理变化指数。
5.根据权利要求3所述的一种JAVA内存堆栈数据分析方法,其特征在于,所述根据每个历史进程的栈内存位置变化序列中每个元素的近邻簇集获取每个历史进程的栈内存位置变化序列中每个元素的栈内存分布凌乱度的方法为:
将每个历史进程的栈内存位置变化序列中每个元素作为第四目标元素,计算第四目标元素的近邻簇集中每个元素与上一个元素之间的欧氏距离,将所述欧氏距离在所述近邻簇集上累加和的均值作为第一组成因子;
计算第四目标元素的近邻簇集与所述栈内存位置变化序列中每个元素的近邻簇集之间的杰卡德相似系数,将所述杰卡德相似系数与第三预设参数之和的倒数在所述栈内存位置变化序列上累加和的均值作为第二组成因子;
将第一组成因子与第二组成因子的乘积作为第四目标元素的栈内存分布凌乱度。
6.根据权利要求1所述的一种JAVA内存堆栈数据分析方法,其特征在于,所述根据每个历史进程的堆内存大小及堆内存位置获取每个历史进程的堆内存碎片化系数,根据每个历史进程的堆内存碎片化系数及垃圾清理间隔指数获取每个历史进程的内存碎片化程度指数的方法为:
将所有历史进程的堆内存位置作为DPC密度峰值聚类算法的输入,利用DPC密度峰值聚类算法获取每个历史进程的堆内存位置的局部密度,将每个历史进程的堆内存位置的局部密度作为每个历史进程的堆内存位置的连续存储指数;
将每个历史进程作为标记历史进程,将标记历史进程的上一个历史进程作为标记历史进程的相邻历史进程;
根据每个历史进程的堆内存大小及堆内存位置获取每个历史进程的进程连续性变化指数;
计算以自然常数为底数,以所述连续存储指数为指数的负映射结果,将所述负映射结果与进程连续性变化指数的乘积作为每个历史进程的堆内存碎片化系数;
将每个历史进程的垃圾清理间隔指数与堆内存碎片化系数的乘积作为每个历史进程的内存碎片化程度指数。
7.根据权利要求6所述的一种JAVA内存堆栈数据分析方法,其特征在于,所述根据每个历史进程的堆内存大小及堆内存位置获取每个历史进程的进程连续性变化指数的方法为:
对于第一个历史进程,将0作为历史进程的进程连续性变化指数;
对于除第一个历史进程外的任意一个历史进程,计算历史进程的堆内存大小与历史进程的相邻历史进程的堆内存大小之差的绝对值,计算历史进程的堆内存位置与历史进程的相邻历史进程的堆内存位置之间的欧氏距离,将所述绝对值与欧氏距离的乘积作为历史进程的进程连续性变化指数。
8.根据权利要求1所述的一种JAVA内存堆栈数据分析方法,其特征在于,所述利用LSTM长短时记忆神经网络基于所述内存碎片化程度指数获取当前进程的内存碎片化程度指数,根据所有历史进程的内存碎片化程度指数获取判断阈值的方法为:
将所有历史进程的内存碎片化程度指数作为LSTM长短时记忆神经网络的输入,将LSTM长短时记忆神经网络的输出作为当前进程的内存碎片化程度指数;
将所有历史进程的内存碎片化程度指数的最大值作为判断阈值。
9.根据权利要求1所述的一种JAVA内存堆栈数据分析方法,其特征在于,所述利用判断阈值及当前进程的内存碎片化程度指数对堆栈内存进行内存碎片化清理的方法为:
通过内存清理平台获取当前进程的申请空间大小、每个历史进程的申请空间大小;
若当前进程的内存碎片化程度指数高于判断阈值,并且当前进程的申请空间大小高于所有历史进程的申请空间大小的最大值时,在当前进程运行之前对堆栈内存进行内存碎片化清理。
10.一种JAVA内存堆栈数据分析系统,包括存储器、处理器以及存储在所述存储器中并在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-9任意一项所述一种JAVA内存堆栈数据分析方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410101382.0A CN117632379B (zh) | 2024-01-25 | 2024-01-25 | 一种java内存堆栈数据分析方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410101382.0A CN117632379B (zh) | 2024-01-25 | 2024-01-25 | 一种java内存堆栈数据分析方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117632379A true CN117632379A (zh) | 2024-03-01 |
CN117632379B CN117632379B (zh) | 2024-03-26 |
Family
ID=90035821
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410101382.0A Active CN117632379B (zh) | 2024-01-25 | 2024-01-25 | 一种java内存堆栈数据分析方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117632379B (zh) |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11232162A (ja) * | 1998-02-19 | 1999-08-27 | Fujitsu Ltd | ガベージコレクション方法 |
CN1306644A (zh) * | 1999-03-31 | 2001-08-01 | 皇家菲利浦电子有限公司 | 调度无用单元回收的方法 |
CN101221535A (zh) * | 2008-01-25 | 2008-07-16 | 中兴通讯股份有限公司 | Java虚拟机的垃圾回收移动通信终端及回收方法 |
CN103514102A (zh) * | 2013-10-25 | 2014-01-15 | 中国联合网络通信集团有限公司 | 一种Java虚拟机实现内存垃圾回收的方法及装置 |
CN105975398A (zh) * | 2015-12-07 | 2016-09-28 | 国家电网公司 | 一种内存碎片管理方法 |
CN111949563A (zh) * | 2020-08-12 | 2020-11-17 | 上海龙旗科技股份有限公司 | 用于内存碎片整理的方法与设备 |
CN113138857A (zh) * | 2021-05-31 | 2021-07-20 | 上海传英信息技术有限公司 | 内存清理方法、移动终端及存储介质 |
CN116302461A (zh) * | 2022-08-05 | 2023-06-23 | 阿里巴巴(中国)有限公司 | 深度学习内存分配优化方法和系统 |
CN117193993A (zh) * | 2022-05-25 | 2023-12-08 | 北京罗克维尔斯科技有限公司 | 内存空间分配方法、装置及电子设备 |
-
2024
- 2024-01-25 CN CN202410101382.0A patent/CN117632379B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11232162A (ja) * | 1998-02-19 | 1999-08-27 | Fujitsu Ltd | ガベージコレクション方法 |
CN1306644A (zh) * | 1999-03-31 | 2001-08-01 | 皇家菲利浦电子有限公司 | 调度无用单元回收的方法 |
CN101221535A (zh) * | 2008-01-25 | 2008-07-16 | 中兴通讯股份有限公司 | Java虚拟机的垃圾回收移动通信终端及回收方法 |
CN103514102A (zh) * | 2013-10-25 | 2014-01-15 | 中国联合网络通信集团有限公司 | 一种Java虚拟机实现内存垃圾回收的方法及装置 |
CN105975398A (zh) * | 2015-12-07 | 2016-09-28 | 国家电网公司 | 一种内存碎片管理方法 |
CN111949563A (zh) * | 2020-08-12 | 2020-11-17 | 上海龙旗科技股份有限公司 | 用于内存碎片整理的方法与设备 |
CN113138857A (zh) * | 2021-05-31 | 2021-07-20 | 上海传英信息技术有限公司 | 内存清理方法、移动终端及存储介质 |
CN117193993A (zh) * | 2022-05-25 | 2023-12-08 | 北京罗克维尔斯科技有限公司 | 内存空间分配方法、装置及电子设备 |
CN116302461A (zh) * | 2022-08-05 | 2023-06-23 | 阿里巴巴(中国)有限公司 | 深度学习内存分配优化方法和系统 |
Non-Patent Citations (1)
Title |
---|
王伟;杨克峤;周寻;曹志伟;杨珉;: "一种高效的垃圾收集器CCone", 小型微型计算机系统, no. 02, 15 February 2010 (2010-02-15) * |
Also Published As
Publication number | Publication date |
---|---|
CN117632379B (zh) | 2024-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2019237811A1 (zh) | 一种神经网络的内存分配方法及装置 | |
Friedman et al. | An algorithm for finding nearest neighbors | |
CN107957848B (zh) | 重删处理方法及存储设备 | |
WO2014126822A1 (en) | Determining documents that match a query | |
CN111309976A (zh) | 一种面向收敛型图应用的GraphX数据缓存方法 | |
CN117632379B (zh) | 一种java内存堆栈数据分析方法及系统 | |
CN110456731B (zh) | 一种数控切削几何刀轨特征提取方法 | |
CN112395273A (zh) | 一种数据处理方法及装置、存储介质 | |
CN116561230B (zh) | 一种基于云计算的分布式存储与检索系统 | |
CN110597792A (zh) | 基于同期线损数据融合的多级冗余数据融合方法及装置 | |
CN108628678B (zh) | 内存参数的确定方法、装置及设备 | |
CN116341770B (zh) | 基于聚苯乙烯生产数据的生产能力预测方法及系统 | |
CN112508363A (zh) | 基于深度学习的电力信息系统状态分析方法及装置 | |
CN110275895A (zh) | 一种缺失交通数据的填充设备、装置及方法 | |
CN115718691A (zh) | 微服务系统的故障根因定位方法、装置和设备 | |
CN110751400A (zh) | 一种风险评估方法及装置 | |
WO2016122318A1 (en) | A computer implemented method for generating a variant call file | |
CN114943021A (zh) | 一种tb级增量数据筛选方法和装置 | |
CN114647679A (zh) | 一种基于数值特征聚类的水文时间序列模体挖掘方法 | |
CN110442555B (zh) | 一种选择性预留空间的减少碎片的方法及系统 | |
CN110309139B (zh) | 高维近邻对搜索方法和系统 | |
CN115793987B (zh) | 一种磨损均衡的方法、装置、电子设备和存储介质 | |
CN110222842A (zh) | 一种网络模型训练方法、装置及存储介质 | |
CN115688034B (zh) | 数值型和类别型的混合资料的提取和缩减方法 | |
CN113076348B (zh) | 一种策略信息管理方法、装置、服务器及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |