欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種資源回收方法及裝置與流程

文檔序號:12719021閱讀:177來源:國知局
一種資源回收方法及裝置與流程

本申請涉及計算機技術(shù)領(lǐng)域,尤其涉及一種資源回收方法及裝置。



背景技術(shù):

目前,JavaEE的應用往往是運行在應用對應的容器中的,同一個容器中可能運行有很多不同的應用,例如,如圖1所示,運行在JAVA虛擬機(JAVA Virtual Machine,JVM)上的JAVA容器中部署了三個應用,此時假設(shè)需要對其中的應用3進行版本升級,在對應用3進行版本升級時,往往需要對運行該JAVA容器的JVM進行重啟,而對JVM的重啟將會影響JAVA容器中其他應用的使用。

為了避免在對運行在容器中的某一應用進行升級時需要重啟虛擬機,而影響該容器中其他應用的運行的問題,在現(xiàn)有技術(shù)中,大部分容器均支持采用熱部署的方式對運行在容器中的應用進行版本升級。其中,熱部署是指在不重啟運行容器的虛擬機的情況下,完成對運行在該容器上的某個應用的版本升級。

在對應用進行熱部署時,首先需要對該應用已經(jīng)部署到容器中的舊版本進行退部署,即對已經(jīng)部署到容器上的舊版本應用進行刪除。然而部署在容器中的應用運行時所需的資源均保存在運行該容器的虛擬機上,應用在運行時可以通過容器調(diào)用虛擬機中相關(guān)資源,即應用在運行時將會使用虛擬機中的相關(guān)資源,由于在現(xiàn)有技術(shù)中應用通過容器調(diào)用虛擬機中的資源運行時,虛擬機無法確定該次調(diào)用是容器中哪個應用發(fā)起的,因而在對應用進行退部署后,可能無法對已經(jīng)退部署的應用在運行中所使用的虛擬機資源進行回收,從而產(chǎn)生資源泄露問題。

由于熱部署過程中存在資源泄露的問題,應用在經(jīng)過多次熱部署后,在退部署舊版本應用的過程中產(chǎn)生的資源泄露將會越來越嚴重,進而造成操作系統(tǒng)可分配給應用運行的資源也就越來越少,嚴重時可能造成操作系統(tǒng)無法為新版本應用的運行分配足夠的資源,進而無法運行新版本的應用。

因而,如何避免在使用熱部署技術(shù)對應用進行版本更新時,產(chǎn)生的資源泄露問題,成為現(xiàn)有技術(shù)亟待解決的問題。



技術(shù)實現(xiàn)要素:

本申請實施例提供一種資源回收方法及裝置,用以解決現(xiàn)有技術(shù)在對應用進行熱部署升級時,產(chǎn)生的資源泄露問題。

本申請實施例采用下述技術(shù)方案:

一種資源回收方法,包括:

針對部署在容器中的應用,在運行所述容器的虛擬機中創(chuàng)建所述應用對應的租戶,以使所述應用使用所述租戶在所述虛擬機中的資源運行;

在對所述應用進行熱部署升級時,根據(jù)所述應用對應的租戶,對所述應用使用的所述資源進行回收。

一種資源回收裝置,包括:

租戶創(chuàng)建單元,針對部署在容器中的應用,在運行所述容器的虛擬機中創(chuàng)建所述應用對應的租戶,以使所述應用使用所述租戶在所述虛擬機中的資源運行;

資源回收單元,在對所述應用進行熱部署升級時,根據(jù)所述應用對應的租戶,對所述應用使用的所述資源進行回收。

本申請實施例采用的上述至少一個技術(shù)方案能夠達到以下有益效果:

采用本申請實施例提供的資源回收方法,由于可以針對部署在容器中的應用,在運行所述容器的虛擬機中創(chuàng)建所述應用對應的租戶,以使所述應用使用所述租戶在所述虛擬機中的資源運行,因而可以根據(jù)應用在虛擬機中對應的租戶中的資源,確定應用運行時使用的虛擬機中的資源,則在對應用進行熱部署升級時,可以根據(jù)該應用對應的租戶,對所述應用使用的資源進行回收,從而避免了在對應用進行熱部署升級時,產(chǎn)生的資源泄露問題。

附圖說明

此處所說明的附圖用來提供對本申請的進一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當限定。在附圖中:

