欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種抓取內(nèi)存數(shù)據(jù)的方法和電子設備與流程

文檔序號:40620530發(fā)布日期:2025-01-10 18:26閱讀:4來源:國知局
一種抓取內(nèi)存數(shù)據(jù)的方法和電子設備與流程

本技術實施例涉及終端,尤其涉及一種抓取內(nèi)存數(shù)據(jù)的方法和電子設備。


背景技術:

1、內(nèi)存泄漏指的是應用程序在運行過程中動態(tài)申請的內(nèi)存空間,在不再需要使用時沒有正確釋放或回收的情況。內(nèi)存泄漏會導致內(nèi)存資源無法再被應用程序有效利用,隨著時間的推移,未釋放的內(nèi)存不斷累積,最終可能耗盡系統(tǒng)的可用內(nèi)存,導致應用程序性能下降或崩潰。

2、在應用程序運行過程中,應用程序的進程會根據(jù)實際需求動態(tài)地申請內(nèi)存空間。理想情況下,當申請的內(nèi)存不再需要時,應用程序應該使用對應的函數(shù)來釋放內(nèi)存。當應用程序由于未能正確地管理內(nèi)存資源,在申請內(nèi)存空間之后,沒有及時釋放這些內(nèi)存空間時,就會導致內(nèi)存泄漏。

3、當進程發(fā)生內(nèi)存泄漏時,可以使用一些工具抓取進程的內(nèi)存數(shù)據(jù),例如對象的引用關系、內(nèi)存占用情況等,來幫助定位內(nèi)存泄漏的原因,這種方法被稱作“抓?!?。然而,目前的一些抓棧方法無法全面地抓取進程的內(nèi)存數(shù)據(jù),導致利用這樣的內(nèi)存數(shù)據(jù)去定位內(nèi)存泄漏的原因時,存在定位率低的問題。


技術實現(xiàn)思路

1、本技術實施例提供了一種抓取內(nèi)存數(shù)據(jù)的方法和電子設備,能夠在進程發(fā)生內(nèi)存泄漏時,更全面地抓取進程的內(nèi)存數(shù)據(jù),以提高內(nèi)存泄漏問題的定位率。

2、第一方面,本技術實施例提供了一種抓取內(nèi)存數(shù)據(jù)的方法,該方法包括:電子設備在目標進程發(fā)生內(nèi)存泄漏的情況下,抓取目標進程的堆內(nèi)存數(shù)據(jù),堆內(nèi)存數(shù)據(jù)至少包括運行內(nèi)存中目標進程全部的垃圾回收根gcroot對象、以及對象之間的引用關系;電子設備將抓取到的堆內(nèi)存數(shù)據(jù)存儲到閃存的目標位置。

3、相比于傳統(tǒng)的抓棧方法只收集抓棧開始之后新產(chǎn)生的堆內(nèi)存數(shù)據(jù)來說,本技術實施例提供的抓取內(nèi)存數(shù)據(jù)的方法能夠抓取當前時刻目標進程全部的gcroot對象,從而提高內(nèi)存泄漏問題的定位率。

4、在一種實現(xiàn)方式中,電子設備在目標進程發(fā)生內(nèi)存泄漏的情況下,抓取目標進程的堆內(nèi)存數(shù)據(jù),包括:電子設備在目標進程發(fā)生內(nèi)存泄漏的情況下,創(chuàng)建目標子進程,目標子進程為目標進程的副本;電子設備在子進程中抓取堆內(nèi)存數(shù)據(jù)。這樣,電子設備創(chuàng)建一個目標子進程,在目標子進程中進行抓棧操作,而不是在目標進程中進行抓棧操作,因此,本技術實施例提供的抓取內(nèi)存數(shù)據(jù)的方法對目標進程的性能影響更小。

5、在一種實現(xiàn)方式中,電子設備包括維測服務模塊和抓棧工具,抓棧工具包括堆追蹤器模塊和監(jiān)聽模塊,監(jiān)聽模塊運行在目標進程的子線程中;電子設備在檢測到目標進程發(fā)生內(nèi)存泄漏的情況下,抓取目標進程的堆內(nèi)存數(shù)據(jù),包括:維測服務模塊檢測到目標進程發(fā)生內(nèi)存泄漏,維測服務模塊在檢測到目標進程發(fā)生內(nèi)存泄漏的情況下,生成抓棧配置,抓棧配置至少包括目標進程的進程名稱;維測服務模塊向堆追蹤器模塊發(fā)送抓棧通知,抓棧通知包括抓棧配置;堆追蹤器模塊基于抓棧配置,向監(jiān)聽模塊發(fā)送抓棧信號;在監(jiān)聽模塊監(jiān)聽到抓棧信號的情況下,目標進程創(chuàng)建目標子進程;目標子進程為目標進程的副本;目標子進程抓取目標進程的堆內(nèi)存數(shù)據(jù)。采用這樣的方式,監(jiān)聽模塊在監(jiān)聽到抓棧信號之后,目標進程創(chuàng)建一個目標子進程,在目標子進程中進行抓棧操作,而不是在目標進程中進行抓棧操作。由此可見,本技術實施例提供的抓取內(nèi)存數(shù)據(jù)的方法,目標進程僅在創(chuàng)建目標子進程時消耗一些時間,不會在抓取堆內(nèi)存數(shù)據(jù)上消耗時間,因此,對目標進程的性能影響更小。

