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(進程名)
以下爲一個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
運行後,如圖:
如果發現內存過大,則保存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...,,再選擇剛轉換後的文件。
一般來說會選擇第一個,Leak Suspects Report
會看到report的概覽:
再下面是問題列表:
我們可以通過SQL語句來查詢對象有沒有被釋放掉,如果有多個相同的對象,則會存在內存泄露的問題。
在SQL查詢框裏輸入:select * frominstanceof android.app.Activity,然後點擊右上角的黑色感嘆號按鈕。
如果出現多個相同的對象,則存在內存泄露。