一种资源回收方法及装置制造方法及图纸

技术编号:15690656 阅读:46 留言:0更新日期:2017-06-24 03:13
本申请公开了一种资源回收方法及装置,用以解决现有技术在对应用进行热部署升级时,产生的资源泄露问题。方法包括:针对部署在容器中的应用,在运行所述容器的虚拟机中创建所述应用对应的租户,以使所述应用使用所述租户在所述虚拟机中的资源运行;在对所述应用进行热部署升级时,根据所述应用对应的租户,对所述应用使用的所述资源进行回收。

Resource recycling method and device

The invention discloses a resource recovery method and a device for solving the resource leakage problem when the prior art is used for the thermal deployment and upgrading of an application. Methods include: for application deployment in the container, creating the corresponding application in the virtual machine to run the container in the tenants, to enable the application using the tenant resources to run on the virtual machine; hot deployment in the application of the upgrade, according to the corresponding application tenants, recovery of the resources used by the application.

【技术实现步骤摘要】
一种资源回收方法及装置
本申请涉及计算机
,尤其涉及一种资源回收方法及装置。
技术介绍
目前,JavaEE的应用往往是运行在应用对应的容器中的,同一个容器中可能运行有很多不同的应用,例如,如图1所示,运行在JAVA虚拟机(JAVAVirtualMachine,JVM)上的JAVA容器中部署了三个应用,此时假设需要对其中的应用3进行版本升级,在对应用3进行版本升级时,往往需要对运行该JAVA容器的JVM进行重启,而对JVM的重启将会影响JAVA容器中其他应用的使用。为了避免在对运行在容器中的某一应用进行升级时需要重启虚拟机,而影响该容器中其他应用的运行的问题,在现有技术中,大部分容器均支持采用热部署的方式对运行在容器中的应用进行版本升级。其中,热部署是指在不重启运行容器的虚拟机的情况下,完成对运行在该容器上的某个应用的版本升级。在对应用进行热部署时,首先需要对该应用已经部署到容器中的旧版本进行退部署,即对已经部署到容器上的旧版本应用进行删除。然而部署在容器中的应用运行时所需的资源均保存在运行该容器的虚拟机上,应用在运行时可以通过容器调用虚拟机中相关资源,即应用在运行时将会使用虚拟机中的相关资源,由于在现有技术中应用通过容器调用虚拟机中的资源运行时,虚拟机无法确定该次调用是容器中哪个应用发起的,因而在对应用进行退部署后,可能无法对已经退部署的应用在运行中所使用的虚拟机资源进行回收,从而产生资源泄露问题。由于热部署过程中存在资源泄露的问题,应用在经过多次热部署后,在退部署旧版本应用的过程中产生的资源泄露将会越来越严重,进而造成操作系统可分配给应用运行的资源也就越来越少,严重时可能造成操作系统无法为新版本应用的运行分配足够的资源,进而无法运行新版本的应用。因而,如何避免在使用热部署技术对应用进行版本更新时,产生的资源泄露问题,成为现有技术亟待解决的问题。
技术实现思路
本申请实施例提供一种资源回收方法及装置,用以解决现有技术在对应用进行热部署升级时,产生的资源泄露问题。本申请实施例采用下述技术方案:一种资源回收方法,包括:针对部署在容器中的应用,在运行所述容器的虚拟机中创建所述应用对应的租户,以使所述应用使用所述租户在所述虚拟机中的资源运行;在对所述应用进行热部署升级时,根据所述应用对应的租户,对所述应用使用的所述资源进行回收。一种资源回收装置,包括:租户创建单元,针对部署在容器中的应用,在运行所述容器的虚拟机中创建所述应用对应的租户,以使所述应用使用所述租户在所述虚拟机中的资源运行;资源回收单元,在对所述应用进行热部署升级时,根据所述应用对应的租户,对所述应用使用的所述资源进行回收。本申请实施例采用的上述至少一个技术方案能够达到以下有益效果:采用本申请实施例提供的资源回收方法,由于可以针对部署在容器中的应用,在运行所述容器的虚拟机中创建所述应用对应的租户,以使所述应用使用所述租户在所述虚拟机中的资源运行,因而可以根据应用在虚拟机中对应的租户中的资源,确定应用运行时使用的虚拟机中的资源,则在对应用进行热部署升级时,可以根据该应用对应的租户,对所述应用使用的资源进行回收,从而避免了在对应用进行热部署升级时,产生的资源泄露问题。附图说明此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:图1为现有技术提供的一种虚拟机、容器以及应用的架构图;图2为本申请实施例提供的一种资源回收方法的具体流程示意图;图3为本申请实施例提供的一种虚拟机、容器以及应用的架构图;图4为本申请实施例提供的一种根租户与用户租户的关系示意图;图5为本申请实施例提供的一种应用自身创建的线程的线程栈示意图;图6为本申请实施例提供的一种由根租户的线程切换得到的线程的线程栈示意图;图7为本申请实施例提供的一种资源回收装置的具体结构示意图。具体实施方式为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。以下结合附图,详细说明本申请各实施例提供的技术方案。本申请实施例提供的资源回收方法的执行主体,可以但不限于为手机、平板电脑、个人电脑(PersonalComputer,PC)、智能电视以及任何可以运行应用的终端设备中的至少一种。此外,该方法的执行主体还可以是服务器,比如,web应用服务器,等等。为便于描述,下文以该方法的执行主体为个人电脑为例,对该方法的实施方式进行介绍。可以理解,该方法的执行主体为个人电脑只是一种示例性的说明,并不应理解为对该方法的限定。本申请实施例提供了一种资源回收方法,用以解决现有技术在对应用进行热部署升级时产生的资源泄露问题。该方法的具体实现流程示意图如图2所示,可以包括下述步骤:步骤11,针对部署在容器中的应用,在运行所述容器的虚拟机中创建所述应用对应的租户,以使所述应用使用所述租户在所述虚拟机中的资源运行;其中,所述应用可以使根据JAVA语言编写的JAVA应用,也可以是根据C/C++语言编写的应用,或者也还可以是根据PHP语言编写的应用,等等。本申请实施例对应用所使用的编程语言不做限定,为例便于描述,本申请可以以根据JAVA语言编写的JAVA应用为例进行介绍。一般地,安装在终端上的应用在运行时,往往需要在终端上为该应用预先设置运行环境(比如预先编写代码以管理对象关系),则在终端上安装不同应用时,均需要为该应用设置运行环境,该过程较为繁琐,因而现有技术提供了一种用于部署应用的容器,该容器中预先设置有应用的运行环境,应用可以直接部署在该容器中进行运行,例如,一般可以把JAVA应用部署在JAVA容器上。需要说明的是,这里所说的部署,是指首次将应用安装到该应用对应的容器中,与后文所述的对应用进行热部署升级并不相同。同时,由于编写应用所使用的程序语言可能与该应用期望运行的平台所使用的程序语言不相同,例如,使用JAVA语言编写的JAVA应用,为了能够在不同平台上运行,往往需要编译成不同的目标代码。为了避免在不同平台上运行应用时,需要对应用进行重新编码,我们引入了虚拟机,通过虚拟机可以屏蔽与运行平台相关的信息,进而使得应用只需生成在虚拟机上运行的目标代码,就可以在多种平台上不加修改地运行。例如,在运行JAVA应用时所使用的JAVA虚拟机(JAVAVirtualMachine,JVM)。一般地,在同一个容器中往往可以部署多个应用,而这些应用在运行时所需的资源均保存在运行该容器的虚拟机上,应用可以通过容器来调用虚拟机中的相关资源来运行。然而,目前由于容器对虚拟机是不透明的,即在应用通过容器调用虚拟机中的资源进行运行时,虚拟机仅可以确定是该容器对虚拟机中资源的调用,而无法确定此次调用时容器中哪个应用发起的,这也就造成无法确定容器中的应用在运行时使用了虚拟机中的哪些资源,进而在对该应用进行热部署升级时,由于无法确定该应用在虚拟机中所使用的资源,因而无法对该应用使用的资源进行回收。例如,如图3所示,在容本文档来自技高网
...
一种资源回收方法及装置

