一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种云桌面虚拟机内存动态回收方法与流程

2022-12-19 20:43:01 来源:中国专利 TAG:

1.本发明涉及内存管理技术领域,具体为一种云桌面虚拟机内存动态回收方法。


背景技术:

2.随着云技术的迅速发展,企业上云成为大势所趋,使用云技术的企业级应用可以很好地缓和不断增大的用户数与基础硬件资源有限的矛盾,在最小的硬件投资中获取最大的资源利用率。
3.在现有使用虚拟桌面与云技术相结合的环境中,最为核心的内容在于虚拟资源的调度与虚拟机的迁移。软件开发过程中,内存管理是一个复杂的问题,对于功能复杂的程序而言,使用动态分配是不可避免的。因为多个功能所使用的内存数量一直会变化,某些情况下会使用较多的内存,另一些情况下使用较少的内存。一般动态分配的内存都由操作系统来管理,从一个叫做“堆(heap)”的内存区域分配,当程序调用接口函数申请内存时,操作系统从堆空间中找到一块空闲区域,分配给程序;当程序释放内存时,操作系统再把内存块标记为空闲,可以供重新分配。对于设计不良的程序,其中可能会有之前分配的动态内存已经不用,但是没有释放的情况,这就是所谓的“内存泄漏(memoryleak)”。一旦长期运行的程序中存在内存泄漏,堆内存不断被分配出去而不被释放,久而久之,可用内存越来越少,最终,再也无法成功分配出内存,导致功能失效,甚至装置崩溃。
4.内存回收就是将程序中已经不使用但是又没释放的动态内存块自动释放的过程。在内存回收后,不被使用的内存块被归还到堆中,可再次被动态分配,从而避免内存泄漏情况的出现。
5.目前在云桌面虚拟机中进行内存回收可用的方案包括:
6.1)使用支持内存回收的语言开发
7.目前,支持垃圾回收的语言包括java、.net等,或者python等脚本语言。它们的特点是程序并不被编译成特定cpu的机器码,而是被编译成一种中间代码,然后由一段解释程序在运行时动态将中间代码翻译为机器码执行,这段解释程序被称作虚拟机(vm)。在程序运行过程中,虚拟机会实时管理内存分配和释放的情况,对于已经不引用的内存,就自动释放掉,这样就避免了内存泄漏的情况。不同的语言使用的内存回收策略也有所不同。
8.使用支持垃圾回收的语言开发,就可以在很大程度上降低内存管理的复杂性,开发者仅需在需要分配内存的时候分配即可,而将释放内存的过程交给语言本身的内存回收机制完成,从而避免了内存泄漏的情况。
9.这种方式的缺点在于:解释执行的语言在性能上比编译为机器代码执行的语言要低,加之嵌入式设备硬件性能有限,在实时性要求比较高的场合并不适用。
10.2)使用智能指针管理内存
11.在c 中,由于语言本身没有提供内存回收机制,为了降低内存管理的复杂度,引入了“智能指针”的概念。智能指针的概念是和“裸指针”相对应的,裸指针就是传统的指针,表示的是内存的地址;而智能指针则是经过封装的对象,它除了保存了内存地址外,还保存
了一些诸如引用计数之类的附加信息。智能指针的实现使用了c 语言的特性,在智能指针析构时,会自动修改其所指向的内存块的引用计数,当引用计数变为0时,就将指向的内存块释放掉。其由于智能指针重载了传统指针具备的几种运算符(如*、-》等),因此在编程中基本无需特别关心智能指针的操作,只需按照传统指针使用即可。
12.目前在常用的c 开发框架中均提供了智能指针实现,例如boost,qt等。这种机制的缺点是引入了自定义的内存管理机制,增加了开发时的工作量。无法管理在第三方库中分配的动态内存,难免出现内存泄漏。此外,智能指针的实现使用了c 的语言特性,在某些仅能使用c语言的场合无法使用。
13.3)使用基于所有者的对象树管理机制
14.由于在实际使用的情况中,程序中动态分配的对象一般在生存期上有依存关系,子对象的生存期一般不会超过父对象的生存期,所以将程序动态分配的对象按依存关系组织成一个对象树。当父对象析构时,将父对象的所有子对象全部释放。这样,应用程序就只需管理好处于顶层对象的生存期即可,大大降低了由于程序中的失误造成内存泄漏的可能性。
15.这种机制的缺点与方法2)中相同,由于引入了自定义的管理机制,因此无法用来管理第三方库中分配的动态内存。


