本發(fā)明涉及云計算管理技術(shù)領(lǐng)域,特別是指一種云計算環(huán)境下子進(jìn)程維護(hù)方法。
背景技術(shù):
在云計算解決方案中,管理節(jié)點對實現(xiàn)節(jié)點(計算節(jié)點、存儲節(jié)點、網(wǎng)絡(luò)節(jié)點等)存在著大量的命令控制工作,尤其是實現(xiàn)端對于底層虛擬化的操作命令。通常為了實現(xiàn)程序的松耦合,對于底層的操作命令和管理端的程序是分離的,實現(xiàn)端對于底層的命令只負(fù)責(zé)調(diào)用,底層操作系統(tǒng)負(fù)責(zé)執(zhí)行,并返回結(jié)果。然而對于一些執(zhí)行時間較長的命令,比如拷貝鏡像、傳輸文件、打包等操作,無法通過實現(xiàn)端對其進(jìn)行中斷、取消操作,比如關(guān)閉實現(xiàn)端進(jìn)程時,理論上當(dāng)前正在執(zhí)行的任務(wù)也應(yīng)該關(guān)閉,并返回執(zhí)行失敗。目前對于這類情況只能通過底層操作系統(tǒng)執(zhí)行相關(guān)命令進(jìn)行相關(guān)子進(jìn)程的維護(hù)工作,這樣存在以下弊端:
1、是維護(hù)性差,需要進(jìn)入每個計算節(jié)點查看需要停止的子進(jìn)程,有可能找到的時候子進(jìn)程已經(jīng)執(zhí)行完成;
2、不安全,容易產(chǎn)生僵尸進(jìn)程,當(dāng)實現(xiàn)端主進(jìn)程由于維護(hù)需要而關(guān)閉,由實現(xiàn)端執(zhí)行的命令子進(jìn)程有可能變成僵尸進(jìn)程,從而影響系統(tǒng)正常使用;
為了從真正意義上實現(xiàn)對云計算環(huán)境下子進(jìn)程的合理維護(hù),需要一種當(dāng)管理節(jié)點或者實現(xiàn)節(jié)點進(jìn)程關(guān)閉時子進(jìn)程自動關(guān)閉的維護(hù)機(jī)制。
技術(shù)實現(xiàn)要素:
本發(fā)明解決的技術(shù)問題在于提供一種云計算環(huán)境下子進(jìn)程維護(hù)方法,解決傳統(tǒng)方法存在的不足,為云計算環(huán)境下子進(jìn)程提供一種維護(hù)性高,安全性好的解決方案。
本發(fā)明解決上述問題的技術(shù)方案是,包括以下步驟:
所述方法包括如下步驟:
步驟1:管理節(jié)點及實現(xiàn)節(jié)點進(jìn)程啟動后,注冊關(guān)閉進(jìn)程掛鉤,用于處理子進(jìn)程;
步驟2:子進(jìn)程產(chǎn)生記錄至子進(jìn)程Maps,銷毀時移出Maps;
步驟3:管理節(jié)點及實現(xiàn)節(jié)點進(jìn)程通過關(guān)閉時,先調(diào)用掛鉤線程;
步驟4:執(zhí)行掛鉤線程,關(guān)閉子進(jìn)程Maps里面所有記錄子進(jìn)程。
所述的管理節(jié)點和實現(xiàn)節(jié)點分別是云計算解決方案中的管理模塊和實現(xiàn)模塊;
所述的管理模塊是指云計算解決方案中負(fù)責(zé)產(chǎn)生任務(wù)、發(fā)送任務(wù)、接收任務(wù)反饋的業(yè)務(wù)控制管理模塊,該模塊只負(fù)責(zé)產(chǎn)生任務(wù),不負(fù)責(zé)任務(wù)實現(xiàn);
所述的實現(xiàn)模塊是云計算解決方案中負(fù)責(zé)消費任務(wù),任務(wù)實現(xiàn)的業(yè)務(wù)功能模塊。
所述的進(jìn)程掛鉤,是JAVA中Runtime.addShutdownHook方法,用來在jvm中增加一個關(guān)閉的鉤子;當(dāng)程序正常退出,系統(tǒng)調(diào)用System.exit方法或虛擬機(jī)被關(guān)閉時才會執(zhí)行添加的shutdownHook線程;其中shutdownHook是一個已初始化但并不有啟動的線程,當(dāng)JVM關(guān)閉的時候,會執(zhí)行系統(tǒng)中已經(jīng)設(shè)置的所有通過方法addShutdownHook添加的鉤子,當(dāng)系統(tǒng)執(zhí)行完這些鉤子后,JVM才會關(guān)閉。
所述的子進(jìn)程產(chǎn)生記錄至子進(jìn)程Maps,銷毀時移出Maps;
所述的子進(jìn)程,是云計算環(huán)境下一些通過管理節(jié)點或?qū)崿F(xiàn)節(jié)點發(fā)起的底層操作命令,產(chǎn)生的子進(jìn)程;
所述的進(jìn)程Maps,主要適用于記錄所有子進(jìn)程的信息表,比如子進(jìn)程的id,名稱,內(nèi)容等。
本發(fā)明的方法維護(hù)性好,主進(jìn)程關(guān)閉時,會優(yōu)先關(guān)閉所有子進(jìn)程,適用于云計算環(huán)境中執(zhí)行時間較長的命令。本發(fā)明的方法安全性高,避免了由于主進(jìn)程關(guān)閉,而導(dǎo)致子進(jìn)程變成僵尸進(jìn)程的風(fēng)險,提高了系統(tǒng)的穩(wěn)定性,降低子進(jìn)程長時間駐留內(nèi)存,導(dǎo)致JVM虛擬機(jī)死機(jī)或者系統(tǒng)內(nèi)存利用率高的風(fēng)險。
附圖說明
下面結(jié)合附圖對本發(fā)明進(jìn)一步說明:
圖1為本發(fā)明的流程圖;
圖2為本發(fā)明的技術(shù)原理圖;
具體實施方式
如圖1、2所示,本發(fā)明主要核心是通過進(jìn)程掛鉤來實現(xiàn),具體實施過程如下:
1、管理節(jié)點及實現(xiàn)節(jié)點進(jìn)程啟動后,注冊關(guān)閉進(jìn)程掛鉤,用于處理子進(jìn)程;
Runtime對象的addShutdownHook(Thread hook)方法中注冊新的虛擬機(jī)來關(guān)閉掛鉤。Hook線程中實現(xiàn)環(huán)境清理工作。
2、子進(jìn)程產(chǎn)生記錄至子進(jìn)程Maps,銷毀時移出Maps;
3、管理節(jié)點及實現(xiàn)節(jié)點進(jìn)程通過關(guān)閉時,先調(diào)用掛鉤線程;
4、執(zhí)行掛鉤線程,關(guān)閉子進(jìn)程Maps里面所有記錄子進(jìn)程。
比如創(chuàng)建虛擬機(jī)沒有進(jìn)行鏡像cache時,會自動拷貝鏡像到cache目錄。在拷貝的過程中,通過kill實現(xiàn)端進(jìn)程id、ctrl+C取消執(zhí)行時,相關(guān)dd進(jìn)程消失。