本公開涉及計算機,尤其涉及一種內(nèi)存分配分析方法、裝置及電子設(shè)備。
背景技術(shù):
1、應(yīng)用性能驗收時,往往會出現(xiàn)各類的內(nèi)存問題,如內(nèi)存過高或者內(nèi)存泄漏等。具體的,可以通過內(nèi)存分析工具,進行大致的內(nèi)存分配分析;對于內(nèi)存過高會進行內(nèi)存分配拆分,查看哪一塊組件的內(nèi)存分配過高造成了內(nèi)存瓶頸;之后會進入下一輪的性能驗收直至性能達標(biāo)。示例性的,以目標(biāo)應(yīng)用為游戲應(yīng)用為例,可以基于預(yù)設(shè)引擎中的預(yù)設(shè)內(nèi)存分析工具,統(tǒng)計內(nèi)存使用總量、內(nèi)存使用情況等。
2、但是,上述預(yù)設(shè)內(nèi)存分析工具中的內(nèi)存數(shù)據(jù)統(tǒng)計是基于預(yù)設(shè)引擎的估計值,并不是pss(proportional?set?size,實際使用的物理內(nèi)存);如果某個資源在預(yù)設(shè)內(nèi)存分析工具上的統(tǒng)計值大,其在內(nèi)存的pss值上也是會大的趨勢,這種基于趨勢上的分析會非常的不準(zhǔn)確,有些資源有可能預(yù)設(shè)引擎估計的值比較大,但在pss上的比重很小,此時就會嚴(yán)重影響優(yōu)化分析方向。另外,基于預(yù)設(shè)內(nèi)存分析工具上的內(nèi)存分析只能看到某個資源占用多大的內(nèi)存,但是這個資源是由誰來分配的卻無法獲取,增加了分析優(yōu)化的難度。因此,上述方法的內(nèi)存分析結(jié)果的準(zhǔn)確性較低,且可讀性較差。
技術(shù)實現(xiàn)思路
1、有鑒于上述存在的技術(shù)問題,本公開提出了一種內(nèi)存分配分析方法、裝置及電子設(shè)備。
2、根據(jù)本公開實施例的一方面,提供一種內(nèi)存分配分析方法,包括:
3、響應(yīng)于針對目標(biāo)應(yīng)用的內(nèi)存分配測試指令,在目標(biāo)系統(tǒng)的內(nèi)存分配的堆棧記錄功能已開啟的情況下,開啟所述目標(biāo)應(yīng)用;所述目標(biāo)應(yīng)用運行于所述目標(biāo)系統(tǒng);
4、在所述目標(biāo)應(yīng)用的運行過程中,基于預(yù)設(shè)內(nèi)存分配維度,對所述目標(biāo)應(yīng)用中多個分配對象進行內(nèi)存分配處理,所述預(yù)設(shè)分配維度用于指示所述目標(biāo)系統(tǒng)基于目標(biāo)終端的本機堆系統(tǒng)進行內(nèi)存分配;
5、獲取目標(biāo)運行時刻對應(yīng)的多個目標(biāo)分配對象的內(nèi)存分配數(shù)據(jù);所述內(nèi)存分配數(shù)據(jù)為所述目標(biāo)系統(tǒng)在所述目標(biāo)運行時刻下為每個目標(biāo)分配對象分配的內(nèi)存空間數(shù)據(jù);所述每個目標(biāo)分配對象對應(yīng)的內(nèi)存空間數(shù)據(jù)表征所述每個目標(biāo)分配對象對應(yīng)的目標(biāo)存儲數(shù)據(jù)在所述本機堆系統(tǒng)中的內(nèi)存空間占用情況;
6、對所述內(nèi)存分配數(shù)據(jù)進行分配分析,得到所述目標(biāo)運行時刻對應(yīng)的目標(biāo)分配分析結(jié)果。
7、根據(jù)本公開實施例的另一方面,提供一種內(nèi)存分配分析裝置,包括:
8、第一執(zhí)行模塊,用于響應(yīng)于針對目標(biāo)應(yīng)用的內(nèi)存分配測試指令,在目標(biāo)系統(tǒng)的內(nèi)存分配的堆棧記錄功能已開啟的情況下,開啟所述目標(biāo)應(yīng)用;所述目標(biāo)應(yīng)用運行于所述目標(biāo)系統(tǒng);
9、分配處理模塊,用于在所述目標(biāo)應(yīng)用的運行過程中,基于預(yù)設(shè)內(nèi)存分配維度,對所述目標(biāo)應(yīng)用中多個分配對象進行內(nèi)存分配處理,所述預(yù)設(shè)分配維度用于指示所述目標(biāo)系統(tǒng)基于目標(biāo)終端的本機堆系統(tǒng)進行內(nèi)存分配;
10、分配數(shù)據(jù)獲取模塊,用于獲取目標(biāo)運行時刻對應(yīng)的多個目標(biāo)分配對象的內(nèi)存分配數(shù)據(jù);所述內(nèi)存分配數(shù)據(jù)為所述目標(biāo)系統(tǒng)在所述目標(biāo)運行時刻下為每個目標(biāo)分配對象分配的內(nèi)存空間數(shù)據(jù);所述每個目標(biāo)分配對象對應(yīng)的內(nèi)存空間數(shù)據(jù)表征所述每個目標(biāo)分配對象對應(yīng)的目標(biāo)存儲數(shù)據(jù)在所述本機堆系統(tǒng)中的內(nèi)存空間占用情況;
11、分配分析模塊,用于對所述內(nèi)存分配數(shù)據(jù)進行分配分析,得到所述目標(biāo)運行時刻對應(yīng)的目標(biāo)分配分析結(jié)果。
12、可選的,所述第一執(zhí)行模塊包括:
13、第一配置更新模塊,用于響應(yīng)于針對所述目標(biāo)應(yīng)用的內(nèi)存分配測試指令,更新所述目標(biāo)應(yīng)用中的預(yù)設(shè)引擎配置信息,以使所述目標(biāo)應(yīng)用的內(nèi)存分配維度更新為所述預(yù)設(shè)分配維度;
14、第二執(zhí)行模塊,用于開啟所述堆棧記錄功能;
15、第三執(zhí)行模塊,用于在所述堆棧記錄功能已開啟的情況下,開啟所述目標(biāo)應(yīng)用。
16、可選的,所述配置更新模塊包括:
17、第二配置更新模塊,用于將所述預(yù)設(shè)引擎配置信息中的第一預(yù)設(shè)配置信息更新為第二預(yù)設(shè)配置信息,以使所述內(nèi)存分配維度更新為所述預(yù)設(shè)分配維度;所述第一預(yù)設(shè)配置信息用于指示所述目標(biāo)系統(tǒng)基于箱式內(nèi)存分配器進行內(nèi)存分配。
18、可選的,所述第二執(zhí)行模塊包括:
19、工具庫獲取模塊,用于將預(yù)設(shè)記錄功能工具庫加入所述目標(biāo)系統(tǒng)對應(yīng)的目標(biāo)操作系統(tǒng)庫;
20、服務(wù)關(guān)閉模塊,用于關(guān)閉所述目標(biāo)系統(tǒng)對應(yīng)的多個預(yù)設(shè)系統(tǒng)服務(wù);
21、功能激活模塊,用于激活所述堆棧記錄功能;
22、服務(wù)重啟模塊,用于重啟所述目標(biāo)系統(tǒng)對應(yīng)的所述多個預(yù)設(shè)系統(tǒng)服務(wù),以加載所述預(yù)設(shè)記錄功能工具庫;
23、相應(yīng)的,所述分配數(shù)據(jù)獲取模塊包括:
24、目標(biāo)數(shù)據(jù)獲取模塊,用于基于所述預(yù)設(shè)記錄功能工具庫,獲取所述目標(biāo)運行時刻對應(yīng)的所述多個目標(biāo)分配對象的內(nèi)存分配數(shù)據(jù)。
25、可選的,所述多個目標(biāo)分配對象的內(nèi)存分配數(shù)據(jù)包括多個目標(biāo)分配對象各自對應(yīng)的調(diào)用地址序列和多個調(diào)用地址序列各自對應(yīng)的序列分配數(shù)據(jù),任一目標(biāo)分配對象對應(yīng)的調(diào)用地址序列表征所述任一目標(biāo)分配對象的邏輯調(diào)用關(guān)系,所述目標(biāo)分配分析結(jié)果用于指示所述多個目標(biāo)分配對象之間的層級關(guān)系和所述每個目標(biāo)分配對象對應(yīng)的內(nèi)存空間數(shù)據(jù);所述分配分析模塊包括:
26、樹結(jié)構(gòu)構(gòu)建模塊,用于基于所述多個目標(biāo)分配對象各自對應(yīng)的調(diào)用地址序列,構(gòu)建目標(biāo)樹結(jié)構(gòu),所述目標(biāo)樹結(jié)構(gòu)為以所述多個目標(biāo)分配對象為節(jié)點,以所述多個目標(biāo)分配對象之間的層級關(guān)系為邊的樹結(jié)構(gòu);
27、第一結(jié)果生成模塊,用于基于所述目標(biāo)樹結(jié)構(gòu)和所述多個調(diào)用地址序列各自對應(yīng)的序列分配數(shù)據(jù),生成所述目標(biāo)分配分析結(jié)果。
28、可選的,所述第一結(jié)果生成模塊包括:
29、占比數(shù)據(jù)獲取模塊,用于基于所述多個調(diào)用地址序列各自對應(yīng)的序列分配數(shù)據(jù),確定所述每個目標(biāo)分配對象對應(yīng)的內(nèi)存占比指標(biāo)數(shù)據(jù);所述每個目標(biāo)分配對象對應(yīng)的內(nèi)存占比指標(biāo)數(shù)據(jù)表征所述每個目標(biāo)分配對象對應(yīng)的目標(biāo)存儲數(shù)據(jù)相對于所述多個目標(biāo)分配對象對應(yīng)的存儲數(shù)據(jù)的占比;
30、目標(biāo)標(biāo)識獲取模塊,用于基于預(yù)設(shè)地址映射關(guān)系,確定所述每個目標(biāo)分配對象對應(yīng)的目標(biāo)對象標(biāo)識信息;
31、第二結(jié)果生成模塊,用于基于所述每個目標(biāo)分配對象對應(yīng)的內(nèi)存占比指標(biāo)數(shù)據(jù)、所述每個目標(biāo)分配對象對應(yīng)的目標(biāo)對象標(biāo)識信息和所述目標(biāo)樹結(jié)構(gòu),生成所述目標(biāo)分配分析結(jié)果。
32、可選的,所述裝置還包括:
33、調(diào)用地址獲取模塊,用于基于所述多個目標(biāo)分配對象各自對應(yīng)的調(diào)用地址序列,確定多種調(diào)用地址;
34、第一標(biāo)識獲取模塊,用于獲取每種調(diào)用地址對應(yīng)的第一對象標(biāo)識信息;
35、第二標(biāo)識獲取模塊,用于對所述每種調(diào)用地址對應(yīng)的第一對象標(biāo)識信息進行解碼處理,得到所述每種調(diào)用地址對應(yīng)的第二對象標(biāo)識信息;
36、映射關(guān)系構(gòu)建模塊,用于基于所述多種調(diào)用地址和所述每種調(diào)用地址對應(yīng)的第二對象標(biāo)識信息,構(gòu)建所述預(yù)設(shè)地址映射關(guān)系。
37、可選的,所述裝置還包括:
38、第四執(zhí)行模塊,用于響應(yīng)于針對所述目標(biāo)應(yīng)用的首次業(yè)務(wù)操作指令,執(zhí)行預(yù)設(shè)業(yè)務(wù)操作,以基于所述預(yù)設(shè)內(nèi)存分配維度,對所述多個分配對象進行內(nèi)存分配處理;
39、時刻內(nèi)存獲取模塊,用于在所述預(yù)設(shè)業(yè)務(wù)操作執(zhí)行過程中,獲取多個運行時刻對應(yīng)的時刻內(nèi)存數(shù)據(jù);任一運行時刻對應(yīng)的時刻內(nèi)存數(shù)據(jù)表征在所述任一運行時刻下的內(nèi)存占用情況;
40、目標(biāo)時刻獲取模塊,用于基于所述多個運行時刻對應(yīng)的時刻內(nèi)存數(shù)據(jù),從所述多個運行時刻中,確定所述目標(biāo)運行時刻;
41、相應(yīng)的,所述分配處理模塊包括:
42、第五執(zhí)行模塊,用于響應(yīng)于針對所述目標(biāo)應(yīng)用的二次業(yè)務(wù)操作指令,執(zhí)行所述預(yù)設(shè)業(yè)務(wù)操作,以基于所述預(yù)設(shè)內(nèi)存分配維度,對所述多個分配對象進行內(nèi)存分配處理。
43、可選的,所述分配處理模塊包括:
44、內(nèi)存分配模塊,用于響應(yīng)于所述目標(biāo)應(yīng)用中任一分配對象的預(yù)設(shè)分配請求指令,基于所述預(yù)設(shè)內(nèi)存分配維度,對所述任一分配對象進行內(nèi)存分配處理,得到所述任一分配對象在所述本機堆系統(tǒng)中的內(nèi)存空間。
45、根據(jù)本公開實施例的另一方面,提供一種電子設(shè)備,包括:處理器;用于存儲所述處理器可執(zhí)行指令的存儲器;其中,所述處理器被配置為執(zhí)行所述指令,以實現(xiàn)上述內(nèi)存分配分析方法。
46、根據(jù)本公開實施例的另一方面,提供一種計算機可讀存儲介質(zhì),當(dāng)所述存儲介質(zhì)中的指令由電子設(shè)備的處理器執(zhí)行時,使得所述電子設(shè)備能夠執(zhí)行上述內(nèi)存分配分析方法。
47、根據(jù)本公開實施例的另一方面,提供一種包含指令的計算機程序產(chǎn)品,當(dāng)其在計算機上運行時,使得計算機執(zhí)行上述內(nèi)存分配分析方法。
48、本公開的實施例提供的技術(shù)方案至少帶來以下有益效果:
49、響應(yīng)于針對目標(biāo)應(yīng)用的內(nèi)存分配測試指令,在目標(biāo)系統(tǒng)的內(nèi)存分配的堆棧記錄功能已開啟的情況下,開啟目標(biāo)應(yīng)用,可以實現(xiàn)目標(biāo)應(yīng)用運行過程中的堆棧記錄,再在目標(biāo)應(yīng)用的運行過程中,基于預(yù)設(shè)內(nèi)存分配維度,對目標(biāo)應(yīng)用中多個分配對象進行內(nèi)存分配處理,預(yù)設(shè)分配維度用于指示目標(biāo)系統(tǒng)基于目標(biāo)終端的本機堆系統(tǒng)進行內(nèi)存分配,獲取目標(biāo)運行時刻對應(yīng)的多個目標(biāo)分配對象的內(nèi)存分配數(shù)據(jù),其中,內(nèi)存分配數(shù)據(jù)為目標(biāo)系統(tǒng)在目標(biāo)運行時刻下為每個目標(biāo)分配對象分配的內(nèi)存空間數(shù)據(jù),每個目標(biāo)分配對象對應(yīng)的內(nèi)存空間數(shù)據(jù)表征每個目標(biāo)分配對象對應(yīng)的目標(biāo)存儲數(shù)據(jù)在本機堆系統(tǒng)中的內(nèi)存空間占用情況,可以實現(xiàn)目標(biāo)應(yīng)用運行過程中的目標(biāo)運行時刻下多個目標(biāo)分配對象的內(nèi)存分配情況的準(zhǔn)確獲取,接著,對內(nèi)存分配數(shù)據(jù)進行分配分析,得到目標(biāo)運行時刻對應(yīng)的目標(biāo)分配分析結(jié)果,能夠?qū)崿F(xiàn)全量的內(nèi)存分配抓取,提高內(nèi)存分析結(jié)果的準(zhǔn)確性,并可以通過目標(biāo)分配分析結(jié)果實現(xiàn)具體的分配堆棧的展示,提高內(nèi)存分析結(jié)果的可讀性。
50、應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本公開。