6、在一種實現(xiàn)方式中,在維測服務模塊生成抓棧配置之后,維測服務模塊向堆追蹤器模塊發(fā)送抓棧通知之前,方法還包括:維測服務模塊解除抓棧工具的約束,使維測服務模塊可與堆追蹤器模塊通信。在抓棧工具處于約束狀態(tài)時,維測服務模塊無法與堆追蹤器模塊通信其監(jiān)聽模塊進行通信,因此,為了使維測服務模塊可與堆追蹤器模塊通信,維測服務模塊向堆追蹤器模塊發(fā)送抓棧通知之前,解除抓棧工具的約束,從而避免抓棧失敗。

7、在一種實現(xiàn)方式中,電子設備還包括內(nèi)存檢測模塊和信號重裝模塊;在維測服務模塊生成抓棧配置之前,方法還包括:維測服務模塊向通知內(nèi)存檢測模塊重裝抓棧信號;內(nèi)存檢測模塊向信號重裝模塊發(fā)送重裝信號;信號重裝模塊接收到重裝信號,執(zhí)行重裝抓棧信號的處理函數(shù)。采用這樣的方式,應用程序就不會屏蔽攔截抓棧信號,從而確保信號接管模塊在后續(xù)能夠接收到堆追蹤器模塊發(fā)送的抓棧信號,避免抓棧失敗。

8、在一種實現(xiàn)方式中,在電子設備將抓取到的堆內(nèi)存數(shù)據(jù)存儲到閃存的目標位置之后,方法還包括:維測服務模塊通知內(nèi)存檢測模塊恢復抓棧信號;內(nèi)存檢測模塊向信號重裝模塊發(fā)送恢復信號;信號重裝模塊接收到恢復信號,將抓棧信號恢復至默認狀態(tài)。采用這樣的方式,這樣,可以將電子設備復原至抓棧之前的系統(tǒng)環(huán)境,不會使電子設備原有的系統(tǒng)環(huán)境造成改變。

9、在一種實現(xiàn)方式中,抓棧工具還包括追蹤模塊,抓棧配置還包括緩沖區(qū)相關配置;電子設備在檢測到目標進程發(fā)生內(nèi)存泄漏的情況下,抓取目標進程的堆內(nèi)存數(shù)據(jù),還包括:監(jiān)聽模塊監(jiān)聽到抓棧信號,向追蹤模塊發(fā)送第一數(shù)據(jù)采集通知;追蹤模塊接收到第一數(shù)據(jù)采集通知,基于緩沖區(qū)相關配置,將抓取到的堆內(nèi)存數(shù)據(jù)轉換成目標格式的堆轉儲數(shù)據(jù),并將堆轉儲數(shù)據(jù)填充到共享內(nèi)存的追蹤緩存區(qū)緩沖區(qū)。采用這樣的方式,堆轉儲數(shù)據(jù)以protobuf格式的文件塊的形式存儲在共享內(nèi)存的追蹤緩沖區(qū),從而便于在目標進程、追蹤模塊、堆追蹤器模塊等模塊之間共享堆轉儲數(shù)據(jù)。

10、在一種實現(xiàn)方式中,電子設備將抓取到的堆內(nèi)存數(shù)據(jù)存儲到閃存的目標位置,包括:追蹤模塊向堆追蹤器模塊發(fā)送第二數(shù)據(jù)采集通知;堆追蹤器模塊將第二數(shù)據(jù)采集通知轉發(fā)給維測服務模塊;維測服務模塊接收到第二數(shù)據(jù)采集通知,將追蹤緩存區(qū)緩沖區(qū)中的堆轉儲數(shù)據(jù)存儲到目標位置。采用這樣的方式,堆轉儲數(shù)據(jù)從運行內(nèi)存中保存到了閃存中,以便于隨時對堆轉儲數(shù)據(jù)進行分析,定位內(nèi)存泄露的原因。

11、在一種實現(xiàn)方式中,維測服務模塊向堆追蹤器模塊發(fā)送抓棧通知之后,還包括:維測服務模塊等待預設時長之后,將追蹤緩存區(qū)緩沖區(qū)中的堆轉儲數(shù)據(jù)存儲到目標位置。

