本申請(qǐng)屬于計(jì)算機(jī)技術(shù)領(lǐng)域,具體地說,涉及一種獲取java虛擬機(jī)運(yùn)行狀態(tài)的方法和裝置。
背景技術(shù):
為了充分利用硬件資源,在宿主機(jī)中通常會(huì)同時(shí)啟用多個(gè)java虛擬機(jī)。獲取java虛擬機(jī)的運(yùn)行狀態(tài)信息,并提供給java虛擬機(jī)的用戶,以便輔助用戶對(duì)java虛擬機(jī)的運(yùn)行參數(shù)調(diào)整優(yōu)化或者對(duì)應(yīng)用進(jìn)行擴(kuò)容。
目前獲取java虛擬機(jī)的運(yùn)行狀態(tài)信息的方法通常是使用java虛擬機(jī)狀態(tài)監(jiān)控工具(javavirtualmachinestatisticsmonitoringtool,jstat),jstat獲取信息前需要先附著(attach)java虛擬機(jī)進(jìn)程,附著瞬間會(huì)消耗一定的cpu資源。由于用戶業(yè)務(wù)的需要,監(jiān)控?cái)?shù)據(jù)采集必須采用固定頻率,當(dāng)在某一宿主機(jī)中啟動(dòng)多個(gè)java虛擬機(jī)時(shí),采集腳本同時(shí)附著所有的java虛擬機(jī)進(jìn)程,會(huì)造成大量的cpu資源消耗,影響宿主機(jī)的性能。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本申請(qǐng)?zhí)峁┝艘环N獲取java虛擬機(jī)運(yùn)行狀態(tài)的方法和裝置,以解決獲取多個(gè)java虛擬機(jī)運(yùn)行狀態(tài)時(shí)cpu資源占用過高,影響宿主機(jī)運(yùn)行狀態(tài)的技術(shù)問題。
為了解決上述技術(shù)問題,本申請(qǐng)公開了一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的方法,包括:當(dāng)檢測(cè)到j(luò)ava虛擬機(jī)啟動(dòng)時(shí),啟動(dòng)第一常駐監(jiān)控進(jìn)程,以監(jiān)控所述java虛擬機(jī)的運(yùn)行狀態(tài);將所述第一常駐監(jiān)控進(jìn)程監(jiān)控到的所述java虛擬機(jī)的運(yùn)行狀態(tài)添加到與所述第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的狀態(tài)文件中。
為了解決上述技術(shù)問題,本申請(qǐng)還公開了一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的方法,包括:當(dāng)同時(shí)運(yùn)行多個(gè)java虛擬機(jī)時(shí),同時(shí)運(yùn)行與所述多個(gè)java虛擬機(jī)數(shù)量相當(dāng)?shù)牡谝怀qv監(jiān)控進(jìn)程,以分別對(duì)應(yīng)一個(gè)java虛擬機(jī)并分別監(jiān)控對(duì)應(yīng)的java虛擬機(jī)的運(yùn)行狀態(tài);將每個(gè)所述第一常駐監(jiān)控進(jìn)程監(jiān)控到的java虛擬機(jī)的運(yùn)行狀態(tài),分別添加到每個(gè)所述第一常駐監(jiān)控進(jìn)程所對(duì)應(yīng)的狀態(tài)文件中。
為了解決上述技術(shù)問題,本申請(qǐng)還公開了一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的裝置,包括:第一啟動(dòng)模塊,用于當(dāng)檢測(cè)到j(luò)ava虛擬機(jī)啟動(dòng)時(shí),啟動(dòng)第一常駐監(jiān)控進(jìn)程,以監(jiān)控所述java虛擬機(jī)的運(yùn)行狀態(tài);第一添加模塊,用于將所述第一常駐監(jiān)控進(jìn)程監(jiān)控到的所述java虛擬機(jī)的運(yùn)行狀態(tài)添加到與所述第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的狀態(tài)文件中。
為了解決上述技術(shù)問題,本申請(qǐng)還公開了一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的裝置,包括:第一運(yùn)行模塊,用于當(dāng)同時(shí)運(yùn)行多個(gè)java虛擬機(jī)時(shí),同時(shí)運(yùn)行與所述多個(gè)java虛擬機(jī)數(shù)量相當(dāng)?shù)牡谝怀qv監(jiān)控進(jìn)程,以分別對(duì)應(yīng)一個(gè)java虛擬機(jī)并分別監(jiān)控對(duì)應(yīng)的java虛擬機(jī)的運(yùn)行狀態(tài);第二添加模塊,用于將每個(gè)所述第一常駐監(jiān)控進(jìn)程監(jiān)控到的java虛擬機(jī)的運(yùn)行狀態(tài),分別添加到每個(gè)所述第一常駐監(jiān)控進(jìn)程所對(duì)應(yīng)的狀態(tài)文件中。
為了解決上述技術(shù)問題,本申請(qǐng)還公開了一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的裝置,包括:第一處理器;用于存儲(chǔ)所述第一處理器可執(zhí)行指令的第一存儲(chǔ)器;其中,所述第一處理器被配置為:當(dāng)檢測(cè)到j(luò)ava虛擬機(jī)啟動(dòng)時(shí),啟動(dòng)第一常駐監(jiān)控進(jìn)程,以監(jiān)控所述java虛擬機(jī)的運(yùn)行狀態(tài);將所述第一常駐監(jiān)控進(jìn)程監(jiān)控到的所述java虛擬機(jī)的運(yùn)行狀態(tài)添加到與所述第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的狀態(tài)文件中。
為了解決上述技術(shù)問題,本申請(qǐng)還公開了一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的裝置,包括:第二處理器;用于存儲(chǔ)所述第二處理器可執(zhí)行指令的第二存儲(chǔ)器;其中,所述第二處理器被配置為:當(dāng)同時(shí)運(yùn)行多個(gè)java虛擬機(jī)時(shí),同時(shí)運(yùn)行與所述多個(gè)java虛擬機(jī)數(shù)量相當(dāng)?shù)牡谝怀qv監(jiān)控進(jìn)程,以分別對(duì)應(yīng)一個(gè)java虛擬機(jī)并分別監(jiān)控對(duì)應(yīng)的java虛擬機(jī)的運(yùn)行狀態(tài);將每個(gè)所述第一常駐監(jiān)控進(jìn)程監(jiān)控到的java虛擬機(jī)的運(yùn)行狀態(tài),分別添加到每個(gè)所述第一 常駐監(jiān)控進(jìn)程所對(duì)應(yīng)的狀態(tài)文件中。
與現(xiàn)有技術(shù)相比,本申請(qǐng)可以獲得包括以下技術(shù)效果:利用jstat的特性——常駐監(jiān)控進(jìn)程對(duì)cpu的消耗可忽略不計(jì),本申請(qǐng)實(shí)施例創(chuàng)建一個(gè)jstat常駐進(jìn)程時(shí),只會(huì)引起cpu較小的抖動(dòng),但不會(huì)消耗過多的cpu資源,不影響宿主機(jī)的性能。
當(dāng)然,實(shí)施本申請(qǐng)的任一產(chǎn)品必不一定需要同時(shí)達(dá)到以上所述的所有技術(shù)效果。
附圖說明
此處所說明的附圖用來提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申請(qǐng)的示意性實(shí)施例及其說明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
圖1是本申請(qǐng)實(shí)施例提供的一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的方法的流程圖;
圖2是本申請(qǐng)實(shí)施例提供的一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的方法的流程圖;
圖3是本申請(qǐng)實(shí)施例提供的一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的方法的流程圖;
圖4是本申請(qǐng)實(shí)施例提供的一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的方法的流程圖;
圖5是本申請(qǐng)實(shí)施例提供的一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的裝置的框圖;
圖6是本申請(qǐng)實(shí)施例提供的一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的裝置的框圖。
具體實(shí)施方式
以下將配合附圖及實(shí)施例來詳細(xì)說明本申請(qǐng)的實(shí)施方式,藉此對(duì)本申請(qǐng) 如何應(yīng)用技術(shù)手段來解決技術(shù)問題并達(dá)成技術(shù)功效的實(shí)現(xiàn)過程能充分理解并據(jù)以實(shí)施。
本申請(qǐng)實(shí)施例在java虛擬機(jī)啟動(dòng)后,啟動(dòng)jstat的常駐監(jiān)控進(jìn)程來監(jiān)控java虛擬機(jī)的運(yùn)行狀態(tài),并將監(jiān)控到運(yùn)行狀態(tài)添加至對(duì)應(yīng)的狀態(tài)文件中。由于jstat的常駐監(jiān)控進(jìn)程對(duì)cpu的消耗可以忽略不計(jì),創(chuàng)建一個(gè)jstat常駐監(jiān)控進(jìn)程時(shí),只會(huì)引起cpu較小的抖動(dòng),但不會(huì)消耗過多的cpu資源,因而解決了通過附著(attach)java虛擬機(jī)進(jìn)程的方式會(huì)占用過多cpu資源而影響宿主機(jī)運(yùn)行狀態(tài)的技術(shù)問題。
本申請(qǐng)實(shí)施例中所述的java虛擬機(jī)的運(yùn)行狀態(tài)是指java虛擬機(jī)運(yùn)行期間java堆的使用情況,如垃圾回收次數(shù),垃圾回收時(shí)間等。在java虛擬機(jī)中,堆(heap)是可供各條線程共享的運(yùn)行時(shí)內(nèi)存區(qū)域,也是供所有類實(shí)例和數(shù)組對(duì)象分配內(nèi)存的區(qū)域。java堆在java虛擬機(jī)啟動(dòng)的時(shí)候就被創(chuàng)建,它存儲(chǔ)了被自動(dòng)內(nèi)存管理系統(tǒng)(automaticstoragemanagementsystem),也就是常說的“垃圾收集器(garbagecollector,gc)”所管理的各種對(duì)象,這些受管理的對(duì)象無需,也無法顯式地被銷毀。本申請(qǐng)實(shí)施例中所描述的java虛擬機(jī)并未假設(shè)采用什么具體的技術(shù)去實(shí)現(xiàn)自動(dòng)內(nèi)存管理系統(tǒng)。java虛擬機(jī)實(shí)現(xiàn)者可以根據(jù)系統(tǒng)的實(shí)際需要來選擇自動(dòng)內(nèi)存管理技術(shù)。java堆的容量可以是固定大小的;也可以隨著程序執(zhí)行的需求動(dòng)態(tài)擴(kuò)展,并在不需要過多空間時(shí)自動(dòng)收縮。java堆所使用的內(nèi)存不需要保證是連續(xù)的。
本申請(qǐng)實(shí)施例所提供的獲取java虛擬機(jī)的運(yùn)行狀態(tài)的方法,適用于運(yùn)行所述java虛擬機(jī)的宿主設(shè)備,該宿主設(shè)備可以是計(jì)算機(jī),移動(dòng)電話,數(shù)字廣播終端,消息收發(fā)設(shè)備,游戲控制臺(tái),平板設(shè)備,醫(yī)療設(shè)備,健身設(shè)備,個(gè)人數(shù)字助理等。如圖1所示該方法包括以下步驟。
s10,當(dāng)檢測(cè)到j(luò)ava虛擬機(jī)啟動(dòng)時(shí),啟動(dòng)第一常駐監(jiān)控進(jìn)程,以監(jiān)控所述java虛擬機(jī)的運(yùn)行狀態(tài)。
java虛擬機(jī)的啟動(dòng)是通過引導(dǎo)類加載器(bootstrapclassloader)創(chuàng)建一個(gè)初始類(initialclass)來完成,這個(gè)類是由java虛擬機(jī)的具體實(shí)現(xiàn)指定。接著,java虛擬機(jī)鏈接這個(gè)初始類,初始化并調(diào)用它的publicvoidmain(string[])方法。之后的整個(gè)執(zhí)行過程都是由對(duì)此方法的調(diào)用開始。執(zhí)行 main方法中的java虛擬機(jī)指令可能會(huì)導(dǎo)致java虛擬機(jī)鏈接另外的一些類或接口,也可能會(huì)調(diào)用另外的方法。
宿主機(jī)檢測(cè)檢測(cè)到一個(gè)java虛擬機(jī)啟動(dòng)時(shí),繼續(xù)通過jstat啟動(dòng)一個(gè)常駐監(jiān)控進(jìn)程與該已啟動(dòng)的java虛擬機(jī)對(duì)應(yīng),以監(jiān)控該已啟動(dòng)的java虛擬機(jī)的運(yùn)行狀態(tài),即該java虛擬機(jī)對(duì)java堆的使用情況。
可通過“jstat-gcutil<vmid>[<interval>[<count>]]”啟動(dòng)常駐監(jiān)控進(jìn)程,其中,vmid代表虛擬機(jī)的進(jìn)程號(hào),interval代表間隔時(shí)間,單位為秒或者毫秒,count代表打印次數(shù),如果缺省則代表打印無數(shù)次。常駐監(jiān)控進(jìn)程的輸出格式如下:
s0s1eopygcygctfgcfgctgct;
其中,s0代表java堆上的survivorspace0區(qū)已使用空間的百分比;s1代表java堆上的survivorspace1區(qū)已使用空間的百分比;e代表java堆上的edenspace區(qū)已使用空間的百分比;o代表java堆上的oldspace區(qū)已使用空間的百分比;p代表permspace區(qū)已使用空間的百分比;ygc代表從應(yīng)用程序啟動(dòng)到采樣時(shí)發(fā)生younggc的次數(shù);ygct代表從應(yīng)用程序啟動(dòng)到采樣時(shí)younggc所用的時(shí)間(單位秒);fgc代表從應(yīng)用程序啟動(dòng)到采樣時(shí)發(fā)生fullgc的次數(shù);fgct代表從應(yīng)用程序啟動(dòng)到采樣時(shí)fullgc所用的時(shí)間(單位秒);gct代表從應(yīng)用程序啟動(dòng)到采樣時(shí)用于垃圾回收的總時(shí)間(單位秒)。例如,jstat-gcutil254441000,其中,25444代表java虛擬機(jī)的進(jìn)程號(hào),1000代表間隔時(shí)間為1000毫秒,打印次數(shù)未設(shè)置代表打印無數(shù)次。
s11,將第一常駐監(jiān)控進(jìn)程監(jiān)控到的java虛擬機(jī)的運(yùn)行狀態(tài)添加到與第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的狀態(tài)文件中。
在jstat的常駐監(jiān)控進(jìn)程啟動(dòng)后,創(chuàng)建一個(gè)與該常駐監(jiān)控進(jìn)程對(duì)應(yīng)的狀態(tài)文件,將監(jiān)控到的java虛擬機(jī)的運(yùn)行狀態(tài)打印輸出至該狀態(tài)文件并保存在該狀態(tài)文件中,該狀態(tài)文件的名稱可以是該java虛擬機(jī)的進(jìn)程標(biāo)識(shí)(processidentification,pid)。
這樣,利用jstat的特性——常駐監(jiān)控進(jìn)程對(duì)cpu的消耗可忽略不計(jì),解決了附著(attach)java虛擬機(jī)進(jìn)程獲取運(yùn)行狀態(tài)時(shí)cpu占用過高,影響 宿主機(jī)運(yùn)行狀態(tài)的問題,本申請(qǐng)實(shí)施例創(chuàng)建一個(gè)jstat常駐進(jìn)程時(shí),只會(huì)引起cpu較小的抖動(dòng),但不會(huì)消耗過多的cpu資源。
上述實(shí)施例中,該獲取java虛擬機(jī)的運(yùn)行狀態(tài)的方法可進(jìn)一步包括以下步驟,如圖2所示。
s12,創(chuàng)建與第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的第一定時(shí)任務(wù),以周期性的從狀態(tài)文件中讀取java虛擬機(jī)的運(yùn)行狀態(tài)。
宿主機(jī)啟動(dòng)第一常駐監(jiān)控進(jìn)程后,創(chuàng)建第一定時(shí)任務(wù)與該第一常駐監(jiān)控進(jìn)程對(duì)應(yīng),該第一定時(shí)任務(wù)周期性(例如每秒一次)的從狀態(tài)文件中讀取java虛擬機(jī)的運(yùn)行狀態(tài)??梢悦看巫x取該狀態(tài)文件中的最后一條記錄(最后一條記錄是jstat常駐監(jiān)控進(jìn)程最新寫入到狀態(tài)文件中的,代表著獲取到的該java虛擬機(jī)的最新運(yùn)行狀態(tài)),以獲得該java虛擬機(jī)最新的運(yùn)行狀態(tài)。
s13,將讀取到的java虛擬機(jī)的運(yùn)行狀態(tài)上傳至服務(wù)端。
預(yù)設(shè)服務(wù)端的ip地址和存儲(chǔ)路徑,宿主機(jī)將讀取到的java虛擬機(jī)的運(yùn)行狀態(tài)根據(jù)該ip地址和存儲(chǔ)路徑上傳至服務(wù)端進(jìn)行保存,供開發(fā)人員了解java虛擬機(jī)實(shí)際運(yùn)行狀態(tài)信息,以便對(duì)java虛擬機(jī)的運(yùn)行參數(shù)進(jìn)行調(diào)整優(yōu)化。
上述實(shí)施例中,該獲取java虛擬機(jī)的運(yùn)行狀態(tài)的方法可進(jìn)一步包括以下步驟,如圖3所示。
s14,創(chuàng)建與第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的第二定時(shí)任務(wù),以周期性的檢測(cè)狀態(tài)文件的大小是否大于或等于預(yù)設(shè)閾值;
宿主機(jī)啟動(dòng)第一常駐監(jiān)控進(jìn)程后,創(chuàng)建第二定時(shí)任務(wù)與該第一常駐監(jiān)控進(jìn)程對(duì)應(yīng),該第二定時(shí)任務(wù)周期性的檢測(cè)狀態(tài)文件的大小是否大于或等于預(yù)設(shè)閾值。隨著jstat常駐監(jiān)控進(jìn)程不斷將java虛擬機(jī)的運(yùn)行狀態(tài)寫入狀態(tài)文件,該狀態(tài)文件的大小會(huì)逐漸增大,為了防止該狀態(tài)文件占用過多存儲(chǔ)空間,可以在狀態(tài)文件的大小大于或等于預(yù)設(shè)閾值時(shí)(例如,狀態(tài)文件的大小大于或等于5mb時(shí)),對(duì)過大的狀態(tài)文件進(jìn)行清理。
s15,當(dāng)狀態(tài)文件的大小大于或等于預(yù)設(shè)閾值時(shí),殺死第一常駐監(jiān)控進(jìn)程并刪除狀態(tài)文件。
由于該狀態(tài)文件與jstat常駐監(jiān)控進(jìn)程對(duì)應(yīng),為了使jstat常駐監(jiān)控進(jìn)程不 再向該狀態(tài)文件寫入java虛擬機(jī)的運(yùn)行狀態(tài),需要先殺死該jstat常駐監(jiān)控進(jìn)程。在殺死該jstat常駐監(jiān)控進(jìn)程之后,刪除對(duì)應(yīng)的狀態(tài)文件。
s16,啟動(dòng)第二常駐監(jiān)控進(jìn)程,以繼續(xù)監(jiān)控java虛擬機(jī)的運(yùn)行狀態(tài)。
為了繼續(xù)監(jiān)控java虛擬機(jī)的運(yùn)行狀態(tài),需要重新啟動(dòng)一個(gè)jstat常駐監(jiān)控進(jìn)程。同時(shí)創(chuàng)建一個(gè)新的狀態(tài)文件以對(duì)應(yīng)該重新啟動(dòng)的jstat常駐監(jiān)控進(jìn)程。該重新啟動(dòng)的jstat常駐監(jiān)控進(jìn)程將監(jiān)控到的運(yùn)行狀態(tài)寫入新的狀態(tài)文件中。重新啟動(dòng)jstat常駐監(jiān)控進(jìn)程后會(huì)再次創(chuàng)建與之對(duì)應(yīng)的第二定時(shí)任務(wù),以便繼續(xù)定期檢測(cè)新的狀態(tài)文件的大小。
此外,上述定期上報(bào)運(yùn)行狀態(tài)至服務(wù)端的第一定時(shí)任務(wù)和定期檢測(cè)狀態(tài)文件大小的第二定時(shí)任務(wù)可以同時(shí)被創(chuàng)建并運(yùn)行于宿主機(jī),如圖4所示。當(dāng)?shù)谝欢〞r(shí)任務(wù)周期性的上報(bào)java虛擬機(jī)的運(yùn)行狀態(tài)至客戶端;第二定時(shí)任務(wù)周期性的檢測(cè)狀態(tài)文件的大小,當(dāng)狀態(tài)文件的大小大于或等于預(yù)設(shè)閾值時(shí),殺死該jstat常駐監(jiān)控進(jìn)程并刪除對(duì)應(yīng)的狀態(tài)文件,然后,重新啟動(dòng)一個(gè)jstat常駐監(jiān)控進(jìn)程并創(chuàng)建對(duì)應(yīng)的第一定時(shí)任務(wù)和第二定時(shí)任務(wù)。這樣,既可以定期上報(bào)運(yùn)行狀態(tài)至服務(wù)端,又能夠防止?fàn)顟B(tài)文件過大而占用過多存儲(chǔ)空間。
以上實(shí)施例中獲取java虛擬機(jī)的運(yùn)行狀態(tài)的方法是宿主機(jī)針對(duì)一個(gè)java虛擬機(jī)的角度而言的。而在宿主機(jī)中可同時(shí)運(yùn)行多個(gè)java虛擬機(jī),當(dāng)同時(shí)運(yùn)行多個(gè)java虛擬機(jī)時(shí),宿主機(jī)同時(shí)運(yùn)行與所述多個(gè)java虛擬機(jī)數(shù)量相當(dāng)?shù)膉stat常駐監(jiān)控進(jìn)程,以分別對(duì)應(yīng)一個(gè)java虛擬機(jī)并分別監(jiān)控對(duì)應(yīng)的java虛擬機(jī)的運(yùn)行狀態(tài)。例如,同時(shí)運(yùn)行java虛擬機(jī)a、b、c,那么也就同時(shí)運(yùn)行對(duì)應(yīng)的jstat常駐監(jiān)控進(jìn)程a1、b1、c1;常駐監(jiān)控進(jìn)程a1對(duì)應(yīng)狀態(tài)文件a1、第一定時(shí)任務(wù)a11和第二定時(shí)任務(wù)a12,常駐監(jiān)控進(jìn)程b1對(duì)應(yīng)狀態(tài)文件b1、第一定時(shí)任務(wù)b11和第二定時(shí)任務(wù)b12,常駐監(jiān)控進(jìn)程c1對(duì)應(yīng)狀態(tài)文件c1、第一定時(shí)任務(wù)c11和第二定時(shí)任務(wù)c12。
常駐監(jiān)控進(jìn)程a1將java虛擬機(jī)a的運(yùn)行狀態(tài)寫入到狀態(tài)文件a1,常駐監(jiān)控進(jìn)程b1將java虛擬機(jī)b的運(yùn)行狀態(tài)寫入到狀態(tài)文件b1,常駐監(jiān)控進(jìn)程c1將java虛擬機(jī)c的運(yùn)行狀態(tài)寫入到狀態(tài)文件c1。
第一定時(shí)任務(wù)a11周期性的從狀態(tài)文件a1中讀取java虛擬機(jī)a的運(yùn)行狀態(tài)并上傳到服務(wù)端,第一定時(shí)任務(wù)b11周期性的從狀態(tài)文件b1中讀取java 虛擬機(jī)b的運(yùn)行狀態(tài)并上傳到服務(wù)端,第一定時(shí)任務(wù)c11周期性的從狀態(tài)文件c1中讀取java虛擬機(jī)c的運(yùn)行狀態(tài)并上傳到服務(wù)端。
第二定時(shí)任務(wù)a12周期性的檢測(cè)狀態(tài)文件a1的大小是否大于或等于預(yù)設(shè)閾值,當(dāng)狀態(tài)文件a1的大小大于或等于預(yù)設(shè)閾值時(shí),殺死jstat常駐監(jiān)控進(jìn)程a1,刪除對(duì)應(yīng)的狀態(tài)文件a1,重新啟動(dòng)一個(gè)新的jstat常駐監(jiān)控進(jìn)程a2來繼續(xù)監(jiān)控java虛擬機(jī)a,同時(shí)創(chuàng)建與jstat常駐監(jiān)控進(jìn)程a2對(duì)應(yīng)的狀態(tài)文件a2、第一定時(shí)任務(wù)a21和第二定時(shí)任務(wù)a22。同理,第二定時(shí)任務(wù)b12周期性的檢測(cè)狀態(tài)文件b1的大小是否大于或等于預(yù)設(shè)閾值,當(dāng)狀態(tài)文件b1的大小大于或等于預(yù)設(shè)閾值時(shí),殺死jstat常駐監(jiān)控進(jìn)程b1,刪除對(duì)應(yīng)的狀態(tài)文件b1,重新啟動(dòng)一個(gè)新的jstat常駐監(jiān)控進(jìn)程b2來繼續(xù)監(jiān)控java虛擬機(jī)b,同時(shí)創(chuàng)建與jstat常駐監(jiān)控進(jìn)程b2對(duì)應(yīng)的狀態(tài)文件b2、第一定時(shí)任務(wù)b21和第二定時(shí)任務(wù)b22。同理,第二定時(shí)任務(wù)c12周期性的檢測(cè)狀態(tài)文件c1的大小是否大于或等于預(yù)設(shè)閾值,當(dāng)狀態(tài)文件c1的大小大于或等于預(yù)設(shè)閾值時(shí),殺死jstat常駐監(jiān)控進(jìn)程c1,刪除對(duì)應(yīng)的狀態(tài)文件c1,重新啟動(dòng)一個(gè)新的jstat常駐監(jiān)控進(jìn)程c2來繼續(xù)監(jiān)控java虛擬機(jī)c,同時(shí)創(chuàng)建與jstat常駐監(jiān)控進(jìn)程c2對(duì)應(yīng)的狀態(tài)文件c2、第一定時(shí)任務(wù)c21和第二定時(shí)任務(wù)c22。
宿主機(jī)同時(shí)運(yùn)行多個(gè)java虛擬機(jī)時(shí),雖然重新啟動(dòng)新的jstat常駐監(jiān)控進(jìn)程的次數(shù)會(huì)增多,但由于這種重啟的行為是離散的,幾乎不會(huì)出現(xiàn)并發(fā)重啟很多jstat常駐監(jiān)控進(jìn)程的情形,因此在宿主機(jī)同時(shí)運(yùn)行多個(gè)java虛擬機(jī)時(shí),采用本申請(qǐng)實(shí)施例提供的獲取java虛擬機(jī)的運(yùn)行狀態(tài)的方法也不會(huì)影響到宿主機(jī)的性能。
圖5是本申請(qǐng)實(shí)施例提供的一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的裝置,該裝置包括:
第一啟動(dòng)模塊20,用于當(dāng)檢測(cè)到j(luò)ava虛擬機(jī)啟動(dòng)時(shí),啟動(dòng)第一常駐監(jiān)控進(jìn)程,以監(jiān)控java虛擬機(jī)的運(yùn)行狀態(tài);
第一添加模塊21,用于將第一常駐監(jiān)控進(jìn)程監(jiān)控到的java虛擬機(jī)的運(yùn)行狀態(tài)添加到與第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的狀態(tài)文件中。
該獲取java虛擬機(jī)的運(yùn)行狀態(tài)的裝置還可以進(jìn)一步包括:
第一創(chuàng)建模塊22,用于創(chuàng)建與所述第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的第一定時(shí)任 務(wù),以周期性的從所述狀態(tài)文件中讀取所述java虛擬機(jī)的運(yùn)行狀態(tài);
第一上傳模塊23,用于將讀取到的所述java虛擬機(jī)的運(yùn)行狀態(tài)上傳至服務(wù)端。
該獲取java虛擬機(jī)的運(yùn)行狀態(tài)的裝置還可以進(jìn)一步包括:
第二創(chuàng)建模塊24,用于創(chuàng)建與所述第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的第二定時(shí)任務(wù),以周期性的檢測(cè)所述狀態(tài)文件的大小是否大于或等于預(yù)設(shè)閾值;
第一處理模塊25,用于當(dāng)所述狀態(tài)文件的大小大于或等于預(yù)設(shè)閾值時(shí),殺死所述第一常駐監(jiān)控進(jìn)程并刪除所述狀態(tài)文件;
第二啟動(dòng)模塊26,用于啟動(dòng)第二常駐監(jiān)控進(jìn)程,以繼續(xù)監(jiān)控所述java虛擬機(jī)的運(yùn)行狀態(tài)。
圖6是本申請(qǐng)實(shí)施例提供的一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的裝置,該裝置包括:
第一運(yùn)行模塊30,用于當(dāng)同時(shí)運(yùn)行多個(gè)java虛擬機(jī)時(shí),同時(shí)運(yùn)行與所述多個(gè)java虛擬機(jī)數(shù)量相當(dāng)?shù)牡谝怀qv監(jiān)控進(jìn)程,以分別對(duì)應(yīng)一個(gè)java虛擬機(jī)并分別監(jiān)控對(duì)應(yīng)的java虛擬機(jī)的運(yùn)行狀態(tài);
第二添加模塊31,用于將每個(gè)所述第一常駐監(jiān)控進(jìn)程監(jiān)控到的java虛擬機(jī)的運(yùn)行狀態(tài),分別添加到每個(gè)所述第一常駐監(jiān)控進(jìn)程所對(duì)應(yīng)的狀態(tài)文件中。
該獲取java虛擬機(jī)的運(yùn)行狀態(tài)的裝置還可以進(jìn)一步包括:
第二運(yùn)行模塊32,用于在所述第一常駐監(jiān)控進(jìn)程對(duì)java虛擬機(jī)進(jìn)行監(jiān)控時(shí),運(yùn)行與所述第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的第一定時(shí)任務(wù),以周期性的從所述狀態(tài)文件中讀取對(duì)應(yīng)的java虛擬機(jī)的運(yùn)行狀態(tài);
第二上傳模塊33,用于將讀取到的java虛擬機(jī)的運(yùn)行狀態(tài)上傳至服務(wù)端。
該獲取java虛擬機(jī)的運(yùn)行狀態(tài)的裝置還可以進(jìn)一步包括:
第三運(yùn)行模塊34,用于在所述第一常駐監(jiān)控進(jìn)程對(duì)java虛擬機(jī)進(jìn)行監(jiān)控時(shí),運(yùn)行與所述第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的第二定時(shí)任務(wù),以周期性的檢測(cè) 所述狀態(tài)文件的大小是否大于或等于預(yù)設(shè)閾值;
第二處理模塊35,用于當(dāng)所述狀態(tài)文件的大小大于或等于預(yù)設(shè)閾值時(shí),殺死對(duì)應(yīng)的第一常駐監(jiān)控進(jìn)程并刪除所述狀態(tài)文件;
第三啟動(dòng)模塊36,用于啟動(dòng)與所述java虛擬機(jī)對(duì)應(yīng)的第二常駐監(jiān)控進(jìn)程,以繼續(xù)監(jiān)控所述java虛擬機(jī)的運(yùn)行狀態(tài)。
此外,本申請(qǐng)實(shí)施例中可以通過硬件處理器(hardwareprocessor)來實(shí)現(xiàn)上述各個(gè)功能模塊。
本申請(qǐng)實(shí)施例還提供了一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的裝置,包括:第一處理器;用于存儲(chǔ)所述第一處理器可執(zhí)行指令的第一存儲(chǔ)器;其中,所述第一處理器被配置為:當(dāng)檢測(cè)到j(luò)ava虛擬機(jī)啟動(dòng)時(shí),啟動(dòng)第一常駐監(jiān)控進(jìn)程,以監(jiān)控所述java虛擬機(jī)的運(yùn)行狀態(tài);將所述第一常駐監(jiān)控進(jìn)程監(jiān)控到的所述java虛擬機(jī)的運(yùn)行狀態(tài)添加到與所述第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的狀態(tài)文件中。
該第一處理器可以進(jìn)一步被配置為:創(chuàng)建與所述第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的第一定時(shí)任務(wù),以周期性的從所述狀態(tài)文件中讀取所述java虛擬機(jī)的運(yùn)行狀態(tài);將讀取到的所述java虛擬機(jī)的運(yùn)行狀態(tài)上傳至服務(wù)端。
該第一處理器可以進(jìn)一步被配置為:創(chuàng)建與所述第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的第二定時(shí)任務(wù),以周期性的檢測(cè)所述狀態(tài)文件的大小是否大于或等于預(yù)設(shè)閾值;當(dāng)所述狀態(tài)文件的大小大于或等于預(yù)設(shè)閾值時(shí),殺死所述第一常駐監(jiān)控進(jìn)程并刪除所述狀態(tài)文件;啟動(dòng)第二常駐監(jiān)控進(jìn)程,以繼續(xù)監(jiān)控所述java虛擬機(jī)的運(yùn)行狀態(tài)。
本申請(qǐng)實(shí)施例還提供了一種獲取java虛擬機(jī)的運(yùn)行狀態(tài)的裝置,包括:第二處理器;用于存儲(chǔ)所述第二處理器可執(zhí)行指令的第二存儲(chǔ)器;其中,所述第二處理器被配置為:當(dāng)同時(shí)運(yùn)行多個(gè)java虛擬機(jī)時(shí),同時(shí)運(yùn)行與所述多個(gè)java虛擬機(jī)數(shù)量相當(dāng)?shù)牡谝怀qv監(jiān)控進(jìn)程,以分別對(duì)應(yīng)一個(gè)java虛擬機(jī)并分別監(jiān)控對(duì)應(yīng)的java虛擬機(jī)的運(yùn)行狀態(tài);將每個(gè)所述第一常駐監(jiān)控進(jìn)程監(jiān)控到的java虛擬機(jī)的運(yùn)行狀態(tài),分別添加到每個(gè)所述第一常駐監(jiān)控進(jìn)程所對(duì)應(yīng)的狀態(tài)文件中。
該第二處理器可以進(jìn)一步被配置為:在所述第一常駐監(jiān)控進(jìn)程對(duì)java虛擬機(jī)進(jìn)行監(jiān)控時(shí),運(yùn)行與所述第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的第一定時(shí)任務(wù),以周期性的從所述狀態(tài)文件中讀取對(duì)應(yīng)的java虛擬機(jī)的運(yùn)行狀態(tài);將讀取到的java虛擬機(jī)的運(yùn)行狀態(tài)上傳至服務(wù)端。
該第二處理器可以進(jìn)一步被配置為:在所述第一常駐監(jiān)控進(jìn)程對(duì)java虛擬機(jī)進(jìn)行監(jiān)控時(shí),運(yùn)行與所述第一常駐監(jiān)控進(jìn)程對(duì)應(yīng)的第二定時(shí)任務(wù),以周期性的檢測(cè)所述狀態(tài)文件的大小是否大于或等于預(yù)設(shè)閾值;當(dāng)所述狀態(tài)文件的大小大于或等于預(yù)設(shè)閾值時(shí),殺死對(duì)應(yīng)的第一常駐監(jiān)控進(jìn)程并刪除所述狀態(tài)文件;啟動(dòng)與所述java虛擬機(jī)對(duì)應(yīng)的第二常駐監(jiān)控進(jìn)程,以繼續(xù)監(jiān)控所述java虛擬機(jī)的運(yùn)行狀態(tài)。
此外,本申請(qǐng)實(shí)施例還提供了一種包括指令的非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),例如包括指令的存儲(chǔ)器,上述指令可由裝置的處理器執(zhí)行以完成上述獲取java虛擬機(jī)的運(yùn)行狀態(tài)的方法。例如,所述非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是rom、隨機(jī)存取存儲(chǔ)器(ram)、cd-rom、磁帶、軟盤和光數(shù)據(jù)存儲(chǔ)設(shè)備等。
在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(rom)或閃存(flashram)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機(jī)存取存儲(chǔ)器(sram)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)、其他類型的隨機(jī)存取存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、電可擦除可編程只讀存儲(chǔ)器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電 腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號(hào)和載波。
如在說明書及權(quán)利要求當(dāng)中使用了某些詞匯來指稱特定組件。本領(lǐng)域技術(shù)人員應(yīng)可理解,硬件制造商可能會(huì)用不同名詞來稱呼同一個(gè)組件。本說明書及權(quán)利要求并不以名稱的差異來作為區(qū)分組件的方式,而是以組件在功能上的差異來作為區(qū)分的準(zhǔn)則。如在通篇說明書及權(quán)利要求當(dāng)中所提及的“包含”為一開放式用語,故應(yīng)解釋成“包含但不限定于”?!按笾隆笔侵冈诳山邮盏恼`差范圍內(nèi),本領(lǐng)域技術(shù)人員能夠在一定誤差范圍內(nèi)解決所述技術(shù)問題,基本達(dá)到所述技術(shù)效果。此外,“耦接”一詞在此包含任何直接及間接的電性耦接手段。因此,若文中描述一第一裝置耦接于一第二裝置,則代表所述第一裝置可直接電性耦接于所述第二裝置,或通過其他裝置或耦接手段間接地電性耦接至所述第二裝置。說明書后續(xù)描述為實(shí)施本申請(qǐng)的較佳實(shí)施方式,然所述描述乃以說明本申請(qǐng)的一般原則為目的,并非用以限定本申請(qǐng)的范圍。本申請(qǐng)的保護(hù)范圍當(dāng)視所附權(quán)利要求所界定者為準(zhǔn)。
還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的商品或者系統(tǒng)不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種商品或者系統(tǒng)所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的商品或者系統(tǒng)中還存在另外的相同要素。
上述說明示出并描述了本申請(qǐng)的若干優(yōu)選實(shí)施例,但如前所述,應(yīng)當(dāng)理解本申請(qǐng)并非局限于本文所披露的形式,不應(yīng)看作是對(duì)其他實(shí)施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構(gòu)想范圍內(nèi),通過上述教導(dǎo)或相關(guān)領(lǐng)域的技術(shù)或知識(shí)進(jìn)行改動(dòng)。而本領(lǐng)域人員所進(jìn)行的改動(dòng)和變化不脫離本申請(qǐng)的精神和范圍,則都應(yīng)在本申請(qǐng)所附權(quán)利要求的保護(hù)范圍內(nèi)。