天天看點

Monkey總結

    Monkey是一個快速檢查記憶體洩露的好工具,可以初步發現較明顯的記憶體洩露問題。

   什麼是記憶體洩露?是指不在使用的對象持續占有記憶體,造成記憶體空間的浪費。

   檢查記憶體洩露的基本操作步驟:

         1.運作Monkey或者固定自動化用例

            adb shell monkey -p cn.microinvestment.weitou --pct-touch 100 --ingore-crashes --throttle 1000 -s 100 -v -v 50

                  2.監控記憶體值,如果出現過大等遞增異常則儲存HPROF檔案

                            檢視應用記憶體的指令:adb shell dumpsys meminfo(程序名) 

Monkey總結

                            以下為一個bat腳本,主要 是記錄第一行的和最後一行總共的記憶體,一直循環查詢:

                            set process=cn.microinvestment.weitou

                            @adb sehll dumpsys meminfo %process% | findstr "Pss"

                             :m

                             @adb sehll dumpsys meminfo %process% | findstr "TOTAL"

                             @ping -n 5 127.1>nul

                              @goto m

                             運作後,如圖:

Monkey總結

                             如果發現記憶體過大,則儲存HPROF檔案:

                                 adb shell am dumpheap <程序名> <儲存路徑>

                   3.但是生成的HPROF檔案怎麼檢視呢?我們要用到一個工具MAT來檢視,但是首先還要這個HPROF檔案轉換成MAT可讀的檔案,在Android SDK tool裡面有個hprof-conv指令:

                                hprof-conv<原HPROF檔案路徑><轉換後的HPROF路徑>

                   4.用MAT工具打開轉換後的HPROF檔案:

                               MAT下載下傳:http://www.eclipse.org/mat/

                               安裝好JDK,配置好環境後打開MAT工具,選擇File-Open File...,,再選擇剛轉換後的檔案。

Monkey總結

                                  一般來說會選擇第一個,Leak Suspects Report

Monkey總結

                                     會看到report的概覽:

Monkey總結

           再下面是問題清單: 

Monkey總結

                                               我們可以通過SQL語句來查詢對象有沒有被釋放掉,如果有多個相同的對象,則會存在記憶體洩露的問題。      

Monkey總結

                                                    在SQL查詢框裡輸入:select * frominstanceof android.app.Activity,然後點選右上角的黑色感歎号按鈕。

Monkey總結

                                                    如果出現多個相同的對象,則存在記憶體洩露。

Monkey總結

技術改變世界!

--狂詩絕劍