一種jvm的內(nèi)存對象數(shù)量統(tǒng)計系統(tǒng)及方法
【專利摘要】本發(fā)明提出一種JAVA虛擬機(JVM)的內(nèi)存對象數(shù)量統(tǒng)計系統(tǒng)及方法,其中系統(tǒng)包括:JVM服務(wù)器,用于獲取JAVA內(nèi)存映射(JMAP)信息,并將獲取的JMAP信息上報至日志收集服務(wù)器;日志收集服務(wù)器,用于保存所述JMAP信息;監(jiān)控分析服務(wù)器,用于對所述日志收集服務(wù)器保存的JMAP信息進行分析和歸檔,得到歸檔文件,并存儲所述歸檔文件;Web展示服務(wù)器,用于展示所述歸檔文件。本發(fā)明能夠自動統(tǒng)計JVM服務(wù)器的內(nèi)存占用情況,避免安全漏洞,并能夠監(jiān)控大量JVM服務(wù)器。
【專利說明】一種JVM的內(nèi)存對象數(shù)量統(tǒng)計系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及JAVA虛擬機(JVM, JAVA Virtual Machine)【技術(shù)領(lǐng)域】,尤其涉及一種 JVM的內(nèi)存對象數(shù)量統(tǒng)計系統(tǒng)及方法。
【背景技術(shù)】
[0002] JVM是一種用于計算設(shè)備的規(guī)范,它是一個虛構(gòu)出來的計算機,是通過在實際的計 算機上仿真模擬各種計算機功能來實現(xiàn)的。在大型的服務(wù)平臺中,內(nèi)部可能存在大量JVM 服務(wù)器,由于并發(fā)量非常大,業(yè)務(wù)經(jīng)常發(fā)生變化,代碼隨之做各種改變,所以經(jīng)常會出現(xiàn)堆 棧資源耗盡問題。對于這一問題,傳統(tǒng)的解決方法是等發(fā)現(xiàn)異常后,由管理人員手動登錄具 體的JVM服務(wù)器,通過JAVA的工具來查看內(nèi)存占用情況。這種解決方式的缺點是:需要在 被監(jiān)控的JVM服務(wù)器上開通端口,存在安全漏洞,并且可監(jiān)控數(shù)量有限。
【發(fā)明內(nèi)容】
[0003] 本發(fā)明提供了一種JVM的內(nèi)存對象數(shù)量統(tǒng)計系統(tǒng),能夠自動統(tǒng)計JVM服務(wù)器的內(nèi) 存占用情況,避免安全漏洞,并能夠監(jiān)控大量JVM服務(wù)器。
[0004] 本發(fā)明還提供了一種JVM的內(nèi)存對象數(shù)量統(tǒng)計方法,能夠自動統(tǒng)計JVM服務(wù)器的 內(nèi)存占用情況,避免安全漏洞,并能夠監(jiān)控大量JVM服務(wù)器。
[0005] 本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:
[0006] 一種JVM的內(nèi)存對象數(shù)量統(tǒng)計系統(tǒng),包括:
[0007] JVM服務(wù)器,用于獲取JMAP信息,并將獲取的JMAP信息上報至日志收集服務(wù)器;
[0008] 日志收集服務(wù)器,用于保存所述JMP信息;
[0009] 監(jiān)控分析服務(wù)器,用于對所述日志收集服務(wù)器保存的JMP信息進行分析和歸檔, 得到歸檔文件,并存儲所述歸檔文件;
[0010] Web展示服務(wù)器,用于展示所述歸檔文件。
[0011] 一種JVM的內(nèi)存對象數(shù)量統(tǒng)計方法,包括:
[0012] 獲取并保存各個JVM服務(wù)器的JMP信息;
[0013] 對所述JMP信息進行分析和歸檔,得到歸檔文件,存儲并展示所述歸檔文件。
[0014] 可見,本發(fā)明提出JVM的內(nèi)存對象數(shù)量統(tǒng)計系統(tǒng)和方法,由JVM服務(wù)器自動收集并 上報JAVA內(nèi)存映射(JMAP,JAVA Virtual Map)信息,并由專門的服務(wù)器對各個JVM服務(wù)器 上報的JMP信息進行歸檔及展示,因此能夠自動統(tǒng)計JVM服務(wù)器的內(nèi)存占用情況,避免了 安全漏洞,并能夠監(jiān)控大量JVM服務(wù)器。
【專利附圖】
【附圖說明】
[0015] 圖1為本發(fā)明提出的JVM的內(nèi)存對象數(shù)量統(tǒng)計系統(tǒng)結(jié)構(gòu)示意圖;
[0016] 圖2為本發(fā)明實施例一中JVM服務(wù)器收集及上報JMAP信息的實現(xiàn)流程圖;
[0017] 圖3為本發(fā)明實施例二中根據(jù)用戶指令選取歸檔文件的實現(xiàn)流程圖;
[0018] 圖4為本發(fā)明實施例三中對歸檔文件進行匯總分析的實現(xiàn)流程圖;
[0019] 圖5為本發(fā)明提出的JVM的內(nèi)存對象數(shù)量統(tǒng)計方法實現(xiàn)流程圖。
【具體實施方式】
[0020] 本發(fā)明提出一種JVM的內(nèi)存對象數(shù)量統(tǒng)計系統(tǒng),如圖1為該系統(tǒng)的結(jié)構(gòu)示意圖,包 括:
[0021] JVM服務(wù)器101,用于獲取JMAP信息,并將獲取的JMAP信息上報至日志收集服務(wù) 器 102 ;
[0022] 日志收集服務(wù)器102,用于保存所述JMP信息;存儲方式可以放在分布式存儲服 務(wù)器上;
[0023] 監(jiān)控分析服務(wù)器103,用于對所述日志收集服務(wù)器102保存的JMP信息進行分析 和歸檔,得到歸檔文件,并存儲所述歸檔文件;
[0024] Web展示服務(wù)器104,用于展示所述歸檔文件。
[0025] 以下舉具體的實施例詳細介紹。
[0026] 實施例一:
[0027] 本實施例介紹JVM服務(wù)器101收集JMAP信息,并向日志收集服務(wù)器102上報的一 種具體實現(xiàn)方式。
[0028] 在本實施例中,JVM服務(wù)器101可以包括客戶端收集模塊和日志客戶端模塊;其 中,
[0029] 客戶端收集模塊,可以用于周期性獲取JVM服務(wù)器上要收集的JAVA進程的信息; 針對每個JAVA進程,獲取該JVM服務(wù)器上所有對象的統(tǒng)計信息;所述對象的統(tǒng)計信息包括: 各個類所對應(yīng)的實例數(shù)和字節(jié)數(shù);
[0030] 日志客戶端模塊,用于將所述JAVA進程的信息及所述統(tǒng)計信息生成JMP信息,并 將所述JMAP信息上報至日志收集服務(wù)器。
[0031] JVM服務(wù)器101可以將生成的JMAP信息先寫入本地再上傳至日志收集服務(wù)器 102,也可以采用socket或其它進程通訊或系統(tǒng)通訊方式上傳至日志收集服務(wù)器102。
[0032] 如圖2為JVM服務(wù)器101收集及上報JMAP信息的實現(xiàn)流程圖,包括:
[0033] 步驟201 :客戶端收集模塊周期性獲取JVM服務(wù)器上要收集的JAVA進程的信息, 并將JAVA進程的信息放入隊列中;其中,JAVA進程的信息可以包括JAVA進程的ID及JAVA 進程的標示JAVA進程的標示格式可以為:部門代號-業(yè)務(wù)系統(tǒng)代號-業(yè)務(wù)系統(tǒng)版本-實 例號;
[0034] 步驟202 :從隊列中取出一個JAVA進程的信息;
[0035] 步驟203 :針對該JAVA進程,通過jamp-histo命令獲取該JVM服務(wù)器上所有對象 的統(tǒng)計信息;其中,所述對象的統(tǒng)計信息可以包括:各個類所對應(yīng)的實例數(shù)和字節(jié)數(shù);
[0036] 步驟204 :將上述JAVA進程的信息及獲取的統(tǒng)計信息計入JMAP信息中,由日志客 戶端模塊將JMAP信息上報至日志收集服務(wù)器;
[0037] 步驟205 :判斷該JAVA進程的信息是否為隊列中的最后一個,如果不是,則返回執(zhí) 行步驟202 ;如果是,則退出本循環(huán)周期,結(jié)束當前流程。
[0038] 實施例二:
[0039] 本實施例介紹根據(jù)用戶指令選取歸檔文件進行分析的一種【具體實施方式】,如圖3 為本實施例的實現(xiàn)流程圖,包括:
[0040] 步驟301 :用戶在網(wǎng)絡(luò)監(jiān)控圖上發(fā)現(xiàn)JVM堆棧曲線異常;
[0041] 步驟302 :用戶在網(wǎng)絡(luò)監(jiān)控圖上選取2個差異較大的時間點;
[0042] 步驟303 :點擊比較;
[0043] 步驟304 :根據(jù)用戶指令,監(jiān)控分析服務(wù)器103對上述兩個時間點對應(yīng)的歸檔文件 進行匯總分析,得到分析文件;本步驟詳細過程將在以下實施例三中詳述;
[0044] 步驟305 :判斷是否還需要查看其它時間點,如果是,則返回執(zhí)行步驟302 ;否則, 結(jié)束當前流程。
[0045] 實施例三:
[0046] 本實施例介紹實施例二中步驟304的一種實現(xiàn)方式。如圖4為本實施例的實現(xiàn)流 程圖,包括:
[0047] 步驟401 :讀取第一個時間點對應(yīng)的歸檔文件,記為歸檔文件1 ;
[0048] 步驟402 :針對歸檔文件1,按照類名對每個類進行匯總,匯總內(nèi)容包括:歸檔文件 1中存在的類所對應(yīng)的總實例數(shù)和總字節(jié)數(shù);
[0049] 步驟403 :讀取第二個時間點對應(yīng)的歸檔文件,記為歸檔文件2 ;
[0050] 步驟404 :針對歸檔文件2,按照類名對每個類進行匯總,匯總內(nèi)容包括:歸檔文件 2中存在的類所對應(yīng)的總實例數(shù)和總字節(jié)數(shù);
[0051] 步驟405 :根據(jù)上述步驟402和步驟404中的匯總內(nèi)容,生成第一分析文件;
[0052] 第一分析文件的內(nèi)容可以包括:類分別在兩個歸檔文件中對應(yīng)的總實例數(shù)和總子 節(jié)數(shù),以及所述類在所述兩個歸檔文件中對應(yīng)的總實例數(shù)的差值和總子節(jié)數(shù)的差值;
[0053] 其中,所述類為至少在一個歸檔文件中存在的類,包括三種情況:僅在歸檔文件1 中存在的類、僅在歸檔文件2中存在的類、在歸檔文件1和歸檔文件2中均存在的類;
[0054] 當一個類在一個歸檔文件中不存在時,該類在該歸檔文件中對應(yīng)的總實例數(shù)和總 子節(jié)數(shù)均為〇。
[0055] 下表一為第一分析文件示例。
[0056]
【權(quán)利要求】
1. 一種JAVA虛擬機JVM的內(nèi)存對象數(shù)量統(tǒng)計系統(tǒng),其特征在于,所述系統(tǒng)包括: JVM服務(wù)器,用于獲取JAVA內(nèi)存映射JMAP信息,并將獲取的JMAP信息上報至日志收集 服務(wù)器; 日志收集服務(wù)器,用于保存所述JMAP信息; 監(jiān)控分析服務(wù)器,用于對所述日志收集服務(wù)器保存的JMAP信息進行分析和歸檔,得到 歸檔文件,并存儲所述歸檔文件; Web展示服務(wù)器,用于展示所述歸檔文件。
2. 根據(jù)權(quán)利要求1所述的系統(tǒng),其特征在于,所述JVM服務(wù)器包括: 客戶端收集模塊,用于周期性獲取所述JVM服務(wù)器上要收集的JAVA進程的信息;針對 每個JAVA進程,獲取該JVM服務(wù)器上所有對象的統(tǒng)計信息;所述對象的統(tǒng)計信息包括:各 個類所對應(yīng)的實例數(shù)和字節(jié)數(shù); 日志客戶端模塊,用于將所述JAVA進程的信息及所述統(tǒng)計信息生成JMAP信息,并將所 述JMAP信息上報至日志收集服務(wù)器。
3. 根據(jù)權(quán)利要求2所述的系統(tǒng),其特征在于,所述JAVA進程的信息包括:JAVA進程的 ID及JAVA進程的標示;所述JAVA進程的標示包括:部門代號、業(yè)務(wù)系統(tǒng)代號、業(yè)務(wù)系統(tǒng)版 本和實例號; 所述歸檔文件的標記包括:部門代號、業(yè)務(wù)系統(tǒng)代號、業(yè)務(wù)系統(tǒng)版本、實例號和時間信 肩、。
4. 根據(jù)權(quán)利要求1、2或3所述的系統(tǒng),其特征在于, 所述監(jiān)控分析服務(wù)器還用于,根據(jù)用戶的指示選取兩個歸檔文件;針對兩個歸檔文件, 分別按照類名進行匯總,得到各個類所對應(yīng)的總實例數(shù)和總子節(jié)數(shù);根據(jù)所述匯總的內(nèi)容 得到第一分析文件,所述第一分析文件的內(nèi)容包括:類分別在所述兩個歸檔文件中對應(yīng)的 總實例數(shù)和總子節(jié)數(shù),以及所述類在所述兩個歸檔文件中對應(yīng)的總實例數(shù)的差值和總子節(jié) 數(shù)的差值;其中,所述類為至少在一個歸檔文件中存在的類,當一個類在一個歸檔文件中不 存在時,該類在該歸檔文件中對應(yīng)的總實例數(shù)和總子節(jié)數(shù)均為0。
5. 根據(jù)權(quán)利要求4所述的系統(tǒng),其特征在于,所述監(jiān)控分析服務(wù)器還用于,由所述第一 分析文件生成其它分析文件,包括: 根據(jù)用戶指令,從所述第一分析文件中選取用戶指令的類所對應(yīng)的信息,生成第二分 析文件; 或者,從所述第一分析文件中選取僅在第一個歸檔文件中存在的類所對應(yīng)的信息,生 成第三分析文件; 或者,從所述第一分析文件中選取僅在第二個歸檔文件中存在的類所對應(yīng)的信息,生 成第四分析文件。
6. -種JAVA虛擬機JVM的內(nèi)存對象數(shù)量統(tǒng)計方法,其特征在于,所述方法包括: 獲取并保存各個JVM服務(wù)器的JAVA內(nèi)存映射JMAP信息; 對所述JMAP信息進行分析和歸檔,得到歸檔文件,存儲并展示所述歸檔文件。
7. 根據(jù)權(quán)利要求6所述的方法,其特征在于,所述獲取JVM服務(wù)器的JMAP信息的方式 為: 周期性獲取所述JVM服務(wù)器上要收集的JAVA進程的信息; 針對每個JAVA進程,獲取該JVM服務(wù)器上所有對象的統(tǒng)計信息;所述對象的統(tǒng)計信息 包括:各個類所對應(yīng)的實例數(shù)和字節(jié)數(shù); 將所述JAVA進程的信息及所述統(tǒng)計信息生成JMAP信息。
8. 根據(jù)權(quán)利要求7所述的方法,其特征在于,所述JAVA進程的信息包括:JAVA進程的 ID及JAVA進程的標示;所述JAVA進程的標示包括:部門代號、業(yè)務(wù)系統(tǒng)代號、業(yè)務(wù)系統(tǒng)版 本和實例號; 所述歸檔文件的標記包括:部門代號、業(yè)務(wù)系統(tǒng)代號、業(yè)務(wù)系統(tǒng)版本、實例號和時間信 肩、。
9. 根據(jù)權(quán)利要求6、7或8所述的方法,其特征在于,所述方法進一步包括: 根據(jù)用戶的指示選取兩個歸檔文件; 針對兩個歸檔文件,分別按照類名進行匯總,得到各個類所對應(yīng)的總實例數(shù)和總子節(jié) 數(shù); 根據(jù)所述匯總的內(nèi)容得到第一分析文件,所述第一分析文件的內(nèi)容包括:類分別在所 述兩個歸檔文件中對應(yīng)的總實例數(shù)和總子節(jié)數(shù),以及所述類在所述兩個歸檔文件中對應(yīng)的 總實例數(shù)的差值和總子節(jié)數(shù)的差值;其中,所述類為至少在一個歸檔文件中存在的類,當一 個類在一個歸檔文件中不存在時,該類在該歸檔文件中對應(yīng)的總實例數(shù)和總子節(jié)數(shù)均為0。
10. 根據(jù)權(quán)利要求9所述的方法,其特征在于,所述方法還包括: 根據(jù)用戶指令,從所述第一分析文件中選取用戶指令的類所對應(yīng)的信息,生成第二分 析文件; 或者,從所述第一分析文件中選取僅在第一個歸檔文件中存在的類所對應(yīng)的信息,生 成第三分析文件; 或者,從所述第一分析文件中選取僅在第二個歸檔文件中存在的類所對應(yīng)的信息,生 成第四分析文件。
【文檔編號】H04L29/08GK104407966SQ201410799944
【公開日】2015年3月11日 申請日期:2014年12月19日 優(yōu)先權(quán)日:2014年12月19日
【發(fā)明者】李清森 申請人:北京京東尚科信息技術(shù)有限公司, 北京京東世紀貿(mào)易有限公司