一种jvm能耗控制方法及装置制造方法

文档序号:6541978阅读:401来源:国知局
一种jvm能耗控制方法及装置制造方法
【专利摘要】本发明公开了一种JVM能耗控制方法及装置,包括监控JVM中的内存垃圾回收情况,以获取JVM的内存使用信息;在JVM内存空闲时,关闭其对应的物理内存。本发明利用利用JVM中已有的内存垃圾回收机制,并根据同一物理内存设备在休眠状态和空闲状态下能耗开销的不同,在JVM内存空闲时,转换对应的物理内存状态为休眠状态,简单、高效地控制了与计算平台的能耗问题,有效降低了系统能耗,从而达到了降低内存能耗的目的。
【专利说明】一种JVM能耗控制方法及装置
【技术领域】
[0001]本发明涉及计算机信息处理技术,尤指一种云计算平台中的Java虚拟机(JVM,Java Virtual Machine)能耗控制方法及装置。
【背景技术】
[0002]云计算作为一种新型的计算方式,以其高可扩展性和高可用性等优点迅速成为学术界和产业界的研究热点。随着云计算的迅速发展,数据中心的数量和规模也迅猛增长,能耗问题也越显突出。从2005年到2010年,全球的数据中心增加了约56%。据估计,一个拥有50000个计算节点的数据中心每年耗电量超过I亿千瓦时。高能耗已成为云计算系统的一个主要问题,且随着近年来云计算规模的日益扩大,其能耗开销也愈加严重。云计算平台中的能耗管理已成为最具挑战性的研究课题之一。
[0003]根据云平台运营统计数据,电能消耗主要分布在以下三个方面:IT主设备如Java虚拟机用电约占45%-55% ;机房环境用电主要包括机房照明、空调制冷和制热等,其中空调用电超过了总用电量的约40%以上;电源系统用电接近总用电量的10%。目前,在很多为实现节能减排目标的研究中,采取的运营措施重点放在了机房环境用电和电源系统用电两方面,对于IT主设备用电缺乏有效控制手段。而根据经验数据,降低一个单位IT主设备的能耗,相当于降低2?3个单位环境系统的能耗,因此,控制IT主设备用电才是降低整体能耗指标的关键所在。
[0004]目前,针对云计算平台的能耗问题,国内外提出了多种方法,大致包括:
[0005]一种是动态电压调整(DVS, Dynamic Voltage Scaling)方法。DVS技术主要针对处理器等电压/频率可调节的IT设备。在完成同样任务的情况下,IT设备稳定在低频率上时能耗会较低。如果能以较低处理器频率满足任务的性能要求,则可以降低系统能耗。DVS方法的关键是要正确预测工作负载对IT设备的需求,并合理分配配额,而这很难实现。
[0006]另一种是动态电源管理技术。云计算系统中许多部件,如磁盘驱动器、通讯网卡、内存等具有多种功耗模式,这类部件也称为功率可管理部件(PMC,Power ManageableComponent)。实验观察发现,计算机系统的许多部件大部分时间均处于空闲状态。一般地,PMC休眠模式的功耗比运行模式低很多,系统可通过将空闲PMC设置为低功耗休眠模式,以降低PMC空闲时间的功耗。这种方法的关键问题是要解决如何知道系统部件何时处于空闲状态,即要设计额外的内存监控机制,增加了系统的复杂度。
[0007]还有一种是资源调度算法。云计算平台将各种计算资源、存储资源和网络资源整合在一起,形成资源池。不同资源的能耗通常都不相同,不好的资源调度方式会使得能用较低能耗资源就可以执行的任务调用了高能耗资源,这是形成云计算系统高能耗的原因之一。因此,通过对资源的合理分配及调度,可以降低资源的能耗,但是,由于资源种类多、规模大,在任务与资源之间往往是多对多的关系,因此,给资源的调度带来了一定的难度。目前还没有提出好的资源调度解决方案。
【发明内容】

