技術(shù)、只讀光盤只讀存儲器 (CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁 性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中 的界定,計算機可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù) 信號和載波。
[0038] 如圖2所示,本發(fā)明一種Java應(yīng)用健康度評估系統(tǒng)100,包括:配置模塊10、數(shù)據(jù) 采集模塊20、數(shù)據(jù)處理模塊30、存儲模塊40、繪圖引擎50、預(yù)處理及自我修復(fù)模塊60、報警 模塊70、同類型Java應(yīng)用比較模塊80以及業(yè)務(wù)鏈路Java應(yīng)用分析模塊90。該系統(tǒng)可以 是內(nèi)置于計算機的軟件單元,硬件單元或軟硬件結(jié)合單元。
[0039] 配置模塊10,用于配置Java應(yīng)用監(jiān)控指標(biāo)的數(shù)量值,并配置每個監(jiān)控指標(biāo)在不同 狀態(tài)下的基準(zhǔn)分值以及每個監(jiān)控指標(biāo)的權(quán)重。具體的,該基準(zhǔn)分值根據(jù)Java應(yīng)用的特點進(jìn) 行配置,每個監(jiān)控指標(biāo)的權(quán)重根據(jù)其對應(yīng)用服務(wù)質(zhì)量的影響程度進(jìn)行配置。該監(jiān)控指標(biāo)包 括線程死鎖、JVM內(nèi)存使用率以及方法調(diào)用異常數(shù)等。
[0040] 數(shù)據(jù)采集模塊20,用于采集在Java應(yīng)用運行過程中所有監(jiān)控指標(biāo)的基準(zhǔn)分值。
[0041] 數(shù)據(jù)處理模塊30,用于根據(jù)所有監(jiān)控指標(biāo)的基準(zhǔn)分值以及每個監(jiān)控指標(biāo)對應(yīng)的權(quán) 重執(zhí)行健康分值運算以獲取Java應(yīng)用的健康分值。優(yōu)選的是,數(shù)據(jù)處理模塊30執(zhí)行健康 分值運算的公式為:
[0042]
[0043] 其中,T為健康分值,X⑴為單個指標(biāo)項的基準(zhǔn)分值,W⑴代表單個指標(biāo)項的權(quán) 重,i e (1,N)指代單項指標(biāo)。本發(fā)明通過預(yù)先配置每個Java應(yīng)用的監(jiān)控指標(biāo)個數(shù)、每個 監(jiān)控指標(biāo)在不同狀態(tài)下的基準(zhǔn)分值以及每個監(jiān)控指標(biāo)的權(quán)重,在Java運行的過程中采集 所有監(jiān)控指標(biāo)的基準(zhǔn)分值,最后根據(jù)采集的監(jiān)控指標(biāo)的基準(zhǔn)分值以及每個監(jiān)控指標(biāo)的權(quán)重 計算Java應(yīng)用的健康分值。從而對Java應(yīng)用的各項監(jiān)控指標(biāo)進(jìn)行綜合分析,并通過健康 分值的方式實現(xiàn)對Java應(yīng)用的整體運行健康狀況進(jìn)行直觀描述。
[0044] 在本發(fā)明一個實施例中,可以預(yù)先配置Java應(yīng)用的監(jiān)控指標(biāo)數(shù)量為N,根據(jù)該 Java應(yīng)用的特點及每個監(jiān)控指標(biāo)對整體應(yīng)用服務(wù)質(zhì)量的影響程度,設(shè)置每個單項監(jiān)控指標(biāo) 的基準(zhǔn)分值X及指標(biāo)權(quán)重W?;鶞?zhǔn)分值X及指標(biāo)權(quán)重W的設(shè)定可以在實踐中進(jìn)行修正,以 web服務(wù)型的Java應(yīng)用為例,可以選取表1中的7項代表性監(jiān)控指標(biāo)來衡量Java應(yīng)用的健 康狀態(tài),其中,每個監(jiān)控指標(biāo)推薦的基準(zhǔn)分值X及指標(biāo)權(quán)重W如表2所示。
[0045] 表 1
[0046]
[0047]
[0048] 表 2
[0049]
[0050] 在表2中,每個監(jiān)控指標(biāo)的基準(zhǔn)分值以及權(quán)重僅為推薦經(jīng)驗值,在具體應(yīng)用過程 中可以依照J(rèn)ava應(yīng)用特點進(jìn)行相應(yīng)修正。當(dāng)前指標(biāo)值Oresult的獲取方式可以參考現(xiàn)有 技術(shù),不屬于本發(fā)明保護(hù)范疇。
[0051] 數(shù)據(jù)處理模塊執(zhí)行健康分值計算的計算公式為:
[0052]
,
[0053] 其中,T為健康分值,X⑴為單個指標(biāo)項的基準(zhǔn)分值,W⑴代表單個指標(biāo)項的權(quán) 重,i e (1,N)指代所述單項指標(biāo)。
[0054] -般的,為了方便報警接受者理解,可以預(yù)先定義單項指標(biāo)基準(zhǔn)分值以及健康分 值在不同得分下的顯示狀態(tài)。具體的,單項指標(biāo)狀態(tài)定義如下:當(dāng)單個指標(biāo)得分與滿分相等 時,狀態(tài)為"很好";當(dāng)單個指標(biāo)得分大于滿分的80%時,狀態(tài)為"一般";當(dāng)單個指標(biāo)得分大 于滿分的60%時,狀態(tài)為"較差";當(dāng)單個指標(biāo)得分小于滿分的60%時,狀態(tài)為"危險"。應(yīng)用 整體健康狀態(tài)定義如下:當(dāng)應(yīng)用健康分值數(shù)總分大于等于70時,狀態(tài)為健康;當(dāng)應(yīng)用健康 分值總分大于等于50時,且小于70時,狀態(tài)為亞健康;當(dāng)應(yīng)用健康分值總分小于50時,狀 態(tài)為不健康。
[0055] 存儲模塊40,用于存儲基準(zhǔn)分值以及健康分值。具體的,存儲模塊40用于存儲預(yù) 先配置的每項健康指標(biāo)在不同狀態(tài)下的基準(zhǔn)分值、權(quán)重,并且存儲模塊40還用于持久化保 持?jǐn)?shù)據(jù)采集模塊20采集到的監(jiān)控指標(biāo)分值以及數(shù)據(jù)處理模塊30運算得出的健康分值,方 便后續(xù)歷史信息的使用和查詢。
[0056] 繪圖引擎50,繪圖引擎50用于根據(jù)時間以及健康分值生成健康狀態(tài)變化趨勢圖。 具體的,配置模塊10可預(yù)先配置Java應(yīng)用的健康分值計算的執(zhí)行時間間隔M,數(shù)據(jù)采集模 塊20的每間隔時間M采集所有監(jiān)控指標(biāo)的基準(zhǔn)分值,數(shù)據(jù)處理模塊30每間隔時間M執(zhí)行 一次健康分值運算,繪圖引擎50則根據(jù)一個時間段內(nèi)所產(chǎn)生的健康分值生成健康狀態(tài)變 化趨勢圖。繪圖引擎50可將采集的所有監(jiān)控指標(biāo)的基準(zhǔn)分值輸入通用繪圖軟件/程序,繪 制二維曲線,橫軸為時間方向,縱軸為Java應(yīng)用的健康分值。在現(xiàn)有方法或系統(tǒng)中,雖能針 對具體的某項Java應(yīng)用指標(biāo)繪制單項監(jiān)控指標(biāo)的變化曲線,但不能體現(xiàn)應(yīng)用本身隨著時 間遷移的整體健康變化情況。本發(fā)明通過數(shù)值的方式表述Java應(yīng)用的健康狀態(tài),并以圖表 曲線的方式展現(xiàn)健康變化情況,從而能整體把握J(rèn)ava應(yīng)用的健康狀態(tài)。
[0057] 預(yù)處理及自我修復(fù)模塊60,用于當(dāng)監(jiān)控指標(biāo)的基準(zhǔn)分值超出報警閾值時執(zhí)行預(yù)處 理及自我修復(fù)。具體的,配置模塊10可預(yù)先配置每個監(jiān)控指標(biāo)的基準(zhǔn)分值的報警閾值,當(dāng) 某一監(jiān)控指標(biāo)的基準(zhǔn)分值超出報警閾值時執(zhí)行預(yù)處理以及自我修復(fù)。預(yù)處理及自我修復(fù)模 塊60包括查詢單元61以及修復(fù)單元62,查詢單元61用于當(dāng)某一監(jiān)控指標(biāo)的基準(zhǔn)分值超出 報警閾值時根據(jù)當(dāng)前異常/錯誤類型查詢先驗知識與規(guī)則庫,修復(fù)單元62用于根據(jù)先驗知 識或用戶預(yù)定義規(guī)則執(zhí)行異常/錯誤修復(fù)。該先驗知識與規(guī)則庫可內(nèi)置于存儲模塊40中。
[0058] 預(yù)處理及自我修復(fù)模塊60主要執(zhí)行兩個操作:預(yù)處理以及自我修復(fù)。預(yù)處理主要 采取保存上下文現(xiàn)場的方式,包括且不限于當(dāng)前堆棧信息等;自我修復(fù)主要根據(jù)內(nèi)置于存 儲模塊40中的先驗知識與規(guī)則庫執(zhí)行異常/錯誤修復(fù)。
[0059] 以下是一種JVM Load過高時的預(yù)處理示例:檢測到JVM Load過高,超出閾值;保 存上下文,dump 當(dāng)前 JVM 線程現(xiàn)場數(shù)據(jù),例如:$JAVA_HOME/bin/jstack$pid>$tmp_file,某 些特殊異常類型下,上下文現(xiàn)場數(shù)據(jù)轉(zhuǎn)瞬即逝,由程序進(jìn)行預(yù)處理,代替人工保存現(xiàn)場將更 為有效和重要;打印和獲取當(dāng)前CPU下使用占比高的T0P3線程,例如:ps H-eo user,pid,p pid, tid, time, %cpu-sort=%cpu ;獲取對應(yīng)線程的線程棧信息,具體可依據(jù)VM線程現(xiàn)場數(shù) 據(jù)中的T0P3線程號獲取線程棧信息;保存當(dāng)前預(yù)處理信息,等待用戶介入。
[0060] 以下是一種Java線程異常退出時自我修復(fù)示例:檢測到Java服務(wù)大量失敗報警; 獲取當(dāng)前應(yīng)用線程號;檢查線程工作狀態(tài),發(fā)現(xiàn)線程因異常已退出;嘗試重啟該線程;若重 啟服務(wù)正常,記錄處理日志,不再通知用戶。
[0061] 報警模塊70,用于當(dāng)健康分值超出報警閾值時產(chǎn)生報警信息。具體的,配置模塊 10可預(yù)先配置健康分值的報警閾值,當(dāng)Java應(yīng)用的健康分值超出報警閾值時產(chǎn)生報警信 息。報警模塊70可通過短信、郵件等多種方式,完成對用戶的報警。在本發(fā)明中,當(dāng)單項監(jiān) 控指標(biāo)超出閾值,而整體健康分值仍未超出報警