圖1為現(xiàn)有技術(shù)提供的一種虛擬機、容器以及應用的架構(gòu)圖;

圖2為本申請實施例提供的一種資源回收方法的具體流程示意圖;

圖3為本申請實施例提供的一種虛擬機、容器以及應用的架構(gòu)圖;

圖4為本申請實施例提供的一種根租戶與用戶租戶的關(guān)系示意圖;

圖5為本申請實施例提供的一種應用自身創(chuàng)建的線程的線程棧示意圖;

圖6為本申請實施例提供的一種由根租戶的線程切換得到的線程的線程棧示意圖;

圖7為本申請實施例提供的一種資源回收裝置的具體結(jié)構(gòu)示意圖。

具體實施方式

為使本申請的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本申請具體實施例及相應的附圖對本申請技術(shù)方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├绢I(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。

以下結(jié)合附圖,詳細說明本申請各實施例提供的技術(shù)方案。

本申請實施例提供的資源回收方法的執(zhí)行主體,可以但不限于為手機、平板電腦、個人電腦(Personal Computer,PC)、智能電視以及任何可以運行應用的終端設(shè)備中的至少一種。此外,該方法的執(zhí)行主體還可以是服務器,比如,web應用服務器,等等。

為便于描述,下文以該方法的執(zhí)行主體為個人電腦為例,對該方法的實施方式進行介紹。可以理解,該方法的執(zhí)行主體為個人電腦只是一種示例性的說明,并不應理解為對該方法的限定。

本申請實施例提供了一種資源回收方法,用以解決現(xiàn)有技術(shù)在對應用進行熱部署升級時產(chǎn)生的資源泄露問題。該方法的具體實現(xiàn)流程示意圖如圖2所示,可以包括下述步驟:

步驟11,針對部署在容器中的應用,在運行所述容器的虛擬機中創(chuàng)建所述應用對應的租戶,以使所述應用使用所述租戶在所述虛擬機中的資源運行;

其中,所述應用可以使根據(jù)JAVA語言編寫的JAVA應用,也可以是根據(jù)C/C++語言編寫的應用,或者也還可以是根據(jù)PHP語言編寫的應用,等等。本申請實施例對應用所使用的編程語言不做限定,為例便于描述,本申請可以以根據(jù)JAVA語言編寫的JAVA應用為例進行介紹。

一般地,安裝在終端上的應用在運行時,往往需要在終端上為該應用預先設(shè)置運行環(huán)境(比如預先編寫代碼以管理對象關(guān)系),則在終端上安裝不同應用時,均需要為該應用設(shè)置運行環(huán)境,該過程較為繁瑣,因而現(xiàn)有技術(shù)提供了一種用于部署應用的容器,該容器中預先設(shè)置有應用的運行環(huán)境,應用可以直接部署在該容器中進行運行,例如,一般可以把JAVA應用部署在JAVA容器上。

需要說明的是,這里所說的部署,是指首次將應用安裝到該應用對應的容器中,與后文所述的對應用進行熱部署升級并不相同。

同時,由于編寫應用所使用的程序語言可能與該應用期望運行的平臺所使用的程序語言不相同,例如,使用JAVA語言編寫的JAVA應用,為了能夠在不同平臺上運行,往往需要編譯成不同的目標代碼。為了避免在不同平臺上運行應用時,需要對應用進行重新編碼,我們引入了虛擬機,通過虛擬機可以屏蔽與運行平臺相關(guān)的信息,進而使得應用只需生成在虛擬機上運行的目標代碼,就可以在多種平臺上不加修改地運行。例如,在運行JAVA應用時所使用的JAVA虛擬機(JAVA Virtual Machine,JVM)。

一般地,在同一個容器中往往可以部署多個應用,而這些應用在運行時所需的資源均保存在運行該容器的虛擬機上,應用可以通過容器來調(diào)用虛擬機中的相關(guān)資源來運行。然而,目前由于容器對虛擬機是不透明的,即在應用通過容器調(diào)用虛擬機中的資源進行運行時,虛擬機僅可以確定是該容器對虛擬機中資源的調(diào)用,而無法確定此次調(diào)用時容器中哪個應用發(fā)起的,這也就造成無法確定容器中的應用在運行時使用了虛擬機中的哪些資源,進而在對該應用進行熱部署升級時,由于無法確定該應用在虛擬機中所使用的資源,因而無法對該應用使用的資源進行回收。

例如,如圖3所示,在容器中部署了應用a、應用b以及應用c三個應用,容器運行在虛擬機上,在運行過程中,應用a使用了虛擬機中的資源a,應用b使用了虛擬機中的資源b,應用c使用了虛擬機中的資源c,然而虛擬機僅能確定容器使用了該些資源,則在對應用c進行熱部署升級后,由于無法確定應用c使用了虛擬機中的哪些資源,因而無法對應用c使用的虛擬機資源進行回收。

為了避免上述問題,在應用部署到容器中時,便可以通過容器在該容器運行的虛擬機中創(chuàng)建一個與該應用對應的租戶(為了便于描述,后文稱為用戶租戶),后續(xù)該應用可以使用對應的用戶租戶在虛擬機中的資源運行,進而當需要對應用使用的資源進行回收時,僅需要在虛擬機中對與該應用對應的用戶租戶中的資源進行回收即可。

在一種實施方式中,步驟11的具體實現(xiàn)方式可以包括:通過所述容器,在所述虛擬機中創(chuàng)建與所述應用對應的租戶上下文,其中,所述租戶上下文用于表征所述租戶。

需要說明的是,在運行容器的虛擬機中,除了包含與容器中部署的應用對應的用戶租戶以外,還包括根租戶,根租戶用于向虛擬機中與應用對應的用戶租戶運行所述應用提供所需的部分或者全部資源,比如,根租戶中可以包括虛擬機中的公共線程池以及虛擬機中的共享變量對象,等等。如圖4所示,反映了虛擬機中根租戶與用戶租戶之間的關(guān)系。

還需要說明的是,這里所說的運行應用所需的資源,可以包括但不僅限于以下三種:

1、線程;

其中,應用運行時使用的虛擬機中的線程,可以包括:由虛擬機中根租戶的線程切換得到的線程;和/或該應用自身創(chuàng)建的線程。

而虛擬機中根租戶的線程一般可以是指根租戶中公共線程池中的線程,當應用在運行時需要使用虛擬機中根租戶的線程時,往往需要將根租戶中的線程切換到與該應用對應的用戶租戶中執(zhí)行,則在一種實施方式中,將虛擬機中根租戶中的線程切換到用戶租戶中,以實現(xiàn)應用使用根租戶中的線程,本申請實施例提供的方法具體可以包括:通過所述容器,將所述虛擬機根租戶的線程切換到所述應用對應的租戶上下文中運行。

當應用需要使用虛擬機中根租戶中的線程時,可以通過容器調(diào)用應用程序編程接口(Application Programming Interface,API),將虛擬機中根租戶的線程切換到與該應用對應的用戶租戶上下文中,進而在該應用的用戶租戶上下文中運行由根租戶的線程切換得到的線程。

2、共享變量對象;

共享變量對象實際上是程序名稱暴露在公共區(qū)間里、且所有代碼都可以被直接引用的變量。虛擬機中的共享變量對象只存在于根租戶的內(nèi)存空間里,但是被它指向的對象可以既存在于根租戶內(nèi)存,也可以存在于用戶租戶中。

3、文件句柄(file handle,F(xiàn)D)。

應用在運行過程中,可能需要從文件或者日志中讀取數(shù)據(jù),在從文件中讀取數(shù)據(jù)時,應用首先需要調(diào)用系統(tǒng)函數(shù),并向系統(tǒng)函數(shù)輸入需要打開文件的唯一標識,進而可以通過系統(tǒng)函數(shù)打開文件讀取數(shù)據(jù),其中所述文件的唯一標識即文件句柄。一般地,當應用對文件的數(shù)據(jù)讀取完畢后,可以再次調(diào)用系統(tǒng)函數(shù)關(guān)閉文件,并關(guān)閉文件句柄。

而假設(shè)應用在運行過程,通過熱部署升級了,此時部署在容器中的應用被刪除了,而該應用在讀取文件過程中,在虛擬機中打開的文件句柄仍然未關(guān)閉,因而在對應用熱部署升級后,需要對應用在虛擬機中打開的文件句柄關(guān)閉,具體的,如何關(guān)閉應用在虛擬機中打開的文件句柄,詳見下文相關(guān)描述,此處不再贅述。

步驟12,在對所述應用進行熱部署升級時,根據(jù)所述應用對應的租戶,對所述應用使用的所述資源進行回收。

一般地,在對容器中部署的應用進行版本升級后,往往可以對運行該容器的虛擬機進行重啟,以釋放舊版本應用運行時使用的虛擬機資源。然而,采用熱部署的方式進行應用版本升級時,可以不重啟運行容器的虛擬機,因而可能造成應用在運行時使用的虛擬機資源無法被釋放,即存在資源泄露問題。

為了避免應用熱部署升級時產(chǎn)生的資源泄露問題,本申請實施例中,在對應用進行熱部署升級時,可以根據(jù)該應用在的虛擬機中對應的租戶,對該應用在虛擬機中使用的資源進行回收。

由于應用在運行時使用的資源一般可以包括:應用使用的虛擬機中的線程、應用打開的虛擬機中的文件句柄以及應用使用的虛擬機中的共享變量對象,因而下文從如何回收應用使用的線程,如何回收應用打開的文件句柄,以及如何回收應用使用的共享變量對象三個方面,來具體介紹本申請實施例是如何對應用使用的資源進行回收的。

a、對所述應用使用的所述虛擬機中的線程進行回收;

在對應用使用的虛擬機中的線程進行回收時,我們可以利用異常處理機制。

當在正在執(zhí)行的線程中拋出異常對象后,根據(jù)異常處理機制,會查詢該異常對象所對應的異常類型,并在查詢到與該異常對象對應的異常類型后,該異常對象跳轉(zhuǎn)到與該異常類型的處理邏輯中執(zhí)行,以達到對異常對象進行處理的目的;而當根據(jù)異常處理機制未查詢到拋出異常對象對應的異常類型時,將會中斷該線程棧中正在執(zhí)行的棧幀中的方法,并將該棧幀的方法退出線程棧,同時會將該異常對象拋至當前棧幀的調(diào)用者。

例如,如圖5所示,為某個正在執(zhí)行線程的線程棧,該線程棧中有棧底至棧頂依次為方法A、方法B、方法C以及方法D,其中方法A為方法B的調(diào)用者,方法B為方法C的調(diào)用者,方法C為方法D的調(diào)用者,當向該線程拋出異常對象后,假設(shè)未查詢到拋出異常對象對應的異常類型,則線程棧中正在執(zhí)行的方法D將會被中斷,并將方法D退出該線程棧(退棧),同時會將該異常類型拋至方法D的調(diào)用者方法C,并根據(jù)異常處理機制在方法C中查詢與該異常對象對應的異常類型,當查詢到與該異常對應的異常類型時,將方法C退出該線程棧,并將該異常對象拋至方法B,依此類推,直至查找到與該異常對象對應的異常類型,或者將該線程棧中的方法全部退出線程棧。

則在一種實施方式中,根據(jù)異常處理機制對應用使用的線程進行回收,具體可以包括:根據(jù)所述應用對應的租戶,將所述租戶中運行的線程,確定為所述應用使用的虛擬機中的線程;針對所述應用使用的虛擬機中的線程拋出異常對象;根據(jù)異常處理機制,對拋出異常對象的線程進行關(guān)閉。

其中,當應用使用的線程為該應用自身創(chuàng)建的線程時,針對該線程進行回收,一般可以是指關(guān)閉該線程,并釋放該線程所占用的資源。即在對應用自身創(chuàng)建的線程進行回收時,可以退棧該線程棧中的所有方法,以達到關(guān)閉該線程,并回收該線程所占用的資源的目的。

為了達到將應用自身創(chuàng)建的線程關(guān)閉,并釋放該線程占用的資源的目的,在一種實施方式中,可以針對應用自身創(chuàng)建的線程拋出異常對象,并修改應用自身創(chuàng)建的線程的異常處理機制,以使得根據(jù)所述異常處理機制無法查詢到與拋出異常對象對應的異常類型,進而根據(jù)異常處理機制,關(guān)閉應用創(chuàng)建的線程,具體的,本申請實施例提供的方法可以包括:對所述應用自身創(chuàng)建的線程進行標記;針對攜帶有所述標記的線程拋出異常對象;修改攜帶有標記的線程棧上所有方法的異常處理機制,以使得根據(jù)所述異常處理機制無法查詢到與所述拋出異常對象對應的異常類型;根據(jù)異常處理機制,對所述拋出異常對象的線程進行退棧。

由于修改了應用自身創(chuàng)建的線程的異常處理機制,因而在該線程中拋出的異常對象將始終無法查詢到對應的異常類型,根據(jù)異常處理機制,該線程棧中的方法將被依次退出線程棧,進而達到關(guān)閉線程,并回收線程所占用的資源的目的。

而當應用使用的線程為由根租戶的線程切換得到的線程時,由于根租戶的線程一般為公共線程,因而在針對該線程進行回收時,不能關(guān)閉該線程,而需要結(jié)束執(zhí)行該線程,并將由根租戶的線程切換得到的線程返回根租戶的上下文中。在對由根租戶的線程切換得到的線程進行回收時,可以退棧該線程棧中用戶租戶的方法,并將該線程棧中由根租戶的線程切換得到的方法退回根租戶的上下文中,以達到將由根租戶的線程切換得到的線程退回根租戶的上下文中的目的。

為了達到上述目的,在一種實施方式中,本申請實施例提供的方法可以包括:針對由根租戶的線程切換得到的線程拋出異常對象;修改由根租戶的線程切換得到的線程的異常處理機制,以使得根據(jù)所述異常處理機制無法查詢到與所述拋出異常對象對應的異常類型;對所述由根租戶的線程切換得到的線程中、表示應用對應的租戶入口的方法進行標記,以使得攜帶有所述標記的方法中存的異常對象能夠被異常處理機制捕捉;根據(jù)異常處理機制,對攜帶有所述標記的方法中存的異常對象進行抓取,并將所述方法表示的線程切換回所述根租戶的上下文中。

例如,如圖6所示,為某個正在執(zhí)行線程的線程棧,該線程為由根租戶的線程切換到用戶租戶中執(zhí)行的,其中,方法1以及方法2為由根租戶中切換到用戶租戶中執(zhí)行的根租戶中線程的方法,而方法a~方法d為該線程在用戶租戶中執(zhí)行的方法,則在對該線程進行回收時,需要將方法a~方法d退出該線程棧。采用本申請實施例提供的方法,可以對方法2進行標記,針對該線程拋出異常對象,并修改該線程的異常處理機制,以使得根據(jù)所述異常處理機制無法查詢到與所述拋出異常對象對應的異常類型,則根據(jù)異常處理機制,方法a~方法d將依次退出該線程棧,并將該異常對象拋至方法2,而方法2被預先進行了標記,因而方法2中的異常對象能夠被捕捉,并跳轉(zhuǎn)到異常處理邏輯中進行處理,進而不會將方法2以及方法1退出線程棧,并可以將方法2以及方法1退回至根租戶的上下文中,以達到回收根租戶切換得到的線程的目的。

b、對所述應用使用的所述虛擬機中的共享變量對象進行回收;

目前,在應用使用虛擬機中的共享變量對象時,需要將虛擬機根租戶中的共享變量對象引用至與該應用對應的用戶租戶中運行,而由于用戶租戶對根租戶中共享變量對象的引用為強引用,因而導致根據(jù)垃圾回收機制,無法對用戶租戶引用的共享變量對象進行回收。

為了可以對應用使用的虛擬機中的共享變量對象進行回收,即對用戶租戶引用的根租戶中的共享變量對象進行回收,首先需要消除存在的強引用關(guān)系,在一種實施方式中,當應用被部署到容器中,且通過容器在虛擬機中創(chuàng)建了與該應用對應的用戶租戶后,可以對虛擬機中的共享變量對象進行復制,并將復制得到的共享變量對象副本保存到與所述應用對應租戶的存儲空間,后續(xù)當該應用需要使用虛擬機中的共享變量對象時,可以直接引用保存在該存儲空間中的共享變量對象副本,從而不需要對根租戶中的共享變量數(shù)據(jù)進行引用,進而消除了根租戶共享變量對象與用戶租戶對象之間存在的強引用關(guān)系,具體的,本申請實施例提供的方法可以包括:當所述應用使用所述虛擬機中的共享變量對象時,對所述共享變量對象進行復制,獲得所述共享變量對象的副本;將所述共享變量對象的副本保存到與所述應用對應租戶的存儲空間,以使得所述應用運行時使用保存在所述存儲空間中的共享變量對象副本。

則在上述情況下,在對應用使用的虛擬機中的共享變量對象進行回收時,本申請實施例提供的方法具體可以包括:根據(jù)所述應用對應的租戶,將與所述租戶關(guān)聯(lián)保存的共享變量對象副本,確定為所述應用使用的虛擬機中的共享變量對象;刪除保存在所述存儲空間中的共享變量對象副本,并回收保存所述共享變量對象副本的存儲空間。

由于在這種情況下,應用使用的均為保存在與該應用對應的用戶租戶的存儲空間中的共享變量對象副本,此時該應用在使用共享變量對象副本時不會對虛擬機中的共享變量對象造成影響,因而當需要對應用使用的共享變量對象進行回收時,僅需要刪除保存在與應用對應的用戶租戶存儲空間中的共享變量對象副本,并將回收該存儲空間即可。

c、對應用打開的虛擬機中的文件句柄進行回收;

需要說明的是,在對應用打開的虛擬機中的文件句柄進行回收前,首先需要追蹤應用的文件句柄打開操作,以確定應用打開的虛擬機中的文件句柄,在一種實施方式中,本申請實施例提供的確定應用打開的虛擬機中的文件句柄的方法,具體可以包括:追蹤所述應用的文件句柄打開操作;將追蹤到的所述應用打開的文件句柄與所述應用對應的租戶關(guān)聯(lián)并保存。

通過追蹤應用的文件句柄打開操作,當追蹤到應用打開文件句柄時,可以將應用打開的文件句柄與該應用對應的用戶租戶關(guān)聯(lián)保存(比如,可以在文件句柄表中保存應用打開的文件句柄),而當追蹤到應用關(guān)閉某個文件句柄時,則可以將與用戶租戶關(guān)聯(lián)保存的該文件句柄刪除,則被保存的文件句柄均為應用打開的文件句柄。

則后續(xù)在對應用打開的虛擬機中的文件句柄進行回收時,可以關(guān)閉與所述應用對應的租戶關(guān)聯(lián)保存的文件句柄。

需要說明的是,當應用通過打開文件句柄讀取文件數(shù)據(jù)時,在虛擬機中與該應用對應的用戶租戶中的線程將等待對文件數(shù)據(jù)讀取而返回的讀取結(jié)果,此時該線程將無法被關(guān)閉,而將應用打開的文件句柄關(guān)閉后,將喚醒等待的線程,進而可以通過上文提到的線程回收方法,回收被喚醒的線程,因而在對應用使用的資源進行回收時,往往可以先對應用打開的文件句柄進行回收,后續(xù)在對應用使用的線程以及共享變量對象進行回收。

本申請實施例還提供了一種資源回收裝置,用以解決現(xiàn)有技術(shù)在對應用進行熱部署升級時產(chǎn)生的資源泄露問題。該裝置的具體結(jié)構(gòu)示意圖如圖7所示,包括:租戶創(chuàng)建單元21以及資源回收單元22。

其中,租戶創(chuàng)建單元21,針對部署在容器中的應用,在運行所述容器的虛擬機中創(chuàng)建所述應用對應的租戶,以使所述應用使用所述租戶在所述虛擬機中的資源運行;

資源回收單元22,在對所述應用進行熱部署升級時,根據(jù)所述應用對應的租戶,對所述應用使用的所述資源進行回收。

在一種實施方式中,租戶創(chuàng)建單元21,通過所述容器,在所述虛擬機中創(chuàng)建與所述應用對應的租戶上下文,所述租戶上下文用于表征所述應用對應的租戶。

在一種實施方式中,所述虛擬機中還包含根租戶,所述根租戶用于向所述應用對應的租戶提供運行所述應用所需的部分或全部資源。

在一種實施方式中,所述應用使用的資源,包括以下至少一種:所述應用使用的所述虛擬機中的線程;所述應用打開的所述虛擬機中的文件句柄;所述應用使用的所述虛擬機中的共享變量對象。

在一種實施方式中,所述應用使用的所述虛擬機中的線程,包括以下至少一種:由所述根租戶的線程切換得到的線程;所述應用自身創(chuàng)建的線程。

在一種實施方式中,租戶創(chuàng)建單元21,當所述虛擬機中的線程為由所述根租戶的線程切換得到的線程時,通過所述容器,將所述虛擬機根租戶的線程切換到所述應用對應的租戶上下文中運行。

在一種實施方式中,資源回收單元22,根據(jù)所述應用對應的租戶,對所述租戶中運行的線程拋出異常對象;根據(jù)異常處理機制,對拋出異常對象的線程進行關(guān)閉。

在一種實施方式中,資源回收單元22,當所述應用使用的線程為所述應用自身創(chuàng)建的線程時,對所述應用對應的租戶中應用自身創(chuàng)建的線程進行標記;針對攜帶有所述標記的線程拋出異常對象;修改攜帶有標記的線程棧上所有方法的異常處理機制,以使得根據(jù)所述異常處理機制無法查詢到與所述拋出異常對象對應的異常類型;根據(jù)異常處理機制,對所述拋出異常對象的線程進行退棧。

在一種實施方式中,資源回收單元22,當所述應用使用的線程為由所述根租戶的線程切換得到的線程時,針對所述應用對應的租戶中由根租戶的線程切換得到的線程拋出異常對象;修改由根租戶的線程切換得到的線程的異常處理機制,以使得根據(jù)所述異常處理機制無法查詢到與所述拋出異常對象對應的異常類型;對所述由根租戶的線程切換得到的線程中、表示根租戶線程入口的方法進行標記,以使得攜帶有所述標記的方法中存的異常對象能夠被異常處理機制捕捉;根據(jù)異常處理機制,對攜帶有所述標記的方法中存的異常對象進行抓取,并將所述方法表示的線程切換回所述根租戶的上下文中。

在一種實施方式中,資源回收單元22,當所述應用使用所述虛擬機中的共享變量對象時,對所述共享變量對象進行復制,獲得所述共享變量對象的副本;將所述共享變量對象的副本保存到與所述應用對應租戶的存儲空間,以使得所述應用運行時使用保存在所述存儲空間中的共享變量對象副本。

在一種實施方式中,資源回收單元22,刪除保存在與所述應用對應的租戶的存儲空間中的共享變量對象副本;回收所述存儲空間。

在一種實施方式中,資源回收單元,追蹤所述應用的文件句柄打開操作;將追蹤到的所述應用打開的文件句柄與所述應用對應的租戶關(guān)聯(lián)并保存。

在一種實施方式中,資源回收單元,關(guān)閉與所述應用對應的租戶關(guān)聯(lián)保存的文件句柄。

采用本申請實施例提供的資源回收方法,由于可以針對部署在容器中的應用,在運行所述容器的虛擬機中創(chuàng)建所述應用對應的租戶,以使所述應用使用所述租戶在所述虛擬機中的資源運行,因而可以根據(jù)應用在虛擬機中對應的租戶中的資源,確定應用運行時使用的虛擬機中的資源,則在對應用進行熱部署升級時,可以根據(jù)該應用對應的租后,對所述應用使用的資源進行回收,從而避免了在對應用進行熱部署升級時,產(chǎn)生的資源泄露問題。

本領(lǐng)域內(nèi)的技術(shù)人員應明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。

本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。

這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。

這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。

在一個典型的配置中,計算設(shè)備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。

內(nèi)存可能包括計算機可讀介質(zhì)中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內(nèi)存是計算機可讀介質(zhì)的示例。

計算機可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機可讀介質(zhì)不包括暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。

還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。

本領(lǐng)域技術(shù)人員應明白,本申請的實施例可提供為方法、系統(tǒng)或計算機程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產(chǎn)品的形式。

以上所述僅為本申請的實施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進等,均應包含在本申請的權(quán)利要求范圍之內(nèi)。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
清河县| 湘潭县| 周口市| 克东县| 扎兰屯市| 河西区| 遵义县| 若尔盖县| 凉城县| 万安县| 磐安县| 鄯善县| 即墨市| 丰城市| 阜南县| 洪湖市| 杂多县| 外汇| 诏安县| 赤壁市| 阿坝县| 华阴市| 外汇| 和田市| 西充县| 邯郸市| 汪清县| 五大连池市| 普兰店市| 收藏| 白玉县| 彭山县| 沙洋县| 道孚县| 南江县| 濮阳市| 平潭县| 上饶县| 宿松县| 铁力市| 陈巴尔虎旗|