12、在一種實現(xiàn)方式中,電子設備還包括信號接管模塊,信號接管模塊運行在目標進程的子線程中;堆追蹤器模塊基于所述抓棧配置,向監(jiān)聽模塊發(fā)送抓棧信號,包括:堆追蹤器模塊基于所述抓棧配置,向信號接管模塊發(fā)送抓棧信號;信號接管模塊接收到抓棧信號,并將抓棧信號轉發(fā)給監(jiān)聽模塊。采用這樣的方式,信號接管模塊可以調(diào)用信號處理函數(shù)來捕獲和接管抓棧信號,并將抓棧信號轉發(fā)給監(jiān)聽模塊

13、在一種實現(xiàn)方式中,抓棧配置包括唯一會話名稱;在維測服務模塊解除抓棧工具的約束之后,維測服務模塊向堆追蹤器模塊發(fā)送抓棧通知之前,方法還包括:維測服務模塊基于唯一會話名稱,與堆追蹤器模塊建立會話通信。采用這樣的方式,維測服務模塊可以利用接口程序(例如tracing?sdk)與堆追蹤器模塊建立會話通信,后續(xù)的通信行為都可以在該會話中進行。

14、在一種實現(xiàn)方式中,在電子設備將抓取到的堆內(nèi)存數(shù)據(jù)保存到閃存中的目標位置之后,方法還包括:維測服務模塊清理會話通信的會話數(shù)據(jù),并恢復抓棧工具的約束。采用這樣的方式,抓棧工具可以在抓棧結束后恢復至約束狀態(tài),這樣,抓棧工具會攔截維測服務模塊與所述堆追蹤器模塊之間的通信。

15、在一種實現(xiàn)方式中,堆追蹤器模塊包括通信白名單,維測服務模塊的進程名稱位于通信白名單中,使維測服務模塊與堆追蹤器模塊之間的通信不受抓棧工具的約束。

16、在一種實現(xiàn)方式中,維測服務模塊位于操作系統(tǒng)的本地框架層,抓棧工具為perfetto工具。

17、在一種實現(xiàn)方式中,內(nèi)存檢測模塊位于操作系統(tǒng)的內(nèi)核層,信號重裝模塊位于操作系統(tǒng)的應用程序層。

18、第二方面,本技術實施例提供了一種抓取內(nèi)存數(shù)據(jù)的裝置。該裝置包括維測服務模塊和抓棧工具。其中,維測服務模塊用于在檢測到目標進程發(fā)生內(nèi)存泄漏的情況下,生成目標進程對應的抓棧配置;抓棧工具用于基于抓棧配置,抓取目標進程的堆內(nèi)存數(shù)據(jù),堆內(nèi)存數(shù)據(jù)至少包括運行內(nèi)存中目標進程全部的垃圾回收根gcroot對象;維測服務模塊還用于將抓取到的堆內(nèi)存數(shù)據(jù)存儲到閃存的目標位置。

19、第三方面,本技術提供一種電子設備,該電子設備包括顯示屏、存儲器和一個或多個處理器;顯示屏、存儲器與處理器耦合;其中,存儲器中存儲有計算機程序代碼,計算機程序代碼包括計算機指令,當計算機指令被處理器執(zhí)行時,使得電子設備執(zhí)行如第一方面及其任一種可能的設計方式提供的抓取內(nèi)存數(shù)據(jù)的方法。

20、第四方面,本技術提供一種計算機可讀存儲介質,該計算機可讀存儲介質包括計算機指令,當計算機指令在電子設備上運行時,使得電子設備執(zhí)行如第一方面及其任一種可能的設計方式提供的抓取內(nèi)存數(shù)據(jù)的方法。

21、第五方面,本技術提供一種計算機程序產(chǎn)品,當計算機程序產(chǎn)品在電子設備上運行時,使得電子設備執(zhí)行如第一方面及其任一種可能的設計方式提供的抓取內(nèi)存數(shù)據(jù)的方法。

22、可以理解地,上述提供的第二方面至第五方面提供的技術方案所能達到的有益效果,可參考第一方面及其任一種可能的設計方式中的有益效果,此處不再贅述。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
凤凰县| 淮南市| 泸定县| 建瓯市| 织金县| 黄陵县| 惠水县| 柳州市| 上思县| 汕头市| 河西区| 上杭县| 东丽区| 威宁| 靖远县| 太康县| 东海县| 台湾省| 兴文县| 诸城市| 杭锦后旗| 达日县| 宜都市| 延长县| 凤台县| 周宁县| 酒泉市| 曲麻莱县| 呼伦贝尔市| 阜新| 滨州市| 昌图县| 定安县| 神池县| 温泉县| 务川| 胶南市| 昆明市| 锦屏县| 台江县| 辽源市|