[0008]为了解决上述技术问题,本发明提供了一种JVM能耗控制方法及装置,能够简单、高效地控制云计算平台的能耗问题,有效地降低系统能耗。
[0009]为了达到本发明目的,本发明提供了一种JVM Java虚拟机能耗控制方法,包括:
[0010]监控JVM中的内存垃圾回收情况,以获取JVM的内存使用信息;
[0011]在JVM内存空闲时,关闭其对应的物理内存。
[0012]对于所述JVM所在JVM集群中的各JVM,该方法之前还包括:
[0013]系统初始化,关闭暂不用的物理内存;
[0014]初始化用于存储JVM内存与虚拟化内存之间的映射关系的虚拟化内存映射表、用于存储虚拟化内存与物理内存之间的映射关系的物理内存映射表;获取所有JVM的虚拟机ID ;
[0015]设置内存监控时间间隔T,以及老年区内存空闲允许阈值V。
[0016]所述获取JVM中的内存使用信息包括:
[0017]按照预先设置的时间间隔T,监控所述JVM中的内存垃圾回收情况,以获取所述JVM集群中所有JVM的虚拟机ID对应的JVM内存使用信息;
[0018]所述JVM内存使用信息至少包括垃圾回收的类型及时间、老年代内存已使用比例、老年代内存剩余大小、垃圾碎片比率及其它相关信息。
[0019]所述确定JVM是否空闲包括:
[0020]将所述JVM集群中所有虚拟机ID放入队列Q,将队列Q中队首元素的值赋给变量V,在判断出变量V对应的JVM未进行次要垃圾回收minor GC且变量v对应的JVM已进行全局垃圾回收Full GC,则确定JVM内存有空闲;
[0021]该方法还包括:更新所述物理内存映射表。
[0022]关闭所述JVM空闲内存对应的物理内存之前,还包括:移动内存垃圾碎片,通过移动虚拟化内存关闭物理内存块,并更新所述虚拟化内存映射表。
[0023]如果判断出所述变量V对应的JVM已进行minor GC,且有对象从新生代进入老年代,则获取老年代内存已使用比例r,老年代的当前剩余空间大小S ;
[0024]该方法还包括:在老年代当前剩余空间大小小于预先设置的老年区内存空闲允许阈值时,将处于休眠状态物理内存块的状态转换为启用状态。
[0025]所述将处于休眠状态物理内存块转换为启用状态之前,该方法还包括:移动虚拟化内存,并更新所述虚拟化内存映射表。
[0026]在判断出变量V对应的JVM已进行minor GC,但是没有对象从新生代进入老年代时;或者,在判断出老年代当前剩余空间大小不小于预先设置的老年区内存空闲允许阈值时;或者,在判断出变量V对应的JVM已进行minorGC,但是变量v对应的JVM未进行FullGC时;或者,在老年代当前剩余空间大小小于预先设置的老年区内存空闲允许阈值的情况下,所述更新虚拟化内存映射表后;或者,所述更新物理内存映射表后;或者,在判断出变量V对应的JVM未进行minor GC且变量v对应的JVM已进行Full GC的情况下,没有物理内存块可关闭时;该方法还包括:
[0027]判断对所述JVM集群中的JVM是否轮询完成,如果没有,继续对所述JVM集群中的下一个JVM进行监控,直至所述JVM集群中的JVM轮询完成。[0028]本发明还提供了一种JVM能耗控制装置,至少包括内存垃圾监控单元、虚拟化内存管理单元,以及处理单元,其中,
[0029]内存垃圾监控单元,用于监控JVM集群中JVM的内存垃圾回收情况,并将JVM内存使用信息发送给虚拟化内存管理单元;
[0030]虚拟化内存管理单元,用于根据接收到的JVM内存使用信息,在自身可以处理时,移动虚拟化内存,并更新虚拟化内存映射表;在自身不能处理时,通知处理单元;根据来自处理单元的反馈信息管理自身存储的虚拟化内存映射表、物理内存映射表;
[0031]处理单元,用于接收来自虚拟化内存管理单元的通知,控制物理内存的状态变化,包括休眠状态和启用状态之间的状态控制,并将处理后信息反馈给虚拟化内存管理单元。
[0032]所述内存垃圾监控单元,具体用于按照预先设置的时间间隔T,获取JVM集群中所有JVM的虚拟机ID对应的JVM内存使用情况,将所有虚拟机ID放入队列Q,将队列Q中队首元素的值赋给变量V ;在判断出变量V对应的JVM已进行minor GC,且有对象从新生代进入老年代,则获取老年代内存已使用比例r,当前剩余空间大小S ;在当前剩余空间大小S小于老年区内存空闲允许阈值V时,向所述虚拟化内存管理单元发送第一通知;在判断出变量V对应的JVM未进行minor GC,且变量v对应的JVM已进行全局GC,则移动内存垃圾碎片,向所述虚拟化内存管理单元发送第三通知;
[0033]所述虚拟化内存管理单元,具体用于接收到来自内存垃圾监控单元的第一通知,判断出自身可以通过虚拟化内存 解决,移动虚拟化内存,并更新虚拟化内存映射表;如果判断出自身不能通过虚拟化内存解决,则向所述处理单元发送第二通知;接收到来自内存垃圾监控单元的第三通知,判断出自身可以通过移动虚拟化内存关闭物理内存块,则移动虚拟化内存并更新虚拟化内存映射表;判断出有物理内存块可关闭,向所述处理单元发送第四通知;
[0034]所述处理单元,具体用于接收到来自虚拟化内存管理单元的第二通知,将处于休眠状态的物理内存块的状态转换为启用状态,并通知所述虚拟化内存管理单元更新物理内存映射表;接收到来自所述虚拟化内存管理单元的第四通知,将空闲的内存块从启用状态转换为休眠状态,并通知所述虚拟化内存管理单元更新物理内存映射表。
[0035]与现有技术相比,本发明只需通过监控JVM中的内存垃圾回收情况,以获取JVM的内存使用信息^JVM内存空闲时,关闭其对应的物理内存。本发明利用JVM中已有的内存垃圾回收机制,并根据同一物理内存设备在休眠状态和空闲状态下能耗开销的不同,在JVM内存空闲时,转换对应的物理内存状态为休眠状态,简单、高效地控制了与计算平台的能耗问题,有效降低了系统能耗,从而达到了降低内存能耗的目的。
[0036]本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
【专利附图】