技术实现要素:

16.(一)解决的技术问题
17.针对现有技术的不足,本发明提供了一种云桌面虚拟机内存动态回收方法。
18.(二)技术方案
19.为实现上述目的,本发明提供如下技术方案:一种云桌面虚拟机内存动态回收方法,包括以下步骤:
20.s1:确定软件程序能访问到的区域;
21.s2:分别进行扫描静态内存区域、扫描栈内存区域、扫描可访问内存块集合中的内存块;
22.s3:监控虚拟机内存使用状态,确定处于未使用状态的内存;
23.s4:回收所述处于未使用状态的内存,更新内存分配信息;
24.s5:接管程序/系统动态内存的分配和释放过程,分配动态内存时,将分配到的动态内存块加入动态内存块集合中;释放内存时,将其从动态内存块集合中移除;
25.s6:满足触发扫描条件时,开始扫描可访问的内存区域,寻找内存地址范围在动态内存块集合的内存块范围中但未标记为可访问的内存块,将其标记为可访问并加入可访问内存块集合;再循环扫描可访问内存块集合中的内存块对应区域,寻找并继续向可访问内存块集合中增加符合上述条件的内存块,直至可访问内存块集合中的内存块全被扫描过;
26.s7:为首次分配给虚拟机且处于未使用状态的内存设置第一标志位,根据所述空闲内存链表记录确定处于未使用状态的内存包括:将除设置第一标志位之外的未使用内存确定为处于未使用状态的内存;
27.s8:内网用户和外网用户登录到虚拟桌面中进行工作,进行的修改、生成的数据与文件均以增量的形式保存于数据中心,保证虚拟桌面在回收资源和再发放资源的过程中,
用户所做的所有修改均被保存;
28.s9:根据用户的重要程度,分为动态虚拟桌面与固定虚拟桌面,所述固定虚拟桌面的资源在任何情况下均不被回收;所述动态虚拟桌面在用户处于非活动状态下,如遇资源紧缺的情况,则将用户操作的内容以增量的方式保存于数据中心,然后将动态桌面的虚拟资源释放到资源池中,准备下次的资源再分配;
29.s10:数据中心由使用资源池中分配的资源创建的虚拟机组成,用于存储虚拟服务器集群与虚拟桌面集群产生的数据以及快照备份,包括若干数据中心节点;
30.s11:回收所述处于未使用状态的内存,更新内存分配信息包括:锁定处于未使用状态的内存,将所述内存进行置零处理,释放所述内存;
31.更新内存分配信息,解锁所述内存,以便于重新分配所述内存。
32.优选的,所述未使用状态的内存为分配时间大于第一设定阈值且使用频率低于第二设定阈值的内存。
33.优选的,所述为保证应用服务器集群服务的高可用,保持冗余服务不处于同一台物理服务器上。
34.优选的,所述在正常运行的情况下,对数据中心只进行资源扩充,不进行资源回收。
35.优选的,所述监控虚拟机内存使用状态,确定处于未使用状态的内存包括:利用虚拟机空闲内存链表记录内存使用状态,根据所述空闲内存链表记录确定处于未使用状态的内存。
36.优选的,所述s5中,接管程序动态内存的分配和释放过程采用宏定义方式,将程序中调用的内存分配和释放函数重定向到自定义的函数中。
37.(三)有益效果
38.与现有技术相比,本发明提供了一种云桌面虚拟机内存动态回收方法,具备以下有益效果:
39.1、该一种云桌面虚拟机内存动态回收方法,通过本方法,对系统的整体影响较小,不会带来使用性能上的损失,从而提高使用效率和体验。
40.2、该一种云桌面虚拟机内存动态回收方法,通过本方法,可以监控虚拟机的内存使用状态,确定未使用的内存,且进行回收,从而对回收的进行重新分配,进行合理的分配,提高使用体验。
41.3、该一种云桌面虚拟机内存动态回收方法,通过本方法,对低利用率的虚拟机进行资源重分配:对于活跃度低、业务少或负载小的虚拟机,将其闲置的资源进行回收,以分配到需要的虚拟机中去。
具体实施方式
42.下面将结合本发明的实施例,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
43.一种云桌面虚拟机内存动态回收方法,包括以下步骤:
44.s1:确定软件程序能访问到的区域;
45.s2:分别进行扫描静态内存区域、扫描栈内存区域、扫描可访问内存块集合中的内存块;
46.s3:监控虚拟机内存使用状态,确定处于未使用状态的内存;
47.s4:回收所述处于未使用状态的内存,更新内存分配信息;
48.s5:接管程序/系统动态内存的分配和释放过程,分配动态内存时,将分配到的动态内存块加入动态内存块集合中;释放内存时,将其从动态内存块集合中移除;
49.s6:满足触发扫描条件时,开始扫描可访问的内存区域,寻找内存地址范围在动态内存块集合的内存块范围中但未标记为可访问的内存块,将其标记为可访问并加入可访问内存块集合;再循环扫描可访问内存块集合中的内存块对应区域,寻找并继续向可访问内存块集合中增加符合上述条件的内存块,直至可访问内存块集合中的内存块全被扫描过;
50.s7:为首次分配给虚拟机且处于未使用状态的内存设置第一标志位,根据所述空闲内存链表记录确定处于未使用状态的内存包括:将除设置第一标志位之外的未使用内存确定为处于未使用状态的内存;
51.s8:内网用户和外网用户登录到虚拟桌面中进行工作,进行的修改、生成的数据与文件均以增量的形式保存于数据中心,保证虚拟桌面在回收资源和再发放资源的过程中,用户所做的所有修改均被保存;
52.s9:根据用户的重要程度,分为动态虚拟桌面与固定虚拟桌面,所述固定虚拟桌面的资源在任何情况下均不被回收;所述动态虚拟桌面在用户处于非活动状态下,如遇资源紧缺的情况,则将用户操作的内容以增量的方式保存于数据中心,然后将动态桌面的虚拟资源释放到资源池中,准备下次的资源再分配;
53.s10:数据中心由使用资源池中分配的资源创建的虚拟机组成,用于存储虚拟服务器集群与虚拟桌面集群产生的数据以及快照备份,包括若干数据中心节点;
54.s11:回收所述处于未使用状态的内存,更新内存分配信息包括:锁定处于未使用状态的内存,将所述内存进行置零处理,释放所述内存;更新内存分配信息,解锁所述内存,以便于重新分配所述内存。
55.所述未使用状态的内存为分配时间大于第一设定阈值且使用频率低于第二设定阈值的内存。
56.所述为保证应用服务器集群服务的高可用,保持冗余服务不处于同一台物理服务器上。
57.所述在正常运行的情况下,对数据中心只进行资源扩充,不进行资源回收。
58.所述监控虚拟机内存使用状态,确定处于未使用状态的内存包括:利用虚拟机空闲内存链表记录内存使用状态,根据所述空闲内存链表记录确定处于未使用状态的内存。
59.所述s5中,接管程序动态内存的分配和释放过程采用宏定义方式,将程序中调用的内存分配和释放函数重定向到自定义的函数中。
60.尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献