【技术保护点】
一种资源回收方法,其特征在于,包括:针对部署在容器中的应用,在运行所述容器的虚拟机中创建所述应用对应的租户,以使所述应用使用所述租户在所述虚拟机中的资源运行;在对所述应用进行热部署升级时,根据所述应用对应的租户,对所述应用使用的所述资源进行回收。

【技术特征摘要】
1.一种资源回收方法,其特征在于,包括:针对部署在容器中的应用,在运行所述容器的虚拟机中创建所述应用对应的租户,以使所述应用使用所述租户在所述虚拟机中的资源运行;在对所述应用进行热部署升级时,根据所述应用对应的租户,对所述应用使用的所述资源进行回收。2.如权利要求1所述的方法,其特征在于,在运行所述容器的虚拟机中创建所述应用对应的租户,具体包括:通过所述容器,在所述虚拟机中创建与所述应用对应的租户上下文,所述租户上下文用于表征所述应用对应的租户。3.如权利要求1所述的方法,其特征在于,所述虚拟机中还包含根租户,所述根租户用于向所述应用对应的租户提供运行所述应用所需的部分或全部资源。4.如权利要求1所述的方法,其特征在于,所述应用使用的资源,包括以下至少一种:所述应用使用的所述虚拟机中的线程;所述应用打开的所述虚拟机中的文件句柄;所述应用使用的所述虚拟机中的共享变量对象。5.如权利要求4所述的方法,其特征在于,所述应用使用的所述虚拟机中的线程,包括以下至少一种:由所述根租户的线程切换得到的线程;所述应用自身创建的线程。6.如权利要求5所述的方法,其特征在于,当所述虚拟机中的线程为由所述根租户的线程切换得到的线程时,使所述应用使用所述虚拟机中的线程,具体包括:通过所述容器,将所述虚拟机根租户的线程切换到所述应用对应的租户上下文中运行。7.如权利要求4所述的方法,其特征在于,根据所述应用对应的租户,对所述应用使用的所述虚拟机中的线程进行回收,具体包括:根据所述应用对应的租户,对所述租户中运行的线程抛出异常对象;根据异常处理机制,对抛出异常对象的线程进行关闭。8.如权利要求7所述的方法,其特征在于,当所述应用使用的线程为所述应用自身创建的线程时,根据所述应用对应的租户,对所述租户中运行的线程抛出异常对象,具体包括:对所述应用对应的租户中应用自身创建的线程进行标记;针对携带有所述标记的线程抛出异常对象;修改携带有标记的线程栈上所有方法的异常处理机制,以使得根据所述异常处理机制无法查询到与所述抛出异常对象对应的异常类型;根据异常处理机制,对抛出异常对象的线程进行关闭,具体包括:根据异常处理机制,对所述抛出异常对象的线程进行退栈。9.如权利要求7所述的方法,其特征在于,当所述应用使用的线程为由所述根租户的线程切换得到的线程时,针对所述应用使用的虚拟机中的线程抛出异常对象,具体包括:针对所述应用对应的租户中由根租户的线程切换得到的线程抛出异常对象;修改由根租户的线程切换得到的线程的异常处理机制,以使得根据所述异常处理机制无法查询到与所述抛出异常对象对应的异常类型;对所述由根租户的线程切换得到的线程中、表示应用对应的租户入口的方法进行标记,以使得携带有所述标记的方法中存的异常对象能够被异常处理机制捕捉;根据异常处理机制,对抛出异常对象的线程进行关闭,具体包括:根据异常处理机制,对携带有所述标记的方法中存的异常对象进行抓取,并将所述方法表示的线程切换回所述根租户的上下文中。10.如权利要求4所述的方法,其特征在于,根据所述应用对应的租户,对所述应用使用的所述虚拟机中的共享变量对象进行回收前,所述方法还包括:当所述应用使用所述虚拟机中的共享变量对象时,对所述共享变量对象进行复制,获得所述共享变量对象的副本;将所述共享变量对象的副本保存到与所述应用对应租户的存储空间,以使得所述应用运行时使用保存在所述存储空间中的共享变量对象副本。11.如权利要求10所述的方法,其特征在于,根据所述应用对应的租户,对所述应用使用的所述虚拟机中的共享变量对象进行回收,具体包括:删除保存在与所述应用对应的租户的存储空间中的共享变量对象副本;回收所述存储空间。12.如权利要求4所述的方法,其特征在于,根据所述应用对应的租户,对所述应用打开的所述虚拟机中的文件句柄进行回收前,所述方法还包括:追踪所述应用的文件句柄打开操作;将追踪到的所述应用打开的文件句柄...

【专利技术属性】
技术研发人员:李三红陆传胜宁志伟
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛,KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1