一種監(jiān)控內(nèi)存泄漏的方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種監(jiān)控內(nèi)存泄漏的方法及裝置,該方法包括:監(jiān)測用戶針對一應用程序的用戶界面操作信息,并存儲監(jiān)測到的用戶界面操作信息;監(jiān)控系統(tǒng)內(nèi)存使用情況,得到系統(tǒng)的內(nèi)存信息;從所述內(nèi)存信息中獲取標示所述一應用程序內(nèi)存使用情況的關鍵字段值,若所述第一比較結(jié)果為所述關鍵字段值大于所述第一預設閾值,則確定發(fā)生了內(nèi)存泄露,則利用所述用戶界面操作信息和所述內(nèi)存信息生成一報警信息;接收到一觸發(fā)信息后,輸出所述報警信息。本發(fā)明所提供的方法和裝置,可以確定出現(xiàn)內(nèi)存泄漏問題時的特定操作場景,分析對應LOG信息,便于開發(fā)人員快速定位程序中內(nèi)存使用的問題。
【專利說明】一種監(jiān)控內(nèi)存泄漏的方法及裝置
【技術領域】
[0001 ] 本發(fā)明涉及電子【技術領域】,尤其涉及一種監(jiān)控內(nèi)存泄漏的方法及裝置。
【背景技術】
[0002]現(xiàn)有技術中,使用JAVA語言在Android系統(tǒng)上開發(fā)應用程序時,如果使用不當,很容易發(fā)生內(nèi)存泄漏,在計算機科學中,內(nèi)存泄漏(memory leak)指由于疏忽或錯誤造成程序未能釋放已經(jīng)不再使用的內(nèi)存的情況。內(nèi)存泄漏并非指內(nèi)存在物理上的消失,而是應用程序分配某段內(nèi)存后,由于設計錯誤,失去了對該段內(nèi)存的控制,因而造成了內(nèi)存的浪費。內(nèi)存泄漏與許多其他問題有著相似的癥狀,并且通常情況下只能由那些可以獲得程序源代碼的程序員才可以分析出來。然而,有不少人習慣于把任何不需要的內(nèi)存使用的增加描述為內(nèi)存泄漏,嚴格意義上來說這是不準確的。
[0003]一般常說的內(nèi)存泄漏是指堆內(nèi)存的泄漏。堆內(nèi)存是指程序從堆中分配的,大小任意的(內(nèi)存塊的大小可以在程序運行期決定),使用完后必須顯式釋放的內(nèi)存。應用程序一般使用malloc, calloc, realloc等函數(shù)(C++中使用new操作符)從堆中分配到一塊內(nèi)存,使用完后,程序必須負責相應的調(diào)用free或delete釋放該內(nèi)存塊,否則,這塊內(nèi)存就不能被再次使用,這就說這塊內(nèi)存泄漏了。
[0004]Android系統(tǒng)的JVM提供了垃圾收集器(Garbage Collect1n,GC)自動管理內(nèi)存的回收,程序員不需要通過調(diào)用函數(shù)來釋放內(nèi)存。因此,很多程序員認為Java不存在內(nèi)存泄漏問題,或者認為即使有內(nèi)存泄漏也不是程序的責任,而是GC或JVM的問題。其實,這種想法是不正確的,因為Java也存在內(nèi)存泄漏,但它的表現(xiàn)與C++不同。如果正在開發(fā)的Java代碼要全天24小時在服務器上運行,則內(nèi)存漏洞在此處的影響就比在配置實用程序中的影響要大得多,即使最小的漏洞也會導致JVM耗盡全部可用內(nèi)存。另外,在很多嵌入式系統(tǒng)中,內(nèi)存的總量非常有限。在相反的情況下,即便程序的生存期較短,如果存在分配大量臨時對象(或者若干吞噬大量內(nèi)存的對象)的任何Java代碼,而且當不再需要這些對象時也沒有取消對它們的引用,則仍然可能達到內(nèi)存極限。
[0005]雖然JVM提供了 GC機制可一定程度防止內(nèi)存泄露,但還是不能完全避免,一旦發(fā)生泄漏,會導致應用終止,甚至系統(tǒng)崩潰。
[0006]針對現(xiàn)有技術中GC機制下還是存在內(nèi)存泄露的問題,現(xiàn)有提供的解決方案為:使用 android提供的DDMS (Dalvik Debug Monitor Service,是Android開發(fā)環(huán)境中的 Dalvik虛擬機調(diào)試監(jiān)控服務)或者MAT內(nèi)存分析工具。但是該方案仍然存在一些缺點如:必須連線調(diào)試,使用PC機連接手機監(jiān)控內(nèi)存變化,而內(nèi)存泄漏可能發(fā)生在某些特定場景的操作下,比如自由測試的情況,因此連線時無法抓住這些特定操作的情況,錯過發(fā)現(xiàn)內(nèi)存泄漏問題的場景。
[0007]另外,DDMS涉及較專業(yè)的操作流程,所以需要具有很強的專業(yè)技術知識才能靈活應用,所以導致操作不便。
【發(fā)明內(nèi)容】
[0008]本發(fā)明提供一種監(jiān)控內(nèi)存泄漏的方法及裝置,本發(fā)明所提供的方法和裝置解決現(xiàn)有技術中內(nèi)存泄露檢測無法確定出現(xiàn)內(nèi)存泄露問題時的特定操作情況,錯過發(fā)現(xiàn)內(nèi)存泄漏問題的場景的問題。
[0009]針對上述問題本發(fā)明提供一種監(jiān)控內(nèi)存泄漏的方法,該方法應用于一電子設備中,該方法包括:
[0010]監(jiān)測用戶針對一應用程序的用戶界面操作信息,并存儲監(jiān)測到的用戶界面操作信息;
[0011]監(jiān)控系統(tǒng)內(nèi)存使用情況,得到系統(tǒng)的內(nèi)存信息;
[0012]從所述內(nèi)存信息中獲取標示所述一應用程序內(nèi)存使用情況的關鍵字段值,并將所述關鍵字段值與第一預設閾值進行比較,得到第一比較結(jié)果;
[0013]若所述第一比較結(jié)果為所述關鍵字段值大于所述第一預設閾值,則確定發(fā)生了內(nèi)存泄露,則利用所述用戶界面操作信息和所述內(nèi)存信息生成一報警信息;
[0014]接收到一觸發(fā)信息后,輸出所述報警信息。
[0015]更優(yōu)化的方案,存儲監(jiān)測到的用戶界面操作信息包括:
[0016]檢測已存儲的用戶界面操作次數(shù)是否超過第二閾值,如果是,則利用新監(jiān)測到用戶界面操作信息覆蓋已存儲的用戶界面操作信息。
[0017]更優(yōu)化的方案,利用新監(jiān)測到用戶界面操作信息覆蓋以存儲的用戶界面操作信息包括:
[0018]確定已存儲的每個用戶界面操作信息所對應的存儲時間;
[0019]利用新監(jiān)測到的用戶界面操作信息更新距離當前時間最遠的用戶界面操作所對應的用戶界面操作信息。
[0020]更優(yōu)化的方案,所述用戶界面操作信息包括操作控件動作信息、用戶在對話框中輸入的字符串信息。
[0021]更優(yōu)化的方案,當所述電子設備中的系統(tǒng)為android系統(tǒng)或Linux系統(tǒng)時,所述監(jiān)控系統(tǒng)內(nèi)存使用情況,得到系統(tǒng)的內(nèi)存信息包括:
[0022]將檢測到的應用程序的進程獨自占用的物理內(nèi)存、監(jiān)控系統(tǒng)已使用內(nèi)存情況或空閑內(nèi)存情況信息、檢測本機堆內(nèi)存和dalvik所使用的內(nèi)存信息對應記錄到預設的字段值中。
[0023]針對上述方法本發(fā)明還提供一種監(jiān)控內(nèi)存泄漏的裝置,該裝置應用于一電子設備中,該裝置包括:
[0024]操作信息獲取模塊,用于監(jiān)測用戶針對一應用程序的用戶界面操作信息,并存儲監(jiān)測到的用戶界面操作信息;
[0025]內(nèi)存信息檢測模塊,用于監(jiān)控系統(tǒng)內(nèi)存使用情況,得到系統(tǒng)的內(nèi)存信息;
[0026]第一比較模塊,用于從所述內(nèi)存信息中獲取標示所述一應用程序內(nèi)存使用情況的關鍵字段值,并將所述關鍵字段值與第一預設閾值進行比較,得到第一比較結(jié)果;
[0027]報警信息生成模塊,若所述第一比較結(jié)果為所述關鍵字段值大于所述第一預設閾值,用于確定發(fā)生了內(nèi)存泄露,則利用所述用戶界面操作信息和所述內(nèi)存信息生成一報警信息;
[0028]信息輸出模塊,用于接收到一觸發(fā)信息后,輸出所述報警信息。
[0029]更優(yōu)化的方案,所述操作信息獲取模塊還用于檢測已存儲的用戶界面操作次數(shù)是否超過第二閾值,如果是,則利用新監(jiān)測到用戶界面操作信息覆蓋已存儲的用戶界面操作信息。
[0030]更優(yōu)化的方案,所述操作信息獲取模塊還用于確定已存儲的每個用戶界面操作信息所對應的存儲時間;利用新監(jiān)測到的用戶界面操作信息更新距離當前時間最遠的用戶界面操作所對應的用戶界面操作信息。
[0031]更優(yōu)化的方案,該裝置包括轉(zhuǎn)換模塊,在存儲監(jiān)測到的用戶界面操作信息之前,用于將檢測到的用戶界面操作信息轉(zhuǎn)換為預設的腳本語言。
[0032]更優(yōu)化的方案,當所述電子設備中的系統(tǒng)為android系統(tǒng)或Linux系統(tǒng)時,內(nèi)存信息檢測模塊還用于將檢測到的應用程序的進程獨自占用的物理內(nèi)存、監(jiān)控系統(tǒng)已使用內(nèi)存情況或空閑內(nèi)存情況信息、檢測本機堆內(nèi)存和dalvik所使用的內(nèi)存信息對應記錄到預設的字段值中。
[0033]上述技術方案中的一個或兩個,至少具有如下技術效果:
[0034]本發(fā)明實施例所提供的方法和裝置,首先監(jiān)控了用戶對一應用程序的用戶界面執(zhí)行操作時的操作信息,并同時監(jiān)控系統(tǒng)內(nèi)存的使用情況;當監(jiān)控到系統(tǒng)內(nèi)存使用出現(xiàn)異常,則可以將內(nèi)存異常情況和用戶的操作信息結(jié)合生成對應的報警。通過上述方法如果后續(xù)檢測人員檢測系統(tǒng)問題時候,則可以直接調(diào)取已經(jīng)存儲的報警信息以供檢測人員分析。從而實現(xiàn)了內(nèi)存泄露檢測的離線使用,可以在應用程序開發(fā)調(diào)試階段,由測試人員進行自由測試,壓力測試等;
[0035]因為發(fā)現(xiàn)系統(tǒng)內(nèi)存問題的同時保存了對應的用戶操作信息,所以檢測人員在檢測電子設備故障時能夠確定設備出現(xiàn)問題的特定場景。當檢測到出現(xiàn)內(nèi)存泄漏問題時,可以對照特定操作場景,分析對應LOG信息,便于開發(fā)人員快速定位程序中內(nèi)存使用的問題。而且本發(fā)明提供的方法步驟簡便,無需測試人員掌握DDMS等專業(yè)工具的使用方法。
【專利附圖】
【附圖說明】
[0036]圖1為本發(fā)明實施例一種監(jiān)控內(nèi)存泄漏的方法的流程圖;
[0037]圖2為本發(fā)明實施例一種監(jiān)控內(nèi)存泄漏的裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0038]針對現(xiàn)有技術中GC機制下還是存在內(nèi)存泄露的問題,現(xiàn)有提供的解決方案為:使用 android提供的DDMS (Dalvik Debug Monitor Service,是Android開發(fā)環(huán)境中的 Dalvik虛擬機調(diào)試監(jiān)控服務)或者MAT內(nèi)存分析工具。但是該方案仍然存在一些缺點如:必須連線調(diào)試,使用PC機連接手機監(jiān)控內(nèi)存變化,而內(nèi)存泄漏可能發(fā)生在某些特定場景的操作下,比如自由測試的情況,因此連線時無法抓住這些特定操作的情況,錯過發(fā)現(xiàn)內(nèi)存泄漏問題的場景。另外,DDMS涉及較專業(yè)的操作流程,所以需要具有很強的專業(yè)技術知識才能靈活應用,所以導致操作不便。
[0039]檢測內(nèi)存泄漏的關鍵是要能截獲住對分配內(nèi)存和釋放內(nèi)存的函數(shù)的調(diào)用。截獲住這兩個函數(shù),就能跟蹤每一塊內(nèi)存的生命周期,比如,每當成功的分配一塊內(nèi)存后,就把它的指針加入一個全局的list中;每當釋放一塊內(nèi)存,再把它的指針從list中刪除。這樣,當程序結(jié)束的時候,list中剩余的指針就是指向那些沒有被釋放的內(nèi)存。
[0040]如果要檢測堆內(nèi)存的泄漏,那么需要截獲住malloc/realloc/free和new/delete就可以了(其實new/delete最終也是用malloc/free的,所以只要截獲前面一組即可)。對于其他的泄漏,可以采用類似的方法,截獲住相應的分配和釋放函數(shù)。比如,要檢測BSTR的泄漏,就需要截獲SysAllocString/SysFreeString ;要檢測HMENU的泄漏,就需要截獲CreateMenu/DestroyMenu。(有的資源的分配函數(shù)有多個,釋放函數(shù)只有一個,比如,SysAllocStringLen也可以用來分配BSTR,這時就需要截獲多個分配函數(shù))
[0041]在Windows平臺下,檢測內(nèi)存泄漏的工具常用的一般有三種,MS C-RuntimeLibrary內(nèi)建的檢測功能;外掛式的檢測工具,諸如,Purify, BoundsChecker等;利用Windows NT 自帶的 Performance Monitor。這三種工具各有優(yōu)缺點,MS C-Runt imeLibrary雖然功能上較之外掛式的工具要弱,但是它是免費的!Performance Monitor雖然無法標示出發(fā)生問題的代碼,但是它能檢測出隱式的內(nèi)存泄漏的存在,這是其他兩類工具無能為力的地方。
[0042]針對上述現(xiàn)有技術中的問題和內(nèi)存泄露的成因及特征,本發(fā)明提供一種監(jiān)控內(nèi)存泄漏的方法,該方法應用于一電子設備中,該方法包括:監(jiān)測用戶針對一應用程序的用戶界面操作信息,并存儲監(jiān)測到的用戶界面操作信息;監(jiān)控系統(tǒng)內(nèi)存使用情況,得到系統(tǒng)的內(nèi)存信息;從所述內(nèi)存信息中獲取標示所述一應用程序內(nèi)存使用情況的關鍵字段值,并將所述關鍵字段值與第一預設閾值進行比較,得到第一比較結(jié)果;若所述第一比較結(jié)果為所述關鍵字段值大于所述第一預設閾值,則確定發(fā)生了內(nèi)存泄露,則利用所述用戶界面操作信息和所述內(nèi)存信息生成一報警信息;接收到一觸發(fā)信息后,輸出所述報警信息。
[0043]在本發(fā)明實施例所提供的方法中首先監(jiān)控了用戶對一應用程序的用戶界面執(zhí)行操作時的操作信息,并同時監(jiān)控系統(tǒng)內(nèi)存的使用情況;當監(jiān)控到系統(tǒng)內(nèi)存使用出現(xiàn)異常,則可以將內(nèi)存異常情況和用戶的操作信息結(jié)合生成對應的報警。通過上述方法如果后續(xù)檢測人員檢測系統(tǒng)問題時候,則可以直接調(diào)取已經(jīng)存儲的報警信息以供檢測人員分析。從而實現(xiàn)了內(nèi)存泄露檢測的離線使用,可以在應用程序開發(fā)調(diào)試階段,由測試人員進行自由測試,壓力測試等;
[0044]因為發(fā)現(xiàn)系統(tǒng)內(nèi)存問題的同時保存了對應的用戶操作信息,所以檢測人員在檢測電子設備故障時能夠確定設備出現(xiàn)問題的特定場景。當檢測到出現(xiàn)內(nèi)存泄漏問題時,可以對照特定操作場景,分析對應LOG信息,便于開發(fā)人員快速定位程序中內(nèi)存使用的問題。而且本發(fā)明提供的方法步驟簡便,無需測試人員掌握DDMS等專業(yè)工具的使用方法。
[0045]如圖1所示,本發(fā)明實施例提供一種監(jiān)控內(nèi)存泄漏的方法,下面結(jié)合說明書附圖對本發(fā)明的【具體實施方式】進行詳細說明:
[0046]本發(fā)明實施例的方法應用于一電子設備中,該電子設備第一電子設備可以是電腦、手機、也可以是平板等電子設備,該方法具體包括:
[0047]步驟101,監(jiān)測用戶針對一應用程序的用戶界面操作信息(Us er' slnterface,UI操作),并存儲監(jiān)測到的用戶界面操作信息;
[0048]其中,為減少存儲所述用戶操作界面信息時所使用的存儲空間,存儲監(jiān)測到的用戶界面操作信息包括:
[0049]檢測已存儲的用戶界面操作次數(shù)是否超過第二閾值,如果是,則利用新監(jiān)測到用戶界面操作信息覆蓋已存儲的用戶界面操作信息。在該實施例中,所述第二閾值可以是20-30次用戶操作。
[0050]另外,為了使得最后存儲的用戶界面操作信息是與內(nèi)存泄露問題出現(xiàn)的時間最接近的,所以利用新監(jiān)測到用戶界面操作信息覆蓋以存儲的用戶界面操作信息的方式可以是:
[0051]確定已存儲的每個用戶界面操作信息所對應的存儲時間;
[0052]利用新監(jiān)測到的用戶界面操作信息更新距離當前時間最遠的用戶界面操作所對應的用戶界面操作信息。
[0053]上述更新操作可以叫做操作回滾,具體實現(xiàn)可以是指針回到文件頭,使得新的用戶界面操作信息輸入覆蓋舊的用戶界面操作信息。
[0054]其中所述用戶界面操作信息包括操作控件動作信息、用戶在對話框中輸入的字符串信息。
[0055]記錄所述用戶界面操作信息是自動化測試中的一種技術,指在UI程序開始后,監(jiān)控Π界面上的控件情況,從系統(tǒng)消息或應用內(nèi)存中獲取用戶輸入的任何操作,包括記錄操作控件動作(比如click, log press, scroll等)和在對話框中輸入的字符串信息。
[0056]另外,為了便于信息的輸出,所以存儲監(jiān)測到的用戶界面操作信息之前,進一步將檢測到的用戶界面操作信息轉(zhuǎn)換為預設的腳本語言。
[0057]另外,轉(zhuǎn)化為預設腳本語言的信息用戶可瀏覽或后期編輯的技術操作。
[0058]步驟102,監(jiān)控系統(tǒng)內(nèi)存使用情況,得到系統(tǒng)的內(nèi)存信息;
[0059]在不同的系統(tǒng)中,根據(jù)使用的命令不同,命令呈現(xiàn)的內(nèi)存信息也會不一樣。所以本發(fā)明實施例中監(jiān)控系統(tǒng)內(nèi)存使用情況時,所使用的命令也不相同。在具體操作時,需要根據(jù)每個系統(tǒng)中內(nèi)存信息代表的內(nèi)存狀態(tài)的重要性來就進行過濾,并對這些重要指標信息進行監(jiān)控。
[0060]若所述電子設備中的系統(tǒng)為android系統(tǒng)或Linux系統(tǒng)時,所述監(jiān)控系統(tǒng)內(nèi)存使用情況,得到系統(tǒng)的內(nèi)存信息包括:
[0061]將檢測到的應用程序的進程獨自占用的物理內(nèi)存、監(jiān)控系統(tǒng)已使用內(nèi)存情況或空閑內(nèi)存情況信息、檢測本機堆內(nèi)存和dalvik所使用的內(nèi)存信息對應記錄到預設的字段值中。
[0062]步驟103,從所述內(nèi)存信息中獲取標示所述一應用程序內(nèi)存使用情況的關鍵字段值,并將所述關鍵字段值與第一預設閾值進行比較,得到第一比較結(jié)果;
[0063]步驟104,若所述第一比較結(jié)果為所述關鍵字段值大于所述第一預設閾值,則確定發(fā)生了內(nèi)存泄露,則利用所述用戶界面操作信息和所述內(nèi)存信息生成一報警信息;
[0064]步驟105,接收到一觸發(fā)信息后,輸出所述報警信息。
[0065]對于如何在接收到一觸發(fā)信息后,輸出所述報警信息,具體實現(xiàn)過程舉例說明為:當檢測人員確定所述電子設備出現(xiàn)內(nèi)存泄露問題時,可以采用另一電子設備中的特定應用程序的特定功能來讀取出存儲的報警信息,根據(jù)報警信息在中包括的用戶界面操作信息確定出現(xiàn)內(nèi)存泄漏問題時,所對應的特定場景,從而根據(jù)對照特定操作場景,分析對應LOG信息,便于開發(fā)人員快速定位程序中內(nèi)存使用的問題。而且本發(fā)明提供的方法步驟簡便,無需測試人員掌握DDMS等專業(yè)工具的使用方法。
[0066]本發(fā)明實施例所提供的方法中,針對不同的系統(tǒng)所述監(jiān)控系統(tǒng)內(nèi)存使用情況,得到系統(tǒng)的內(nèi)存信息具體實現(xiàn)方式可以是;
[0067](I)針對Android系統(tǒng)和Linux系統(tǒng),進行系統(tǒng)內(nèi)存信息監(jiān)控時候通過預設的命令獲取,具體實現(xiàn)監(jiān)控的命令包括:
[0068]A、Procrank 命令各個進程的 VSS、RSS、PSS 和 USS 信息,VSS-VirtualSet Size 虛擬耗用內(nèi)存(包含共享庫占用的內(nèi)存)、RSS-ReSident Set Size實際使用物理內(nèi)存(包含共享庫占用的內(nèi)存)、PSS-Pr0p0rti0nal Set Size實際使用的物理內(nèi)存(比例分配共享庫占用的內(nèi)存)和USS-Unique Set Size進程獨自占用的物理內(nèi)存(不包含共享庫占用的內(nèi)存。一般情況下內(nèi)存占用大小有如下規(guī)律=VSS >= RSS >= PSS >= USS0
[0069]若單純監(jiān)控某進程的內(nèi)存使用情況,上面的4類內(nèi)存耗用信息,USS是最能說明內(nèi)存是否出現(xiàn)內(nèi)存泄露情況的參數(shù),因為其只代表了屬于此進程所使用的內(nèi)存情況,當此進程被關掉后,其內(nèi)存會完全被釋放掉。所以procrank命令,則監(jiān)控USS參數(shù)。
[0070]B、Android系統(tǒng)和Linux系統(tǒng)都提供了 free命令,此命令能獲取total, used,free, shared和buffers的大小,該命令主要是監(jiān)控整個系統(tǒng)的內(nèi)存情況,得到整個系統(tǒng)的內(nèi)存使用情況,但本發(fā)明實施中只是需要關注free和used信息中其中一項即可,它們分別代表了系統(tǒng)目前的剩余的內(nèi)存和已經(jīng)使用的內(nèi)存大小,兩種之和就是total的值。
[0071]C、在 Android 系統(tǒng)中,除了 procrank 和 free 命令外,還提供了 dumpsysmeminfo,此命令可以針對某個程序執(zhí)行,并顯示此程序的內(nèi)存使用信息,且呈現(xiàn)的內(nèi)存信息較之前的命令會更多。在dumpsys meminfo命令中,本發(fā)明實施例需要關注的信息是Davlik和Native相關的Heap信息;
[0072]Heap Size:堆的總大小;
[0073]Heap Alloc:已經(jīng)分配的堆大??;
[0074]Heap Free:剩余的堆大?。?br>
[0075]Native heap:使用C\C++在堆上分配的內(nèi)存;
[0076]Dalvik heap:dalvik所使用的內(nèi)存,主要是使用java在上層應用java堆中分配的內(nèi)存大??;
[0077]對于單個程序內(nèi)存的限制是對Native heap與Dalvik heap之和的限制,因此這兩類內(nèi)存信息之間是相互平衡制約的,當某類的內(nèi)存使用增大時,另一類的內(nèi)存可使用量也就縮小。對于某個上層應用,若存在內(nèi)存泄露,那么在每次運行結(jié)束后,其對應的NativeHeap Alloc或者Dalvik Heap Alloc的值就會不斷增加,最終因為超過規(guī)定單個程序的內(nèi)存使用上限,而導致產(chǎn)生00M (Out Of Memory),甚至造成系統(tǒng)崩潰。
[0078](2)Windows系統(tǒng)下,實現(xiàn)內(nèi)存監(jiān)控的方式包括兩種,具體可以是:
[0079]a,可以通過系統(tǒng)自帶的“性能”工具perfmon.msc來對整個系統(tǒng)的memory進行監(jiān)測,該性能工具還提供報表形式數(shù)據(jù)。
[0080]b,另外,Windows系統(tǒng)也可以通過任務管理器實時監(jiān)測進程的內(nèi)存使用情況。
[0081 ] 若在Windows下監(jiān)測某個應用程序的內(nèi)存情況,可以在其源碼中添加CRT (CRun-Time library, C運行時庫)的調(diào)試堆函數(shù),并在Debug模式下運行程序,以進行內(nèi)存泄露的監(jiān)測。具體函數(shù)如下:
【權(quán)利要求】
1.一種監(jiān)控內(nèi)存泄漏的方法,該方法應用于一電子設備中,其特征在于,該方法包括: 監(jiān)測用戶針對一應用程序的用戶界面操作信息,并存儲監(jiān)測到的用戶界面操作信息; 監(jiān)控系統(tǒng)內(nèi)存使用情況,得到系統(tǒng)的內(nèi)存信息; 從所述內(nèi)存信息中獲取標示所述一應用程序內(nèi)存使用情況的關鍵字段值,并將所述關鍵字段值與第一預設閾值進行比較,得到第一比較結(jié)果; 若所述第一比較結(jié)果為所述關鍵字段值大于所述第一預設閾值,則確定發(fā)生了內(nèi)存泄露,則利用所述用戶界面操作信息和所述內(nèi)存信息生成一報警信息; 接收到一觸發(fā)信息后,輸出所述報警信息。
2.如權(quán)利要求1所述的方法,其特征在于,存儲監(jiān)測到的用戶界面操作信息包括: 檢測已存儲的用戶界面操作次數(shù)是否超過第二閾值,如果是,則利用新監(jiān)測到用戶界面操作信息覆蓋已存儲的用戶界面操作信息。
3.如權(quán)利要求2所述的方法,其特征在于,利用新監(jiān)測到用戶界面操作信息覆蓋以存儲的用戶界面操作信息包括: 確定已存儲的每個用戶界面操作信息所對應的存儲時間; 利用新監(jiān)測到的用戶界面操作信息更新距離當前時間最遠的用戶界面操作所對應的用戶界面操作信息。
4.如權(quán)利要求1所述的方法,其特征在于,所述用戶界面操作信息包括操作控件動作信息、用戶在對話框中輸入的字符串信息。
5.如權(quán)利要求1所述的方法,其特征在于,當所述電子設備中的系統(tǒng)為android系統(tǒng)或Linux系統(tǒng)時,所述監(jiān)控系統(tǒng)內(nèi)存使用情況,得到系統(tǒng)的內(nèi)存信息包括: 將檢測到的應用程序的進程獨自占用的物理內(nèi)存、監(jiān)控系統(tǒng)已使用內(nèi)存情況或空閑內(nèi)存情況信息、檢測本機堆內(nèi)存和dalvik所使用的內(nèi)存信息對應記錄到預設的字段值中。
6.一種監(jiān)控內(nèi)存泄漏的裝置,該裝置應用于一電子設備中,其特征在于,該裝置包括: 操作信息獲取模塊,用于監(jiān)測用戶針對一應用程序的用戶界面操作信息,并存儲監(jiān)測到的用戶界面操作信息; 內(nèi)存信息檢測模塊,用于監(jiān)控系統(tǒng)內(nèi)存使用情況,得到系統(tǒng)的內(nèi)存信息; 第一比較模塊,用于從所述內(nèi)存信息中獲取標示所述一應用程序內(nèi)存使用情況的關鍵字段值,并將所述關鍵字段值與第一預設閾值進行比較,得到第一比較結(jié)果; 報警信息生成模塊,若所述第一比較結(jié)果為所述關鍵字段值大于所述第一預設閾值,用于確定發(fā)生了內(nèi)存泄露,則利用所述用戶界面操作信息和所述內(nèi)存信息生成一報警信息; 信息輸出模塊,用于接收到一觸發(fā)信息后,輸出所述報警信息。
7.如權(quán)利要求6所述的裝置,其特征在于,所述操作信息獲取模塊還用于檢測已存儲的用戶界面操作次數(shù)是否超過第二閾值,如果是,則利用新監(jiān)測到用戶界面操作信息覆蓋已存儲的用戶界面操作信息。
8.如權(quán)利要求7所述的裝置,其特征在于,所述操作信息獲取模塊還用于確定已存儲的每個用戶界面操作信息所對應的存儲時間;利用新監(jiān)測到的用戶界面操作信息更新距離當前時間最遠的用戶界面操作所對應的用戶界面操作信息。
9.如權(quán)利要求6所述的裝置,其特征在于,該裝置包括轉(zhuǎn)換模塊,在存儲監(jiān)測到的用戶界面操作信息之前,用于將檢測到的用戶界面操作信息轉(zhuǎn)換為預設的腳本語言。
10.如權(quán)利要求6所述的裝置,其特征在于,當所述電子設備中的系統(tǒng)為android系統(tǒng)或Linux系統(tǒng)時,內(nèi)存信息檢測模塊還用于將檢測到的應用程序的進程獨自占用的物理內(nèi)存、監(jiān)控系統(tǒng)已使用內(nèi)存情況或空閑內(nèi)存情況信息、檢測本機堆內(nèi)存和dalvik所使用的內(nèi)存信息對應記錄到預設的字段值中。
【文檔編號】G06F11/30GK104182320SQ201310195512
【公開日】2014年12月3日 申請日期:2013年5月23日 優(yōu)先權(quán)日:2013年5月23日
【發(fā)明者】李彬, 羅靜 申請人:聯(lián)想(北京)有限公司