【附图说明】
[0037]附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。
[0038]图1为本发明JVM能耗控制装置的组成结构示意图;[0039]图2为本发明JVM能耗控制方法的流程图;
[0040]图3为本发明JVM能耗控制方法的实施例的流程图。
【具体实施方式】
[0041]为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
[0042]在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0043]对于云计算平台的能耗,有一大部分是消耗在设备上,包括CPU、内存、磁盘设备、网络设备等,而对于这些物理设备,可以有关闭、休眠、空闲、工作等状态,其中,关闭状态和休眠状态的能耗要远低于空闲状态和工作状态的能耗。而对于内存来说,将空闲内存子块的状态转换为休眠状态是降低功耗的最直接的方法。
[0044]Java虚拟机(JVM, Java Virtual Machine)的内存分为方法区、栈、堆、寄存器等,JVM在进行内存垃圾回收(GC,Garbage Collection)时,主要是针对“堆”这部分内存进行的。目前,商用JVM的垃圾收集大都采用分代收集(Generational Collection)算法。分代算法将堆分成两个或多个对象,对象按照生存期分组,每一个子堆为一“代”对象服务。垃圾收集器将从最年轻的子堆(这个子堆称为新生代)中收集这些对象,如果一个对象经历了几次垃圾收集后仍然存活,那么,这个对象就成长为生存期更高的一代,当超过预设的生存期阈值时,该对象会被转移到另外一个子堆(这个子堆称为老年代)中去。
[0045]分代垃圾回收算法的实现包括次要垃圾回收(minor GC)和全局垃圾回收(fullGC),minor GC主要回收新生代的内存垃圾,且把到达一定生存期的对象转移到老年代,minor GC进行的频率较高;而full GC则同时回收新生代和老年代的内存垃圾。
[0046]根据Java的实践应用,发明人发现,对于Java应用系统,存在老年代内存中有较多的内存长时间空闲时,JVM几乎不进行全局内存垃圾回收,或者,进行全局内存垃圾回收的时间间隔较长等特点,此时,发明人认为这部分内存是可以转入休眠状态的,以降低系统能耗。
[0047]图1为本发明JVM能耗控制装置的组成结构示意图,如图1所示,至少包括内存垃圾监控单元、虚拟化内存管理单元,以及处理单元,其中,
[0048]内存垃圾监控单元,用于监控JVM中的内存垃圾回收情况,并将JVM内存使用信息发送给虚拟化内存管理单元。具体地,对JVM集群中各个JVM的内存使用情况进行监控,JVM内存使用信息至少包括垃圾回收的类型及时间、老年代内存已使用比例、老年代内存剩余大小、垃圾碎片比率及其它相关信息等。
[0049]虚拟化内存管理单元,用于根据接收到的JVM内存使用信息,在自身可以处理时,移动虚拟化内存,并更新虚拟化内存映射表;在自身不能处理时,通知处理单元;根据来自处理单元的反馈信息管理自身存储的虚拟化内存映射表、物理内存映射表。其中,
[0050]虚拟化内存映射表用于存储JVM内存与虚拟化内存之间的映射关系;物理内存映射表用于存储虚拟化内存与物理内存之间的映射关系。虚拟化内存指虚拟化的内存资源。物理内存指物理内存基础资源。
[0051]处理单元,用于接收来自虚拟化内存管理单元的通知,控制物理内存的状态变化,包括休眠状态和启用状态之间的状态控制,并将处理后信息反馈给虚拟化内存管理单元。
[0052]具体地,
[0053]内存垃圾监控单元,按照预先设置的时间间隔T,获取JVM集群中所有vmid (用于标识JVM集群中不同的JVM)对应的JVM内存使用情况,将所有vmid放入队列Q,将队列Q中队首元素的值赋给变量V,在判断出变量V对应的JVM已进行了 minor GC,且有对象从新生代进入老年代,则获取老年代内存已使用比例r,当前剩余空间大小S ;在当前剩余空间大小S小于老年区内存空闲允许阈值V时,向虚拟化内存管理单元发送第一通知;在判断出变量V对应的JVM未进行minor GC,且变量v对应的JVM进行了全局GC,则移动内存垃圾碎片,向虚拟化内存管理单元发送第三通知;
[0054]虚拟化内存管理单元,接收到来自内存垃圾监控单元的第一通知,判断出自身可以通过虚拟化内存解决(即自身空闲的虚拟化内存,大于老年代内存空闲允许阈值V与当年剩余空间大小S之差的值),移动虚拟化内存,并更新虚拟化内存映射表;如果判断出自身不能通过虚拟化内存解决,则向处理单元发送第二通知;接收到来自内存垃圾监控单元的第三通知,判断出自身可以通过移动虚拟化内存关闭物理内存块(即判断当清理内存垃圾碎片后,空闲的这部分虚拟化内存移动后可以关闭原本对应的物理内存块),则移动虚拟化内存并更新虚拟化内存映射表;判断出有物理内存块可关闭,向处理单元发送第四通知;
[0055]处理单元,接收到来自虚拟化内存管理单元的第二通知,将处于休眠状态的物理内存块的状态转换为启用状态,并通知虚拟化内存管理单元更新物理内存映射表;接收到来自虚拟化内存管理单元的第四通知,将空闲的内存块从启用状态转换为休眠状态,并通知所述虚拟化内存管理单元更新物理内存映射表。
[0056]需要说明的是,在系统初始化时,会关闭暂不用的物理内存;初始化虚拟化内存映射表、物理内存映射表;获取所有JVM的虚拟机ID (vmid);设置内存监控时间间隔T,以及老年区内存空闲允许阈值V。具体实现属于本领域技术人员的惯用技术手段,也不用于限定本发明的保护范围,这里不再赘述。
[0057]本发明装置利用JVM中已有的内存垃圾回收机制,并根据同一物理内存设备在休眠状态和空闲状态下能耗开销的不同,在JVM内存空闲时,转换对应的物理内存状态为休眠状态,简单、高效地控制了与计算平台的能耗问题,有效降低了系统能耗,从而达到了降低内存能耗的目的。
[0058]图2为本发明JVM能耗控制方法的流程图,如图2所示,包括:
[0059]步骤200:监控JVM中的内存垃圾回收情况,以获取JVM的内存使用信息。
[0060]本步骤之前还包括:系统初始化,关闭暂不用的物理内存;初始化虚拟化内存映射表、物理内存映射表;获取所有JVM的虚拟机ID (vmid);设置内存监控时间间隔T,以及老年区内存空闲允许阈值V。其中,虚拟化内存映射表用于存储JVM内存与虚拟化内存之间的映射关系;物理内存映射表用于存储虚拟化内存与物理内存之间的映射关系。虚拟化内存指虚拟化的内存资源。物理内存指物理内存基础资源。
[0061]本步骤具体包括:按照预先设置的时间间隔T,监控JVM中的内存垃圾回收情况,以获取JVM集群中所有vmid对应的JVM内存使用信息,至少包括垃圾回收的类型及时间、老年代内存已使用比例、老年代内存剩余大小、垃圾碎片比率及其它相关信息等。
[0062]步骤201:在JVM内存空闲时,关闭其对应的物理内存。
[0063]本步骤中确定JVM是否空闲包括:
[0064]将所有vmid放入队列Q,将队列Q中队首元素的值赋给变量V,在判断出变量V对应的JVM未进行minor GC且变量v对应的JVM已进行了全局GC,则确定JVM内存有空闲,此时关闭该JVM空闲内存对应的物理内存,并更新物理内存映射表。其中,如何关闭JVM空闲内存对应的物理内存,是本领域技术人员的惯用技术手段,具体实现并不用于限定本发明的保护范围,这里不再赘述。
[0065]在关闭JVM空闲内存对应的物理内存之前,本步骤还包括:移动内存垃圾碎片,通过移动虚拟化内存关闭物理内存块,并更新虚拟化内存映射表。具体实现属于本领域技术人员的常用技术手段,这里不再赘述。
[0066]进一步地,如果判断出变量V对应的JVM进行了minor GC,且有对象从新生代进入老年代,则获取老年代内存已使用比例r,老年代的当前剩余空间大小S ;本发明方法还包括:在老年代当前剩余空间大小小于预先设置的老年区内存空闲允许阈值时,将处于休眠状态物理内存块的状态转换为启用状态。其中,在将处于休眠状态物理内存块转换为启用状态之前,该方法还包括:移动虚拟化内存,并更新虚拟化内存映射表。
[0067]本发明方法还包括:在判断出变量V对应的JVM进行了 minor GC,但是没有对象从新生代进入老年代时;或者,在判断出老年代当前剩余空间大小不小于预先设置的老年区内存空闲允许阈值时;或者,在判断出变量V对应的JVM进行了 minor GC,但是变量v对应的JVM未进行Full GC时;或者,在老年代当前剩余空间大小小于预先设置的老年区内存空闲允许阈值的情况下,更新虚拟化内存映射表后;或者,更新物理内存映射表后;或者,在判断出变量V对应的JVM未进行minor GC且变量v对应的JVM已进行了 Full GC的情况下,没有物理内存块可关闭时,本发明方法还包括:判断对JVM集群中的JVM是否轮询完成,如果没有返回步骤200继续对下一个JVM进行监控,直至JVM集群中的JVM轮询完成。
[0068]本发明方法利用JVM中已有的内存垃圾回收机制,并根据同一物理内存设备在休眠状态和空闲状态下能耗开销的不同,在JVM内存空闲时,转换对应的物理内存状态为休眠状态,简单、高效地控制了与计算平台的能耗问题,有效降低了系统能耗,从而达到了降低内存能耗的目的。
[0069]下面结合实施例对本发明方法进行详细描述。
[0070]图3为本发明JVM能耗控制方法的实施例的流程图,如图3所示,包括:
[0071]步骤300:系统初始化,具体包括:初始化虚拟化内存映射表、物理内存映射表;获取JVM集群中所有JVM的虚拟机ID (vmid)设置内存监控时间间隔T,及老年区内存空闲允
许阈值V。
[0072]步骤301:虚拟化内存管理单元根据JVM的分配,优化虚拟化内存映射表、物理内存映射表;处理单元关闭暂不用的物理内存。
[0073]其中,优化虚拟化内存映射表、物理内存映射表具体包括:根据JVM分配情况,发现哪些JVM中有空闲JVM内存,移动这部分JVM内存对应的虚拟化内存,以优化虚拟化内存映射表;同时,在空闲内存对应的虚拟化内存移动后,调整该虚拟化内存对应的物理内存块,以优化物理内存映射表。。
[0074]步骤302:内存垃圾监控单元按照预先设置的时间间隔T,获取所有vmid对应的JVM内存使用情况,并将所有vmid放入队列Q。
[0075]步骤303:系统移除队列Q中队首元素并赋值给变量V。
[0076]步骤304:内存垃圾监控单元判断变量V对应的JVM是否进行了 minorGC,如果已进行,则进入步骤305 ;否则进入步骤313。
[0077]步骤305:内存垃圾监控单元判断是否有对象从新生代进入老年代,如果有,则进行步骤306 ;否则进入步骤24。
[0078]步骤306:内存垃圾监控单元获取老年代内存已使用比例r,以及当前剩余空间大小S0
[0079]步骤307:系统管理模块判断是否老年代的当前剩余空间大小S是否小于预先设置的老年区内存空闲允许阈值V,若小于,则进入步骤308 ;如果不小于则进行步骤24。
[0080]步骤308:虚拟化内存管理单元判断是否可以通过移动虚拟化内存解决,如果可以,则进入步骤309 ;否则进入步骤311。
[0081]步骤309:虚拟化内存管理单元移动虚拟化内存。
[0082]步骤310:更新虚拟化内存映射表。之后转入步骤24。
[0083]步骤311:处理单元将一个或多个休眠状态物理内存块转为启用状态。
[0084]步骤312:更新物理内存映射表。之后转入步骤24。
[0085]步骤313:内存垃圾监控单元判断变量V对应的JVM是否进行了全局GC,若以已进行,则进入步骤314 ;否则,转到步骤24。
[0086]步骤314 JVM的内存垃圾回收器进行内存垃圾碎片移动
[0087]步骤315:虚拟化内存管理单元判断是否可以通过移动虚拟化内存来关闭物理内存块,如果可以,则进入步骤316 ;否则返回步骤312。
[0088]步骤316:虚拟化内存管理单元移动虚拟化内存。
[0089]步骤317:修改虚拟化内存映射表。
[0090]步骤318:虚拟化内存管理单元判断是否有物理内存块可关闭,如果有,则进入步骤319 ;否则转到步骤24。
[0091]步骤319:处理单元将空闲的内存块从启用状态转为休眠状态。之后返回步骤312。
[0092]步骤320:系统判断队列Q是否为空,如果为空,则进入步骤321 ;否则返回步骤303。
[0093]步骤321:判断是否结束,若内存优化完毕,则结束,否则返回步骤302。也就说,在对JVM集群中的所有JVM轮询完成后结束。
[0094]本发明方法利用JVM中已有的内存垃圾回收机制,并根据同一物理内存设备在休眠状态和空闲状态下能耗开销的不同,在JVM内存空闲时,转换对应的物理内存状态为休眠状态,简单、高效地控制了与计算平台的能耗问题,有效降低了系统能耗,从而达到了降低内存能耗的目的。
[0095]虽然本发明所揭露的实施方式如上,但所述的内容仅为便于理解本发明而采用的实施方式,并非用以限定本发明。任何本发明所属领域内的技术人员,在不脱离本发明所揭露的精神和范围的前提下,可以在实施的形式及细节上进行任何的修改与变化,但本发明的专利保护范围,仍须以所附的权利要求书所界定的范围为准。
【权利要求】
1.一种JVM Java虚拟机能耗控制方法,其特征在于,包括: 监控JVM中的内存垃圾回收情况,以获取JVM的内存使用信息; 在JVM内存空闲时,关闭其对应的物理内存。
2.根据权利要求1所述的JVM能耗控制方法,其特征在于,对于所述JVM所在JVM集群中的各JVM,该方法之前还包括: 系统初始化,关闭暂不用的物理内存; 初始化用于存储JVM内存与虚拟化内存之间的映射关系的虚拟化内存映射表、用于存储虚拟化内存与物理内存之间的映射关系的物理内存映射表;获取所有JVM的虚拟机ID ; 设置内存监控时间间隔T,以及老年区内存空闲允许阈值V。
3.根据权利要求2所述的JVM能耗控制方法,其特征在于,所述获取JVM中的内存使用信息包括: 按照预先设置的时间间隔T,监控所述JVM中的内存垃圾回收情况,以获取所述JVM集群中所有JVM的虚拟机ID对应的JVM内存使用信息; 所述JVM内存使用信息至少包括垃圾回收的类型及时间、老年代内存已使用比例、老年代内存剩余大小、垃圾碎片比率及其它相关信息。
4.根据权利要求3所述的JVM能耗控制方法,其特征在于,所述确定JVM是否空闲包括:` 将所述JVM集群中所有虚拟机ID放入队列Q,将队列Q中队首元素的值赋给变量V,在判断出变量V对应的JVM未进行次要垃圾回收minor GC且变量v对应的JVM已进行全局垃圾回收Full GC,则确定JVM内存有空闲; 该方法还包括:更新所述物理内存映射表。
5.根据权利要求4所述的JVM能耗控制方法,其特征在于,关闭所述JVM空闲内存对应的物理内存之前,还包括:移动内存垃圾碎片,通过移动虚拟化内存关闭物理内存块,并更新所述虚拟化内存映射表。
6.根据权利要求4所述的JVM能耗控制方法,其特征在于,如果判断出所述变量V对应的JVM已进行minor GC,且有对象从新生代进入老年代,则获取老年代内存已使用比例r,老年代的当前剩余空间大小S ; 该方法还包括:在老年代当前剩余空间大小小于预先设置的老年区内存空闲允许阈值时,将处于休眠状态物理内存块的状态转换为启用状态。
7.根据权利要求6所述的JVM能耗控制方法,其特征在于,所述将处于休眠状态物理内存块转换为启用状态之前,该方法还包括:移动虚拟化内存,并更新所述虚拟化内存映射表。
8.根据权利要求4~7任一项所述的JVM能耗控制方法,其特征在于,在判断出变量V对应的JVM已进行minor GC,但是没有对象从新生代进入老年代时;或者,在判断出老年代当前剩余空间大小不小于预先设置的老年区内存空闲允许阈值时;或者,在判断出变量V对应的JVM已进行minor GC,但是变量v对应的JVM未进行Full GC时;或者,在老年代当前剩余空间大小小于预先设置的老年区内存空闲允许阈值的情况下,所述更新虚拟化内存映射表后;或者,所述更新物理内存映射表后;或者,在判断出变量V对应的JVM未进行minor GC且变量v对应的JVM已进行Full GC的情况下,没有物理内存块可关闭时;该方法还包括: 判断对所述JVM集群中的JVM是否轮询完成,如果没有,继续对所述JVM集群中的下一个JVM进行监控,直至所述JVM集群中的JVM轮询完成。
9.一种JVM能耗控制装置,其特征在于,至少包括内存垃圾监控单元、虚拟化内存管理单元,以及处理单元,其中, 内存垃圾监控单元,用于监控JVM集群中JVM的内存垃圾回收情况,并将JVM内存使用信息发送给虚拟化内存管理单元; 虚拟化内存管理单元,用于根据接收到的JVM内存使用信息,在自身可以处理时,移动虚拟化内存,并更新虚拟化内存映射表;在自身不能处理时,通知处理单元;根据来自处理单元的反馈信息管理自身存储的虚拟化内存映射表、物理内存映射表; 处理单元,用于接收来自虚拟化内存管理单元的通知,控制物理内存的状态变化,包括休眠状态和启用状态之间的状态控制,并将处理后信息反馈给虚拟化内存管理单元。
10.根据权利要求9所述的JVM能耗控制装置,其特征在于, 所述内存垃圾监控单元,具体用于按照预先设置的时间间隔T,获取JVM集群中所有JVM的虚拟机ID对应的JVM内存使用情况,将所有虚拟机ID放入队列Q,将队列Q中队首元素的值赋给变量V ;在判断出变量V对应的JVM已进行minor GC,且有对象从新生代进入老年代,则获取老年代内存已使用比例r,当前剩余空间大小S ;在当前剩余空间大小S小于老年区内存空闲允许阈值V时,向所述虚拟化内存管理单元发送第一通知;在判断出变量V对应的JVM未进行minor GC,且变量v对应的JVM已进行全局GC,则移动内存垃圾碎片,向所述虚拟化内存管理单元发送第三通知; 所述虚拟化内存管理单元,具体用于接收到来自内存垃圾监控单元的第一通知,判断出自身可以通过虚拟 化内存解决,移动虚拟化内存,并更新虚拟化内存映射表;如果判断出自身不能通过虚拟化内存解决,则向所述处理单元发送第二通知;接收到来自内存垃圾监控单元的第三通知,判断出自身可以通过移动虚拟化内存关闭物理内存块,则移动虚拟化内存并更新虚拟化内存映射表;判断出有物理内存块可关闭,向所述处理单元发送第四通知; 所述处理单元,具体用于接收到来自虚拟化内存管理单元的第二通知,将处于休眠状态的物理内存块的状态转换为启用状态,并通知所述虚拟化内存管理单元更新物理内存映射表;接收到来自所述虚拟化内存管理单元的第四通知,将空闲的内存块从启用状态转换为休眠状态,并通知所述虚拟化内存管理单元更新物理内存映射表。
【文档编号】G06F9/455GK103870315SQ201410117546
【公开日】2014年6月18日 申请日期:2014年3月26日 优先权日:2014年3月26日
【发明者】王少锋, 张云勇, 陶冶, 张尼 申请人:中国联合网络通信集团有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1