專利名稱:一種軟件抗衰方法及其系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件維護技術(shù),尤其涉及針對包含多種業(yè)務(wù)的大型應(yīng)用系統(tǒng)的抗衰系統(tǒng)及其方法。
背景技術(shù):
軟件衰退現(xiàn)象是指一個長期持續(xù)運行的軟件系統(tǒng)因發(fā)生狀態(tài)退化和性能降低而最終導(dǎo)致系統(tǒng)崩潰的現(xiàn)象。 一般軟件運行過程可劃分為四個階段,且各個狀態(tài)之間的轉(zhuǎn)移模型如圖1所示。
(1) 健壯態(tài)SO:即軟件剛啟動時的高度健康狀態(tài),發(fā)生宕機的概率基本為0;
(2) 亞健壯態(tài)S1:即軟件啟動后經(jīng)過一段較長時間的運行,由健壯態(tài)進入亞健康態(tài)(即轉(zhuǎn)移過程rl),此時發(fā)生性能衰退或宕機的概率大于O;
(3) 衰退態(tài)S2:在亞健壯態(tài)駐留了一段時間后,就會進入故障宕機時間易發(fā)的衰退態(tài)(即轉(zhuǎn)移過程r2);
(4) 自愈態(tài)S3:在衰退態(tài)系統(tǒng)執(zhí)行自愈操作后到達自愈態(tài)(即轉(zhuǎn)移過程r3),該狀態(tài)下系統(tǒng)的性能稍遜于健壯態(tài)。
除上述狀態(tài)轉(zhuǎn)移模型外,還會有因系統(tǒng)的某些操作導(dǎo)致由上述Sl直接進入自愈態(tài)S3,譬如r5;或因整個系統(tǒng)重啟導(dǎo)致由Sl、 S2直接回到健壯態(tài)SO,譬如r6。
從軟件工程學(xué)的角度來看,在軟件的設(shè)計階段、開發(fā)階段及測試階段來消除軟件衰退通常是不可能的,因此軟件在運行時期的衰退現(xiàn)象有其存在的必然性。
一些大型應(yīng)用系統(tǒng),以電信領(lǐng)域中的綜合網(wǎng)管系統(tǒng)為例,該系統(tǒng)需要提供拓樸、告警、性能、配置、信令跟蹤、安全、日志、策略管理及業(yè)務(wù)分析等種類繁多的功能。這類系統(tǒng)的用戶(即網(wǎng)管系統(tǒng)的使用者)對性能變化非
常敏感,對平均故障間隔(MTBF)也有很高的要求。
而現(xiàn)有的 一些軟件系統(tǒng)的抗衰系統(tǒng)及方法,存在以下一些問題
(1) 通過在軟件系統(tǒng)中插入各種性能監(jiān)控代理(agent),會由于監(jiān)控agent運行而給系統(tǒng)帶來額外的負載沖擊;
例如,美國專利US2004078657 4皮露了一種基于模式識別的軟件抗衰方法,通過對一些特定的性能指標進行周期性測量,當測量值與知識庫中的預(yù)設(shè)值背離時,啟動系統(tǒng)的抗衰操作。該方法需要對特定的性能指標進行限定,且需要預(yù)先構(gòu)建模式庫,并需要編寫性能測量agent,故實施監(jiān)控的時候會給系統(tǒng)帶來額外的負載沖擊。
(2) 由于需要進行大量的趨勢分析會帶來復(fù)雜的計算量;
(3 )基于時間的抗衰系統(tǒng)及方法通常對負載變化容忍性差,即對負載變化不敏感,抗衰粒度粗,不能通過感知系統(tǒng)負載變化來進行抗衰調(diào)整。
例如,美國專利US2007083794纟皮露了一種通過主動復(fù)制策略來防止軟件老化的方法,復(fù)制策略是基于軟件應(yīng)用本身。當復(fù)制策略的條件滿足時,對軟件整體進行復(fù)制(包括軟件狀態(tài)信息),復(fù)制完成之后,進行軟件應(yīng)用整體切換。該方法由于軟件應(yīng)用本身,在條件滿足時對軟件整體進行復(fù)制及進行軟件整體切換,故其抗衰粒度粗,會由此對系統(tǒng)性能造成較大沖擊。
(4 )缺乏能夠探測未知的衰退因素的功能,故不能為系統(tǒng)優(yōu)化提供依據(jù)。發(fā)明目的
本發(fā)明所要解決的技術(shù)問題是提供一種軟件抗衰方法及其系統(tǒng),能夠避免抗衰粒度較粗而對負載變化容忍性差的問題。
為了解決上述技術(shù)問題,本發(fā)明提供了一種軟件抗衰方法,包括
獲取基于構(gòu)件的軟件系統(tǒng)的操作日志;
以時間窗為單位,按時間從先到后的順序逐個時間窗地對梯:作日志的構(gòu)件操作結(jié)果及其時間開銷進行分析,確定軟件系統(tǒng)及其包含的各構(gòu)件的運行狀況參數(shù),在軟件系統(tǒng)的運行狀況參數(shù)的取值符合重啟條件時,將此時功能
衰退的構(gòu)件確定為需重啟構(gòu)件;對需重啟構(gòu)件進行重啟。
進一步地,所述功能衰退的構(gòu)件中至少部分構(gòu)件是按照以下方式確定的
對操作日志的構(gòu)件操作結(jié)果及時間開銷進行分析時,對構(gòu)件自軟件系統(tǒng)重啟以來發(fā)生操作失敗的次數(shù)進行累計,將累計操作失敗次數(shù)大于或大于等于設(shè)定的失敗次數(shù)閾值的構(gòu)件作為功能衰退的構(gòu)件。
進一步地,所述功能衰退的構(gòu)件中至少部分構(gòu)件是按照以下方式確定的對操作日志的構(gòu)件操作結(jié)果及時間開銷進行分析時,對操作均成功的每
一構(gòu)件,如該構(gòu)件在當前時間窗的單次#:作平均時延大于上一時間窗的單次
操作平均時延,且大于或大于等于設(shè)定的時延閾值,將該構(gòu)件作為當前需觀測的構(gòu)件,并將該構(gòu)件,見測次數(shù)加一;
在軟件系統(tǒng)的運行狀況參數(shù)的取值符合重啟條件時,將當前需觀測的構(gòu)件中累計服務(wù)懲罰時間最大的一個或多個構(gòu)件,或累計服務(wù)懲罰時間大于設(shè)定的服務(wù)懲罰時間閾值的一個或多個構(gòu)件,作為所述功能衰退的構(gòu)件。
進一步地,所述功能衰退的構(gòu)件中至少部分構(gòu)件是按照以下方式確定的
對操作日志的構(gòu)件操作結(jié)果及時間開銷進行分析時,在當前時間窗內(nèi)計算系統(tǒng)中每一個構(gòu)件的總體服務(wù)時間,在軟件系統(tǒng)的運行狀況參數(shù)的取值符合重啟條件時,將當前總體服務(wù)時間最大的M個構(gòu)件作為所述功能衰退的構(gòu)件,其中M的值是預(yù)先設(shè)定的,M=l,2,...;或者M等于總體服務(wù)時間大于設(shè)定的構(gòu)件總體服務(wù)時間閾值的構(gòu)件的個數(shù),M=l,2,...;或者在按其它方式確定的功能衰退的構(gòu)件數(shù)Ml小于設(shè)定的一次啟動構(gòu)件數(shù)M0時,取M=M0-M1,在M1^VI0時,則M=0;
構(gòu)件的總體服務(wù)時間為自上次軟件系統(tǒng)重啟以來,該構(gòu)件所有成功搮:作的時間開銷之和減去該構(gòu)件所有服務(wù)懲罰時間之和得到的差。
進一步地所述重啟條件為當前時間窗的系統(tǒng)總體服務(wù)時間小于或小于等于設(shè)定的系統(tǒng)總體服務(wù)時間閾值,系統(tǒng)總體服務(wù)時間等于當前時間窗內(nèi)所有構(gòu)件成功
操作的時間開銷之和減去所有構(gòu)件的服務(wù)懲罰時間之和;或者
所述重啟條件為當前時間窗內(nèi)所有構(gòu)件的服務(wù)懲罰時間之和,與當前時間窗內(nèi)所有構(gòu)件成功操作的時間開銷之和的比值或與當前時間窗內(nèi)所有構(gòu)件操作的時間開銷之和的比值,大于或大于等于設(shè)定的比例閾值。
進一步地,構(gòu)件的服務(wù)懲罰時間按以下方式確定
在當前時間窗內(nèi)存在操作失敗的構(gòu)件,該構(gòu)件在當前時間窗內(nèi)的服務(wù)懲罰時間等于該構(gòu)件每次失敗的構(gòu)件操作的時間開銷之和;
在當前時間窗內(nèi)梯:作均成功的構(gòu)件,如該構(gòu)件在當前時間窗的單次操:作平均時延大于上一時間窗的單次操作平均時延,且大于或大于等于設(shè)定的時延閾值,將該構(gòu)件在當前時間窗內(nèi)所有成功的構(gòu)件操作的時間開銷之和與一懲罰系數(shù)的積,作為該構(gòu)件在當前時間窗內(nèi)的服務(wù)懲罰時間,該懲罰系數(shù)的取值根據(jù)該構(gòu)件的累計觀測次數(shù)或連續(xù)觀測次數(shù)查找對應(yīng)的配置數(shù)據(jù)得到,且隨著觀測次數(shù)增大而增大。
進一步地
將此時功能衰退的構(gòu)件確定為需重啟構(gòu)件時,還根據(jù)設(shè)定的規(guī)則確定每一個需重啟構(gòu)件的重啟時刻;對需重啟構(gòu)件進行重啟之前,需要根據(jù)構(gòu)件之間的依賴關(guān)系,將需重啟構(gòu)件以及與需重啟構(gòu)件之間存在依賴關(guān)系的構(gòu)件構(gòu)造一個或多個重啟鏈,從重啟鏈的根構(gòu)件開始按序重啟該重啟鏈上的構(gòu)件。
為了解決上述技術(shù)問題,本發(fā)明提供了一種軟件抗衰系統(tǒng),包括依次連接的數(shù)據(jù)庫服務(wù)模塊、操作日志分析模塊以及重啟守護模塊,其中
數(shù)據(jù)庫服務(wù)模塊,用于獲取基于構(gòu)件的軟件系統(tǒng)的操作曰志;
操作日志分析模塊,用于以時間窗為單位,按時間從先到后的順序逐個時間窗地對所述"t喿作日志的構(gòu)件操作結(jié)果及其時間開銷進行分析,確定軟件系統(tǒng)及其包含的各構(gòu)件的運行狀況參數(shù),在軟件系統(tǒng)的運行狀況參數(shù)的取值符合重啟條件時,將此時功能衰退的構(gòu)件確定為需重啟構(gòu)件并保存;重啟守護模塊,用于對需重啟構(gòu)件進行重啟。
進一步地,操作日志分析模塊進一步包括第一分析單元,用于對構(gòu)件自軟件系統(tǒng)重啟以來發(fā)生操作失敗的次數(shù)進行累計,將累計操作失敗次數(shù)大于或大于等于設(shè)定的失敗次數(shù)閾值的構(gòu)件作為為需重啟構(gòu)件保存。
進一步地,操作日志分析模塊進一步包括第二分析單元,用于對操作均成功的每一構(gòu)件計算各時間窗的單次操作平均時延,如該構(gòu)件在當前時間窗的單次操作平均時延大于其上一時間窗的單次操作平均時延,且大于或大于等于設(shè)定的時延閾值,將該構(gòu)件作為當前需觀測的構(gòu)件,并將該構(gòu)件觀測次數(shù)加一;在確定軟件系統(tǒng)的運行狀況參數(shù)的取值符合重啟條件時,將當前需觀測的構(gòu)件中累計服務(wù)懲罰時間最大的一個或多個構(gòu)件,或累計服務(wù)懲罰時間大于設(shè)定的服務(wù)懲罰時間閾值的一個或多個構(gòu)件,作為需重啟構(gòu)件保存。
進一步地,操作日志分析模塊進一步包括第三分析單元,用于在當前時間窗內(nèi)計算系統(tǒng)中每一個構(gòu)件的總體服務(wù)時間,在軟件系統(tǒng)的運行狀況參數(shù)的取值符合重啟條件時,將當前總體服務(wù)時間最大的M個構(gòu)件作為所述重啟構(gòu)件保存,其中M的值是預(yù)先設(shè)定的,M=l,2,...;或者M等于總體服務(wù)時間大于設(shè)定的構(gòu)件總體服務(wù)時間閾值的構(gòu)件的個數(shù),M=l,2,...;或者在按其它方式確定的功能衰退的構(gòu)件數(shù)M1小于設(shè)定的一次啟動構(gòu)件數(shù)MO時,取M=M0-M1,在M1^VI0時,則M=0;
其中構(gòu)件的總體服務(wù)時間為自上次軟件系統(tǒng)重啟以來,該構(gòu)件所有成功操作的時間開銷之和減去該構(gòu)件所有服務(wù)懲罰時間之和得到的差。
進一步地,操作日志分析模塊進一步包括重啟判決單元,用于判斷軟件系統(tǒng)的運行狀況參數(shù)的取值是否符合重啟條件,即
當前時間窗的系統(tǒng)總體服務(wù)時間小于或小于等于設(shè)定的系統(tǒng)總體服務(wù)時間閾值,系統(tǒng)總體服務(wù)時間等于當前時間窗內(nèi)所有構(gòu)件成功操作的時間開銷之和減去所有構(gòu)件的服務(wù)懲罰時間之和;
或者,當前時間窗內(nèi)所有構(gòu)件的服務(wù)懲罰時間之和,與當前時間窗內(nèi)所有構(gòu)件成功操作的時間開銷之和的比值或與當前時間窗內(nèi)所有構(gòu)件操作的時間開銷之和的比值,大于或大于等于設(shè)定的比例閾值。
進一步地,所述構(gòu)件的服務(wù)懲罰時間的確定按以下方式進行
在當前時間窗內(nèi)存在操作失敗的構(gòu)件,該構(gòu)件在當前時間窗內(nèi)的服務(wù)懲罰時間等于該構(gòu)件每次失敗的構(gòu)件操作的時間開銷之和;
在當前時間窗內(nèi)操作均成功的構(gòu)件,如該構(gòu)件在當前時間窗的單次操作平均時延大于上一時間窗的單次操作平均時延,且大于或大于等于設(shè)定的時延閾值,將該構(gòu)件在當前時間窗內(nèi)所有成功的構(gòu)件操作的時間開銷之和與一懲罰系數(shù)的積,作為該構(gòu)件在當前時間窗內(nèi)的服務(wù)懲罰時間,該懲罰系數(shù)的取值根據(jù)該構(gòu)件的累計觀測次數(shù)或連續(xù)觀測次數(shù)查找對應(yīng)的配置數(shù)據(jù)得到,且隨著觀測次數(shù)增大而增大。
進一步地,
操作日志分析模塊將功能衰退的構(gòu)件確定為需重啟構(gòu)件時,還根據(jù)設(shè)定的規(guī)則確定每一個需重啟構(gòu)件的重啟時刻;
重啟守護模塊,在對需重啟構(gòu)件進行重啟前,根據(jù)構(gòu)件之間的依賴關(guān)系,將需重啟構(gòu)件以及與需重啟構(gòu)件之間存在依賴關(guān)系的構(gòu)件構(gòu)造一個或多個重啟鏈,從重啟鏈的根構(gòu)件開始按序重啟該重啟鏈上的構(gòu)件。
本發(fā)明的軟件抗衰系統(tǒng)及方法,由于基于構(gòu)件的軟件架構(gòu),故能夠?qū)崿F(xiàn)微重啟;在分析上既結(jié)合宏觀層面的信息,又結(jié)合微觀層面的信息,故可避免抗衰粒度較粗而導(dǎo)致對負載變化容忍性差的問題;并且,基于系統(tǒng)操作日志,不僅考慮了當前操作的情況,而且考慮歷史操作信息,故可避免因瞬時異常數(shù)據(jù)而導(dǎo)致構(gòu)件重啟的誤操作,也避免了趨勢分析帶來的復(fù)雜計算量;同時,因不必專門開發(fā)監(jiān)控Agent而避免了抗衰操作給系統(tǒng)帶來額外的負載沖擊;由于能夠偵測到軟件未知的一些衰退因素,因而能夠為系統(tǒng)優(yōu)化提供充足的依據(jù)。
本發(fā)明在實現(xiàn)上具有普適性,執(zhí)行抗衰的過程具有很低的抗衰成本,幫助大型應(yīng)用系統(tǒng)的運營者減少系統(tǒng)意外停機時間,提高系統(tǒng)服務(wù)率,增加系統(tǒng)有效工作周期。
圖1為軟件運行過程中的狀態(tài)轉(zhuǎn)移示意圖2為本發(fā)明的軟件抗衰方法實施例流程圖3為基于構(gòu)件的軟件系統(tǒng)抗衰粒度分層示意圖4為基于構(gòu)件的軟件系統(tǒng)抗衰粒度取決于構(gòu)件粒度示意圖5為本發(fā)明的軟件抗衰系統(tǒng)實施例的結(jié)構(gòu)框架圖。
具體實施例
以下結(jié)合附圖和優(yōu)選實施例對本發(fā)明的技術(shù)方案進行詳細地闡述。以下例舉的實施例僅僅用于說明和解釋本發(fā)明,而不構(gòu)成對本發(fā)明技術(shù)方案的限制。
本實施例軟件抗衰方法的流程如圖2所示,每次進行抗衰處理時,執(zhí)行以下步驟
步驟201:獲取基于構(gòu)件的軟件系統(tǒng)在一段時間內(nèi)的操作日志,按設(shè)定的時間粒度將該段時間劃分形成時間窗序列,附,/=/,二...";
本實施例中,抗衰處理是周期性地進行,獲取的操作日志的時間段可以上次完成抗衰處理的時間為開始時間,時間長度即為一個抗衰處理周期的長
度,可設(shè)置為時間粒度的整數(shù)倍,如1,2,3,......。當然,也可以手動觸發(fā)進行
抗衰處理并設(shè)置要獲取的操作日志所在的時間段。
在軟件系統(tǒng)中,其抗衰粒度可分為3層,如圖3所示系統(tǒng)層,將整個應(yīng)用系統(tǒng)作為重啟對象;功能層,將應(yīng)用系統(tǒng)的某一功能組作為重啟對象;構(gòu)件層,將應(yīng)用系統(tǒng)的某一功能(或者某一功能的一部分)作為重啟對象。
本發(fā)明的軟件抗衰方法用于基于構(gòu)件的軟件系統(tǒng),故能夠?qū)④浖顾チ6冉档驮跇?gòu)件的粒度上,并能在此基礎(chǔ)上進行微調(diào),由此可避免抗衰粒度較粗而對負載變化容忍性差的問題。對象管理組織(OMG, Object Management Group )的通用對象請求代理架構(gòu)(CORBA, Common Object Request Broker Architecture )標準、SUNz>司的(JavaEE, Java Platform Enterprise Edition )標準、孩i專欠7^司的.NET框架的提出,以及環(huán)球網(wǎng)服務(wù)(Web Services)等技術(shù)的發(fā)展,構(gòu)件技術(shù)在軟件開發(fā)中扮演著越來越重要的角色。軟件構(gòu)件技術(shù)本身是出于軟件復(fù)用的角度提出的,但構(gòu)件自身的獨立部署特性,使其具有相對獨立的生命周期。因此基于構(gòu)件技術(shù)的軟件架構(gòu)是軟件抗衰粒度降低實施的關(guān)鍵。
軟件系統(tǒng)抗衰粒度細化的程度取決于構(gòu)件粒度,如圖4所示。圖3中功能層中的某一功能組可能會由圖4中基礎(chǔ)支持層的一個或多個支撐構(gòu)件、框件層的一個或多個框架構(gòu)件以及應(yīng)用層的一個或多個應(yīng)用構(gòu)件組成;采用圖4所示構(gòu)件粒度級別的抗衰將會增強抗衰操作的自適應(yīng)性。
在此,步驟201的基于構(gòu)件的軟件系統(tǒng), 一是可以通過構(gòu)建基于構(gòu)件的軟件系統(tǒng)實現(xiàn),二是可以將構(gòu)建的非基于構(gòu)件的軟件系統(tǒng)轉(zhuǎn)化為基于構(gòu)件的軟件系統(tǒng)實現(xiàn)。
在此基于構(gòu)件的軟件系統(tǒng)其操作日志,可通過以下兩種方式獲取
一,大型應(yīng)用系統(tǒng)都存在獨立的日志模塊,并提供統(tǒng)一的日志接口,由系統(tǒng)其它模塊調(diào)用,用于記錄模塊各自的操作。系統(tǒng)日志包含了豐富的操作信息,例如操作發(fā)生的時間,操作結(jié)束的時間,操作類型,操作的結(jié)果,操作的級別,執(zhí)行操作的模塊,操作涉及的管理對象實例,等等。因此可將系統(tǒng)日志視為一個豐富的性能檢測數(shù)據(jù)源。通過應(yīng)用系統(tǒng)提供的日志接口定期將其^t喿作日志遷移到軟件抗衰系統(tǒng)便可獲取操作日志數(shù)據(jù)。
二,如果應(yīng)用系統(tǒng)不能提供相應(yīng)的操作日志,則可以采取攔截器模式來獲取抗衰需要的操作日志。攔截器模式的好處在于其可在不被應(yīng)用程序感知的情況下被添加或^皮刪除,而且可以#1動態(tài)地觸發(fā);通過這種方式可以4艮方便地定制需要采集的操作日志,且不會對應(yīng)用程序的性能造成沖擊。
步驟202:根據(jù)操作日志數(shù)據(jù)記錄的構(gòu)件操作結(jié)果和時間開銷,統(tǒng)計當前時間窗內(nèi)每一構(gòu)件的服務(wù)時間、服務(wù)次數(shù)和服務(wù)懲罰時間;
在一次抗衰處理過程中,按照時間從先到后的順序?qū)Ω鲿r間窗逐一處理的。在周期性進行抗衰處理時,對本次抗衰處理的第一個時間窗來說,其上一時間窗為上次抗衰處理的最后一個時間窗。
對于每一個軟件操作而言,都會涉及到相應(yīng)的構(gòu)件實例,可參見圖3、圖4。 一個用戶操作可分解為多個構(gòu)件操作,統(tǒng)計基于每一構(gòu)件進行。
根據(jù)日志中保存的每一次成功的構(gòu)件操作的操作開始時間TStart和操作結(jié)束時間TEnd,通過式(1)確定該次構(gòu)件操作的時間開銷并將其作為該次構(gòu)件操作的構(gòu)件服務(wù)時間
<formula>formula see original document page 14</formula>
某 一構(gòu)件在當前時間窗內(nèi)進行的所有成功的構(gòu)件操作的次數(shù),即為該構(gòu)件在當前時間窗內(nèi)的構(gòu)件服務(wù)次數(shù),而所有成功的構(gòu)件操作的構(gòu)件服務(wù)時間之和,即為該構(gòu)件在當前時間窗內(nèi)的構(gòu)件服務(wù)時間。
對于每一次失敗的構(gòu)件操作,將根據(jù)式(1 )確定的時間開銷作為該次構(gòu)件操作的構(gòu)件服務(wù)懲罰時間,該次構(gòu)件操作的構(gòu)件服務(wù)時間為0。操作者輸入?yún)?shù)的錯誤所涉及的構(gòu)件操作不視為失敗的構(gòu)件操作。
上述構(gòu)件的服務(wù)時間、服務(wù)次數(shù)和服務(wù)懲罰時間,以及構(gòu)件的才喿作失敗次數(shù)均屬于構(gòu)件的運行狀況參數(shù),根據(jù)所包含構(gòu)件的這些運行狀況參數(shù),可以得到系統(tǒng)總體的運行狀況參數(shù)。
步驟203:對當前時間窗內(nèi)發(fā)生了操作失敗的每一構(gòu)件,更新該構(gòu)件從系統(tǒng)重啟以來的操作失敗次數(shù),如該構(gòu)件當前還不在觀測列表中,將其放入,見測列表;
本實施例中,如某構(gòu)件的操作失敗次數(shù)大于等于設(shè)定的失敗次數(shù)閾值時,就不再將該構(gòu)件從觀測列表中取出,該構(gòu)件被重啟前也可以不再繼續(xù)更新其操作失敗次數(shù)。失敗次數(shù)閾值為自然數(shù),可設(shè)定為1,2,3.....等。這里的操作失敗次數(shù)可以自系統(tǒng)重啟起來進行累計得到,或在本次抗衰處理周期內(nèi)累計得到,等等。
步驟204:除去操作失敗次數(shù)大于等于設(shè)定的失敗次數(shù)閾值的構(gòu)件外,對當前時間窗內(nèi)操作均成功的每一構(gòu)件,如該構(gòu)件在當前時間窗內(nèi)的單次操作平均時延TCOSi的值及其變化符合設(shè)置的觀測條件或取消觀測條件,則將該構(gòu)件加入觀測列表或從觀測列表中刪除;
對于操作失敗次數(shù)大于等于設(shè)定的失敗次數(shù)閾值的構(gòu)件,可以不再計算其單次操作平均時延。
在當前時間窗『,中,將各構(gòu)件的構(gòu)件服務(wù)時間ra除以其服務(wù)次數(shù)
"m^(S)得到各構(gòu)件的單次搡作平均時延TCOS,,如下式所示
TCOS,=:ra 〃/薦(s); (2)
將上一時間窗計算得到的構(gòu)件單次操作平均時延計為rcos;w。
如果某構(gòu)件的單次操作平均時延7uos;+/ 〉7ros;且大于設(shè)定的時延閾值,則將該構(gòu)件作為當前需觀測的構(gòu)件,在該構(gòu)件還未放觀測列表時,將該構(gòu)件放入觀測列表中并將觀測次數(shù)置為i,如該構(gòu)件已在觀測列表中,則將觀測次數(shù)加i。上述操作時延閾值可以根據(jù)自系統(tǒng)重啟以來的時間開銷的數(shù)學(xué)期望或者經(jīng)-瞼值來確定。對于不同的構(gòu)件,可以相同,也可以不同。同時,根據(jù)該構(gòu)件在當前時間窗內(nèi)的服務(wù)時間ra 、觀測次凄tr,及相應(yīng)的懲罰系凄t
& ,按照式(3 )得到該構(gòu)件在當前時間窗內(nèi)的服務(wù)懲罰時間7Pi并加以記錄
其中,懲罰系數(shù)&根據(jù)觀測次數(shù)r,設(shè)置,隨著r,的增大而增大,譬如r產(chǎn)l,懲罰系數(shù)^'為2%; r嚴2, 懲罰系數(shù)尸,,為5%;......。
如果某構(gòu)件的TCOSi〈TCOSw且小于設(shè)定的時延閾值時,如果該構(gòu)件已在觀測列表中,則將該構(gòu)件從觀測列表中移除,并將該構(gòu)件的觀測次數(shù)清零。在將構(gòu)件從觀測列表移除時清零觀測次數(shù),相當于只統(tǒng)計連續(xù)進入觀測列表的次數(shù)。在另 一實施例中,如果某構(gòu)件的TCOSj 〈TCOSw ,則將構(gòu)件從觀測列表中移除,但不將觀測次數(shù)清零,表示針對此次不進行觀測,此時相當于對連續(xù)和不連續(xù)的觀測次數(shù)都進行累計。
根據(jù)構(gòu)件的單次操作平均時延時間的變化將構(gòu)件放入觀測列表,并根據(jù)觀測次數(shù)計算相應(yīng)的服務(wù)懲罰時間,就將構(gòu)件操作時延的增大作為體現(xiàn)軟件衰退的因素加以考慮了。
應(yīng)說明的是,上述步驟203和步驟204的處理的先后順序可以任意設(shè)定。步驟205:判斷當前時間窗內(nèi)的系統(tǒng)總體服務(wù)狀況是否已符合重啟條件,如果是,轉(zhuǎn)入步驟206,否則,執(zhí)行步驟207;
本實施例中,在該步先計算當前時間窗『,內(nèi)的系統(tǒng)總體服務(wù)時間ra。,w,等于該時間窗內(nèi)所有構(gòu)件的構(gòu)件服務(wù)時間之和,減去該時間窗內(nèi)所有構(gòu)件的服務(wù)懲罰時間之和,如公式(4)所示<formula>formula see original document page 16</formula>
其中,w為該時間窗^中構(gòu)件實例的總凄t。
相應(yīng)的重啟條件是該系統(tǒng)總體服務(wù)時間7X。,。,小于或小于等于設(shè)定的系統(tǒng)總體服務(wù)時間閾值TO^,敏,rSL。w可以根據(jù)系統(tǒng)重啟以來系統(tǒng)總體服務(wù)時間的數(shù)學(xué)期望或經(jīng)驗值來確定。這種重啟條件的設(shè)定較適宜于負荷比較均勻的系統(tǒng)。
重啟條件的設(shè)定可以有很多方式,只要能夠反映出軟件系統(tǒng)的性能是否已趨于衰退即可。如,在另一實施例中,可以將重啟條件設(shè)置為該時間窗內(nèi)所有構(gòu)件的服務(wù)懲罰時間之和,與該時間窗內(nèi)所有構(gòu)件的構(gòu)件服務(wù)時間之和的比值已大于或大于等于設(shè)定的比例閾值。該比值的大小可以說明軟件系統(tǒng)的性能已經(jīng)趨于衰退。另將上述"該時間窗內(nèi)所有構(gòu)件的服務(wù)懲罰時間之和"替換為"該時間窗內(nèi)所有構(gòu)件操作的時間開銷(即不管構(gòu)件操作成功與否,針對所有構(gòu)件計一個總的時間開銷)之和"也可以,實質(zhì)上是相同的,只需要相應(yīng)調(diào)整設(shè)定的閾值即可。又如,在一實施例中,簡單地將軟件系統(tǒng)重啟時刻到當前時刻的時間長度大于設(shè)定的時間長度作為重啟條件,也是可以的。這里不再——列舉。
步驟206,將處于觀測狀態(tài)的部分或全部構(gòu)件確定為功能衰退的構(gòu)件,轉(zhuǎn)入4寺重啟狀態(tài)并確定重啟時刻;
本實施例,具體^丸行以下處理
a)找出所有的因為操作失敗而被放入觀測列表的構(gòu)件,將這些構(gòu)件作為第一類需重啟構(gòu)件,從觀測列表轉(zhuǎn)移到重啟列表中,重啟時刻可以設(shè)置為下一時間窗的起始時刻7L劍。
b) 從因單次操作平均時延增大而被放入觀測列表中構(gòu)件中,選出累計的服務(wù)懲罰時間最大的一個或多個構(gòu)件,作為第二類需重啟構(gòu)件,放在重啟列表中。可以是對自系統(tǒng)重啟以來,或從本次抗衰處理周期起始時刻以來,或最近一段時間以來(如最近一月,最近一周或最近若干個時間窗等)的服務(wù)懲罰時間進行累計。
選出的構(gòu)件數(shù)可以是某個預(yù)設(shè)的數(shù)值;也可以設(shè)置一服務(wù)懲罰時間閾值,將服務(wù)懲罰時間大于該閾值的所有構(gòu)件選出,等等。這些構(gòu)件的重啟時刻可以根據(jù)懲罰系數(shù)設(shè)置為最近幾個時間窗的起始時刻,例如懲罰系數(shù)大于10%時,將重啟時刻設(shè)為當前時間窗后的第二個時間窗的起始時刻,懲罰系數(shù)為5%~10%時,設(shè)為當前時間窗后的第三個時間窗的起始時刻,懲罰系數(shù)小于5%時,設(shè)為當前時間窗后的第四個時間窗的起始時刻。
此處重啟時刻的設(shè)置并不局限于以上方式,如也可以不與懲罰系數(shù)的大小關(guān)聯(lián),都設(shè)成統(tǒng)一的時刻。
c) 可選的,根據(jù)軟件運行過程的規(guī)律,總體服務(wù)時間越大的構(gòu)件進入亞健壯態(tài)和衰退態(tài)的機率越大。針對于此,在當前時間窗內(nèi)累計系統(tǒng)中每一個
構(gòu)件自上次系統(tǒng)重啟以來的總體服務(wù)時間^to/(r&), toto/(rw等于該構(gòu)件自上次系統(tǒng)重啟以來的構(gòu)件服務(wù)時間之和減去構(gòu)件服務(wù)懲罰時間之和的差。
可以采用先進先出(FIFO)算法,將總體服務(wù)時間最大的N個構(gòu)件(N為設(shè)置值)作為備選重啟構(gòu)件,放入備選重啟列表中。對于備選重啟構(gòu)件,可以在第一類和第二類需重啟構(gòu)件的數(shù)目Ml較少時,如小于某個設(shè)定的一次啟動構(gòu)件數(shù)M0時,將其中總體服務(wù)時間最大的M0-M1個構(gòu)件確定為需重啟構(gòu)件并設(shè)置重啟時刻。M1^M0時,M=0。如此便體現(xiàn)了基于概率的分析方法,從軟件運行規(guī)j律上兼顧了長期運行的構(gòu)件的失效概率。在其他實施例中,M的值也可以單獨確定,如預(yù)先設(shè)定,或為總體服務(wù)時間大于設(shè)定的構(gòu)件總體服務(wù)時間閾值的構(gòu)件的個數(shù)等。
以上三類構(gòu)件的重啟時刻即可以是之后的某個時間窗的起始時刻,也可以不按時間窗的起始或結(jié)束時刻來設(shè)置,而是直接設(shè)置為之后的某個時刻如延遲某固定時間后啟動,或每天設(shè)置若干固定時刻作為重啟時刻,在其中最近的重啟時刻啟動上述需重啟構(gòu)件。等等。
步驟207,判斷所有時間窗的操作日志數(shù)據(jù)是否均已處理過,如果是,結(jié)束本次抗衰處理,否則,將下一時間窗作為當前時間窗,轉(zhuǎn)入步驟203。
在確定了要重啟的構(gòu)件及重啟時刻后,需要構(gòu)造重啟鏈,在重啟時刻到時,按該重啟鏈依序?qū)?gòu)件執(zhí)行重啟。本實施例中,是以設(shè)定的時間粒度為基礎(chǔ),啟動一個線程定期掃描重啟列表,找出下一個時間窗需要重啟的所有構(gòu)件,用這些構(gòu)件構(gòu)造出一個重啟鏈。為了區(qū)別于整個系統(tǒng)的重啟,文中也將對構(gòu)件的重啟稱為微重啟。類似綜合網(wǎng)管這樣一個大型的應(yīng)用系統(tǒng)必然包含著數(shù)以百計的應(yīng)用構(gòu)件,這些構(gòu)件之間存在著復(fù)雜的依賴關(guān)系,在對需重啟構(gòu)件進行重啟之前,需要根據(jù)構(gòu)件之間的依賴關(guān)系,將需重啟構(gòu)件以及與需重啟構(gòu)件之間存在依賴關(guān)系的構(gòu)件構(gòu)造一個或多個重啟鏈,從重啟鏈的根構(gòu)件開始按序重啟該重啟鏈上的構(gòu)件,從而實現(xiàn)抗衰。可以將構(gòu)件之間按照依賴關(guān)系構(gòu)造出的有向圖作為重啟鏈,有向圖的構(gòu)造如可以參照發(fā)明名稱為"具有復(fù)雜依賴關(guān)系組件的部署系統(tǒng)"、申請?zhí)枮?00610138332.1的中國專利,但并不局限于此(如果重啟鏈中只有一個或部分構(gòu)件需要重啟,也需要將整個重啟鏈上的構(gòu)件都重啟)。
在某時間窗需要重啟的構(gòu)件數(shù)目較少時,即小于某個設(shè)定的一次啟動構(gòu)件數(shù)時,可以從備選重啟列表中選取相應(yīng)構(gòu)件來構(gòu)造重啟鏈,這樣既不會對系統(tǒng)性能造成較大沖擊,也從軟件運行規(guī)律上兼顧了長期運行的構(gòu)件的失效概率。
任何處于重啟鏈上的構(gòu)件在執(zhí)行重啟后,先前統(tǒng)計的這些構(gòu)件相關(guān)的構(gòu)件服務(wù)時間、構(gòu)件服務(wù)懲罰時間、構(gòu)件服務(wù)次數(shù)、操作失敗次數(shù)等參數(shù)都進行歸零處理。沒有重啟的構(gòu)件的上述參數(shù)可以一直保留。
本實施例還用重啟日志對于重啟過程進4亍詳細記錄。重啟日志包含重啟鏈的詳細信息(微重啟的根構(gòu)件、重啟鏈的長度、重啟的總時間開銷、各構(gòu)件的重啟時間開銷)。結(jié)合上述抗衰處理時的分析方法,可以得出不同微重啟對系統(tǒng)總體服務(wù)時間的影響、微重啟的發(fā)生頻率等,以此構(gòu)建系統(tǒng)的重啟規(guī)則知識庫。例如,通過對執(zhí)行抗衰過程中記錄的重啟日志進行分析,可以確定熱點構(gòu)件(對系統(tǒng)服務(wù)時間影響大,重啟頻繁的構(gòu)件),找出這些熱點構(gòu)件潛在的缺陷加以克服,可以延長這些構(gòu)件的重啟周期,從而有效提升整個應(yīng)用系統(tǒng)運行的穩(wěn)定性。
本實施例的系統(tǒng)如圖5所示,包括構(gòu)件應(yīng)用系統(tǒng)和軟件抗衰系統(tǒng),這里的構(gòu)件應(yīng)用系統(tǒng)以綜合網(wǎng)管系統(tǒng)為例,包括多個應(yīng)用構(gòu)件、構(gòu)件生命周期接口以及操作日志數(shù)據(jù)庫。
JMX ( Java Management Extensions,即Java管理擴展)是J2EE體系架構(gòu)中為應(yīng)用程序、設(shè)備、系統(tǒng)等植入管理功能的框架。JMX是J2EE平臺上面的構(gòu)件管理技術(shù),利用JMX技術(shù),可以方便地將綜合網(wǎng)管的各個功能模塊包裝成可管理的、相對獨立的、相互之間有嚴格邊界的構(gòu)件,如圖所示。每一個構(gòu)件(在JMX中稱為MBean )都實現(xiàn)JMX規(guī)范的生命周期方法(創(chuàng)建、啟動、停止、銷毀)。這里的構(gòu)件都是指服務(wù)端構(gòu)件,綜合網(wǎng)管系統(tǒng)采用C/S結(jié)構(gòu)、客戶端和服務(wù)端都采用了構(gòu)件技術(shù),抗衰技術(shù)一般應(yīng)用在服務(wù)器端。這些MBean之間存在的依賴關(guān)系是構(gòu)造重啟鏈的重要原因。
軟件抗衰系統(tǒng)包括數(shù)據(jù)庫服務(wù)模塊、操作日志分析模塊、重啟構(gòu)件存儲模塊以及重啟守護模塊,還可以包括重啟日志數(shù)據(jù)庫、重啟日志分析模塊和重啟MJ,j庫;其中
數(shù)據(jù)庫服務(wù)模塊,用于獲取基于構(gòu)件的軟件系統(tǒng)在一段時間內(nèi)的操作日志,按設(shè)定的時間粒度將該段時間劃分形成時間窗序列,肌,/=7,2,...";
前已述及,在此基于構(gòu)件的軟件系統(tǒng)其操作日志,可通過以下兩種方式獲取 一是數(shù)據(jù)庫服務(wù)模塊通過綜合網(wǎng)管系統(tǒng)提供的日志接口定期將其操作日志遷移到軟件抗衰系統(tǒng)即可;二是數(shù)據(jù)庫服務(wù)模塊采用攔截器模式來獲取抗衰需要的操作日志。
操作日志分析模塊,用于以時間窗為單位,按時間從先到后的順序逐個時間窗地對所述操作日志的構(gòu)件操作結(jié)果及其時間開銷進行分析,確定軟件系統(tǒng)及其包含的各構(gòu)件的運行狀況參數(shù),在軟件系統(tǒng)的運行狀況參數(shù)的取值
符合重啟條件時,將此時功能衰退的構(gòu)件確定為需重啟構(gòu)件,存入重啟構(gòu)件 存儲模塊;其中包括
通過第一分析單元(圖5中未示)對構(gòu)件自軟件系統(tǒng)重啟以來發(fā)生"t喿作 失敗的次數(shù)進行累計,將累計操作失敗次數(shù)大于或大于等于設(shè)定的失敗次數(shù) 閾值的構(gòu)件確定為功能衰退的構(gòu)件,存入重啟構(gòu)件存儲模塊的重啟列表中。
通過第二分析單元(圖5中未示)對操作均成功的每一構(gòu)件計算其各時 間窗內(nèi)的單次操作平均時延,如該構(gòu)件在當前時間窗的單次操作平均時延大 于上一時間窗的單次操作平均時延且大于或大于等于設(shè)定的時延閾值,則將 該構(gòu)件作為當前需,見測的構(gòu)件,并4尋該構(gòu)件)現(xiàn)測次#:加一;在專欠件系統(tǒng)的運 行狀況參數(shù)的取值符合重啟條件時,將當前需觀測的構(gòu)件中累計服務(wù)懲罰時 間最大的一個或多個構(gòu)件,或累計服務(wù)懲罰時間大于設(shè)定的服務(wù)懲罰時間閾 值的一個或多個構(gòu)件,確定為所述功能衰退的構(gòu)件,存入重啟構(gòu)件存儲;漠塊 的重啟列表中。
通過第三分析單元(圖5中未示)計算當前時間窗內(nèi)系統(tǒng)的每一個構(gòu)件 的總體服務(wù)時間,在軟件系統(tǒng)的運行狀況參數(shù)的取值符合重啟條件時將當 前時間窗內(nèi)總體服務(wù)時間最大的M個構(gòu)件確定為功能衰退的構(gòu)件,存入重啟 構(gòu)件存儲模塊的重啟列表中,其中M的值是預(yù)先設(shè)定的(M=l,2,...,);或 者將M個總體服務(wù)時間大于設(shè)定的構(gòu)件總體服務(wù)時間閾值的構(gòu)件確定為功 能衰退的構(gòu)件(M=l,2,...),存入重啟構(gòu)件存儲模塊的重啟列表中;或者在 按其它方式確定的功能衰退的構(gòu)件數(shù)M1小于設(shè)定的一次重啟構(gòu)件數(shù)MO時, 取M個總體服務(wù)時間最大的構(gòu)件作為備選功能衰退構(gòu)件,存入重啟構(gòu)件存儲 模塊的備選重啟列表中,其中M-M0-M1,在M1^VI0時,M=0。
構(gòu)件的總體服務(wù)時間為自上次軟件系統(tǒng)重啟以來,該構(gòu)件所有成功的構(gòu) 件操作的時間開銷之和減去該構(gòu)件所有服務(wù)懲罰時間之和得到的差。
通過重啟判決單元(圖5中未示)判斷軟件系統(tǒng)的運行狀況參數(shù)的取值 是否符合重啟條件,即該系統(tǒng)總體服務(wù)時間7X。,。,小于或小于等于設(shè)定的系 統(tǒng)總體服務(wù)時間閾值r5Ww。w , T5W^。w可以根據(jù)系統(tǒng)重啟以來系統(tǒng)總體服務(wù)時 間的數(shù)學(xué)期望或經(jīng)驗值來確定。這種重啟條件的設(shè)定較適宜于負荷比較均勻的系統(tǒng)?;蛘撸斍皶r間窗內(nèi)所有構(gòu)件的服務(wù)懲罰時間之和,與該時間窗內(nèi) 所有構(gòu)件的構(gòu)件服務(wù)時間之和的比值已大于或大于等于設(shè)定的比例閾值?;?者當前時間窗內(nèi)所有構(gòu)件操作的時間開銷之和,與該時間窗內(nèi)所有構(gòu)件的構(gòu) 件服務(wù)時間之和的比值已大于或大于等于設(shè)定的比例閾值。又如,簡單地將 軟件系統(tǒng)重啟時刻到當前時刻的時間長度大于設(shè)定的時間長度作為重啟條 件,也是可以的。
重啟構(gòu)件存儲模塊,用于操作日志分析模塊以重啟列表保存確定的重啟 構(gòu)件和/或以備選重啟列表保存確定的備選重啟構(gòu)件,包括第一分析單元、第 二分析單元確定的功能衰退的構(gòu)件以及第三分析單元確定的功能衰退的構(gòu)件 和/或備選功能衰退的構(gòu)件。
重啟守護模塊,用于根據(jù)構(gòu)件之間的依賴關(guān)系,將需重啟構(gòu)件以及與需 重啟構(gòu)件之間存在依賴關(guān)系的構(gòu)件構(gòu)造一個或多個重啟鏈,從重啟鏈的根構(gòu) 件開始按序重啟該重啟鏈上的構(gòu)件。
其中,備選重啟構(gòu)件是在在重啟時刻到時重啟鏈上的重啟構(gòu)件數(shù)小于設(shè) 定的一次重啟構(gòu)件數(shù)時被執(zhí)行重啟的。
重啟日志數(shù)據(jù)庫,用于保存重啟守護模塊在其執(zhí)行抗衰過程中記錄的重
啟日志;
重啟日志分析模塊,用于對重啟日志數(shù)據(jù)庫中保存的重啟日志進行分析, 確定熱點構(gòu)件(對系統(tǒng)服務(wù)時間影響大,重啟頻繁的構(gòu)件);并分析出不同 微重啟對系統(tǒng)總體服務(wù)時間的影響、微重啟的發(fā)生頻率等,以此構(gòu)建系統(tǒng)的 重啟^L則知識庫,從而有利于庫欠件的進一步抗衰。
像綜合網(wǎng)管這樣的大型應(yīng)用系統(tǒng), 一般都會有相應(yīng)的系統(tǒng)日志。系統(tǒng)日 志包含了豐富的操作信息,如操作發(fā)生的時間、操作結(jié)束的時間、操作類型、 操作的結(jié)果、操作的重要級別和操作涉及的管理對象實例等信息。如果系統(tǒng) 曰志存放在綜合網(wǎng)管系統(tǒng)的操作日志數(shù)據(jù)庫中,則抗衰系統(tǒng)的數(shù)據(jù)庫服務(wù)器 可以使用數(shù)據(jù)庫工具(例如Oracle的EXP、 Ora Loader; SQLServer的BCP ) 將這些數(shù)據(jù)定期遷移過來,以免進行抗衰分析對應(yīng)用系統(tǒng)造成性能沖擊。如果系統(tǒng)日志以文本形式存在,則可以編寫小工具定期將這些文本導(dǎo)入到抗衰 系統(tǒng)的數(shù)據(jù)庫服務(wù)器中。
如果系統(tǒng)自身的操作日志不能滿足抗衰分析的需要,綜合網(wǎng)管系統(tǒng)中的
操作日志數(shù)據(jù)庫則可以采取攔截器模式來生成相應(yīng)的操作日志。在JBOSS服 務(wù)器(應(yīng)用系統(tǒng)構(gòu)件所依附的設(shè)備,圖5中未示)中,可以在容器配置文件 standardjboss.xml中力口入相應(yīng)的攔截器名字。
本發(fā)明軟件抗衰方法和系統(tǒng)基于構(gòu)件的軟件架構(gòu),故能夠?qū)崿F(xiàn)微重啟。 在分析上既結(jié)合宏觀層面的信息(系統(tǒng)總體服務(wù)時間),又結(jié)合微觀層面的 信息(構(gòu)件的服務(wù)次數(shù)、操作結(jié)果、服務(wù)時間、服務(wù)懲罰時間等),故可避 免抗衰粒度較粗而導(dǎo)致對負載變化容忍性差的問題;并且,基于系統(tǒng)操:作曰 志,不僅考慮了當前操作的情況,而且考慮歷史操作信息,故可避免因瞬時 異常數(shù)據(jù)而導(dǎo)致構(gòu)件重啟的誤操作,也避免了趨勢分析帶來的復(fù)雜計算量; 同時,不必專門開發(fā)監(jiān)控Agent,避免了抗衰操作給系統(tǒng)帶來額外的負載沖 擊;由于能夠偵測到軟件未知的一些衰退因素,因而能夠為系統(tǒng)優(yōu)化提供充 足的依據(jù)。而且本發(fā)明在實現(xiàn)上具有普適性,執(zhí)行抗衰的過程具有很低的抗 衰成本,幫助大型應(yīng)用系統(tǒng)的運營者減少系統(tǒng)意外停機時間,提高系統(tǒng)服務(wù) 率,增加系統(tǒng)有效工作周期。
權(quán)利要求
1、一種軟件抗衰方法,包括獲取基于構(gòu)件的軟件系統(tǒng)的操作日志;以時間窗為單位,按時間從先到后的順序逐個時間窗地對所述操作日志的構(gòu)件操作結(jié)果及其時間開銷進行分析,確定軟件系統(tǒng)及其包含的各構(gòu)件的運行狀況參數(shù),在軟件系統(tǒng)的運行狀況參數(shù)的取值符合重啟條件時,將此時功能衰退的構(gòu)件確定為需重啟構(gòu)件;對所述需重啟構(gòu)件進行重啟。
2、 如權(quán)利要求1所述的方法,其特征在于,所述功能衰退的構(gòu)件中至 少部分構(gòu)件是"l姿照以下方式確定的對所述操作日志的構(gòu)件操作結(jié)果及時間開銷進行分析時,對構(gòu)件自軟件 系統(tǒng)重啟以來發(fā)生操作失敗的次數(shù)進行累計,將累計操作失敗次數(shù)大于或大 于等于設(shè)定的失敗次數(shù)閾值的構(gòu)件作為功能衰退的構(gòu)件。
3、 如權(quán)利要求1所述的方法,其特征在于,所述功能衰退的構(gòu)件中至 少部分構(gòu)件是按照以下方式確定的對所述操作日志的構(gòu)件搡作結(jié)果及時間開銷進行分析時,對操作均成功 的每一構(gòu)件,如該構(gòu)件在當前時間窗的單次操作平均時延大于上一時間窗的 單次操作平均時延,且大于或大于等于設(shè)定的時延閾值,將該構(gòu)件作為當前 需觀測的構(gòu)件,并將該構(gòu)件,見測次數(shù)加一;在軟件系統(tǒng)的運行狀況參數(shù)的取值符合重啟條件時,將當前需觀測的構(gòu) 件中累計服務(wù)懲罰時間最大的一個或多個構(gòu)件,或累計服務(wù)懲罰時間大于設(shè) 定的服務(wù)懲罰時間閾值的一個或多個構(gòu)件,作為所述功能衰退的構(gòu)件。
4、 如權(quán)利要求1所述的方法,其特征在于,所述功能衰退的構(gòu)件中至 少部分構(gòu)件是按照以下方式確定的對所述操作日志的構(gòu)件操作結(jié)果及時間開銷進行分析時,在當前時間窗 內(nèi)計算系統(tǒng)中每一個構(gòu)件的總體服務(wù)時間,在軟件系統(tǒng)的運行狀況參數(shù)的取 值符合重啟條件時,將當前總體服務(wù)時間最大的M個構(gòu)件作為所述功能衰退 的構(gòu)件,其中M的值是預(yù)先設(shè)定的,M=l,2,...;或者M等于總體服務(wù)時間大于設(shè)定的構(gòu)件總體服務(wù)時間閾值的構(gòu)件的個數(shù),M=l,2,...;或者在按其它方式確定的功能衰退的構(gòu)件數(shù)Ml小于設(shè)定的一次啟動構(gòu)件數(shù)MO時,取M=M0-M1,在MiaVIO時,則M=0;所述構(gòu)件的總體服務(wù)時間為自上次軟件系統(tǒng)重啟以來,該構(gòu)件所有成功操作的時間開銷之和減去該構(gòu)件所有服務(wù)懲罰時間之和得到的差。
5、 如權(quán)利要求l所述的方法,其特征在于所述重啟條件為當前時間窗的系統(tǒng)總體服務(wù)時間小于或小于等于設(shè)定的系統(tǒng)總體服務(wù)時間閾值,所述系統(tǒng)總體服務(wù)時間等于當前時間窗內(nèi)所有構(gòu)件成功操作的時間開銷之和減去所有構(gòu)件的服務(wù)懲罰時間之和;或者所述重啟條件為當前時間窗內(nèi)所有構(gòu)件的服務(wù)懲罰時間之和,與當前時間窗內(nèi)所有構(gòu)件成功操作的時間開銷之和的比值或與當前時間窗內(nèi)所有構(gòu)件操作的時間開銷之和的比值,大于或大于等于設(shè)定的比例閾值。
6、 如權(quán)利要求3或4或5所述的方法,其特征在于,構(gòu)件的服務(wù)懲罰時間按以下方式確定在當前時間窗內(nèi)存在操作失敗的構(gòu)件,該構(gòu)件在當前時間窗內(nèi)的服務(wù)懲罰時間等于該構(gòu)件每次失敗的構(gòu)件搡作的時間開銷之和;在當前時間窗內(nèi)操作均成功的構(gòu)件,如該構(gòu)件在當前時間窗的單次操作平均時延大于上一時間窗的單次操作平均時延,且大于或大于等于設(shè)定的時延閾值,將該構(gòu)件在當前時間窗內(nèi)所有成功的構(gòu)件操作的時間開銷之和與一懲罰系數(shù)的積,作為該構(gòu)件在當前時間窗內(nèi)的服務(wù)懲罰時間,所述懲罰系數(shù)的取值根據(jù)該構(gòu)件的累計觀測次數(shù)或連續(xù)觀測次數(shù)查找對應(yīng)的配置數(shù)據(jù)得到,且隨著觀測次H增大而增大。
7、 如權(quán)利要求1至5中任一權(quán)利要求所述的方法,其特征在于將此時功能衰退的構(gòu)件確定為需重啟構(gòu)件時,還根據(jù)設(shè)定的規(guī)則確定每一個需重啟構(gòu)件的重啟時刻;對所述需重啟構(gòu)件進行重啟之前,需要根據(jù)構(gòu)件之間的依賴關(guān)系,將所述需重啟構(gòu)件以及與所述需重啟構(gòu)件之間存在依賴關(guān)系的構(gòu)件構(gòu)造一個或多個重啟鏈,從所述重啟鏈的根構(gòu)件開始按序重啟該重啟鏈上的構(gòu)件。
8、 一種軟件抗衰系統(tǒng),包括依次連接的數(shù)據(jù)庫服務(wù)模塊、操作日志分析模塊以及重啟守護模塊,其中所述數(shù)據(jù)庫服務(wù)模塊,用于獲取基于構(gòu)件的軟件系統(tǒng)的操作日志;所述操作日志分析模塊,用于以時間窗為單位,按時間從先到后的順序逐個時間窗地對所述操作日志的構(gòu)件操作結(jié)果及其時間開銷進行分析,確定軟件系統(tǒng)及其包含的各構(gòu)件的運行狀況參數(shù),在軟件系統(tǒng)的運行狀況參數(shù)的取值符合重啟條件時,將此時功能衰退的構(gòu)件確定為需重啟構(gòu)件并保存;所述重啟守護模塊,用于對所述需重啟構(gòu)件進行重啟。
9、 按照權(quán)利要求8所述的系統(tǒng),其特征在于,所述梯:作日志分析4莫塊進一步包括第一分析單元,用于對構(gòu)件自軟件系統(tǒng)重啟以來發(fā)生操作失敗的次數(shù)進行累計,將累計操作失敗次數(shù)大于或大于等于設(shè)定的失敗次數(shù)閾值的構(gòu)件作為為需重啟構(gòu)件保存。
10、 按照權(quán)利要求8所述的系統(tǒng),其特征在于,所述操作日志分析模塊進一步包括第二分析單元,用于對操作均成功的每一構(gòu)件計算各時間窗的單次操作平均時延,如該構(gòu)件在當前時間窗的單次操作平均時延大于其上一時間窗的單次操作平均時延,且大于或大于等于設(shè)定的時延閾值,將該構(gòu)件作為當前需觀測的構(gòu)件,并將該構(gòu)件觀測次數(shù)加一;在確定軟件系統(tǒng)的運行狀況參數(shù)的取值符合重啟條件時,將當前需觀測的構(gòu)件中累計服務(wù)懲罰時間最大的一個或多個構(gòu)件,或累計服務(wù)懲罰時間大于設(shè)定的服務(wù)懲罰時間閾值的一個或多個構(gòu)件,作為所述需重啟構(gòu)件保存。
11、 按照權(quán)利要求8所述的系統(tǒng),其特征在于,所述操作日志分析模塊進一步包括第三分析單元,用于在當前時間窗內(nèi)計算系統(tǒng)中每一個構(gòu)件的總體服務(wù)時間,在軟件系統(tǒng)的運行狀況參數(shù)的取值符合重啟條件時,將當前總體服務(wù)時間最大的M個構(gòu)件作為所述重啟構(gòu)件保存,其中M的值是預(yù)先設(shè)定的,M=l,2,...;或者M等于總體服務(wù)時間大于設(shè)定的構(gòu)件總體服務(wù)時間閾值的構(gòu)件的個數(shù),M=l,2,...;或者在按其它方式確定的功能衰退的構(gòu)件數(shù)Ml小于設(shè)定的一次啟動構(gòu)件數(shù)M0時,取MHVI0-M1,在Ml^MO時,則M=0;其中構(gòu)件的總體服務(wù)時間為自上次軟件系統(tǒng)重啟以來,該構(gòu)件所有成功操作的時間開銷之和減去該構(gòu)件所有服務(wù)懲罰時間之和得到的差。
12、 按照權(quán)利要求8所述的系統(tǒng),其特征在于,所述操作日志分析模塊進一步包括重啟判決單元,用于判斷所述軟件系統(tǒng)的運行狀況參數(shù)的取值是否符合重啟條件,即當前時間窗的系統(tǒng)總體服務(wù)時間小于或小于等于設(shè)定的系統(tǒng)總體服務(wù)時間閾值,系統(tǒng)總體服務(wù)時間等于當前時間窗內(nèi)所有構(gòu)件成功操作的時間開銷之和減去所有構(gòu)件的服務(wù)懲罰時間之和;或者,當前時間窗內(nèi)所有構(gòu)件的服務(wù)懲罰時間之和,與當前時間窗內(nèi)所有構(gòu)件成功操作的時間開銷之和的比值或與當前時間窗內(nèi)所有構(gòu)件操作的時間開銷之和的比值,大于或大于等于設(shè)定的比例閾值。
13、 按照權(quán)利要求10或11或12所述的系統(tǒng),其特征在于,所述構(gòu)件的服務(wù)懲罰時間的確定按以下方式進行在當前時間窗內(nèi)存在操作失敗的構(gòu)件,該構(gòu)件在當前時間窗內(nèi)的服務(wù)懲罰時間等于該構(gòu)件每次失敗的構(gòu)件操作的時間開銷之和;在當前時間窗內(nèi)操作均成功的構(gòu)件,如該構(gòu)件在當前時間窗的單次操作平均時延大于上一時間窗的單次操作平均時延,且大于或大于等于設(shè)定的時延閾值,將該構(gòu)件在當前時間窗內(nèi)所有成功的構(gòu)件操作的時間開銷之和與一懲罰系數(shù)的積,作為該構(gòu)件在當前時間窗內(nèi)的服務(wù)懲罰時間,所述懲罰系數(shù)的取值根據(jù)該構(gòu)件的累計觀測次數(shù)或連續(xù)觀測次數(shù)查找對應(yīng)的配置數(shù)據(jù)得到,且隨著觀測次數(shù)增大而增大。
14、 如權(quán)利要求8至12中任一權(quán)利要求所述的系統(tǒng),其特征在于,所述操作日志分析模塊將功能衰退的構(gòu)件確定為需重啟構(gòu)件時,還根據(jù)設(shè)定的規(guī)則確定每一 個需重啟構(gòu)件的重啟時刻;所述重啟守護模塊,在對所述需重啟構(gòu)件進行重啟前,根據(jù)構(gòu)件之間的依賴關(guān)系,將所述需重啟構(gòu)件以及與所述需重啟構(gòu)件之間存在依賴關(guān)系的構(gòu)件構(gòu)造一個或多個重啟鏈,從所述重啟鏈的根構(gòu)件開始按序重啟該重啟鏈上的構(gòu)件。
全文摘要
本發(fā)明披露了一種軟件抗衰方法及其系統(tǒng),該方法包括獲取基于構(gòu)件的軟件系統(tǒng)的操作日志;以時間窗為單位,按時間從先到后的順序逐個時間窗地對操作日志的構(gòu)件操作結(jié)果及其時間開銷進行分析,確定軟件系統(tǒng)及其包含的各構(gòu)件的運行狀況參數(shù),在軟件系統(tǒng)的運行狀況參數(shù)的取值符合重啟條件時,將此時功能衰退的構(gòu)件確定為需重啟構(gòu)件;對需重啟構(gòu)件進行重啟。本發(fā)明由于基于構(gòu)件的軟件架構(gòu),故能夠?qū)崿F(xiàn)微重啟;在分析上既結(jié)合宏觀層面的信息,又結(jié)合微觀層面的信息,故可避免對負載變化容忍性差的問題;既考慮了當前操作的情況也考慮歷史操作信息,故可避免誤操作。
文檔編號G06F11/14GK101630280SQ200910162608
公開日2010年1月20日 申請日期2009年8月13日 優(yōu)先權(quán)日2009年8月13日
發(fā)明者張國彩, 進 李, 熊紀濤, 珂 田 申請人:中興通訊股份有限公司