安装eclipse内存分析插件 www.eclipse.org/mat
但是,有时候会安装不上!
可以直接下载mat, 直接使用exe,当然,不如eclipse方便。
1,
进入adb shell, ps想要dump内存堆栈的进程,记录pid
ps命令,知道进程号
app_34 1231 97 259556 26172 ffffffff afd0eb18 S com.android.music
2,
使用android的命令,可以知道memory信息
dumpsys meminfo 1231
得到信息
native dalvik other total
size: 4892 3655 N/A 8547
allocated: 3990 2771 N/A 6761
free: 428 884 N/A 1312
(Pss): 1615 2312 2350 6277
(shared dirty): 1236 4140 1440 6816
(priv dirty): 1576 1516 1736 4828
Objects
Views: 0 ViewRoots: 0
AppContexts: 0 Activities: 0
Assets: 3 AssetManagers: 3
Local Binders: 46 Proxy Binders: 48
Death Recipients: 2
OpenSSL Sockets: 0
SQL
heap: 0 memoryUsed: 0
pageCacheOverflo: 0 largestMemAlloc: 0
具体大家可以自己研究,不用mat,直接看这个,也能得出memory leak的结论,但是,无法知道哪个应用有问题。
3,
kill -10 1231 杀掉这个进程
确保/data/misc有写入权限,没有的话执行chmod 777 修改该目录权限
用adb logcat可以查看dump过程,
/dalvikvm( 237): SIGUSR1 forcing GC and HPROF dump
I/dalvikvm( 237): hprof: dumping VM heap to "heap-dump-tm1309176136-pid1231.hprof".
I/dalvikvm( 237): hprof: dumping heap strings to "heap-dump-tm1309176136-pid1231.hprof".
I/dalvikvm( 237): hprof: heap dump completed, temp file removed
然后,在/data/misc下查看是否产生了类似heap-dump-tm1309176136-pid1231.hprof之类的文件,该文件即为dump出来的文件。
4,
用adb pull获得dump出来的文件
adb pull /data/misc/heap-dump-tm1309176136-pid1231.hprof .
5,
用android提供的工具hprof-conv把dump出来的文件转换为mat可以读取的格式
hprof-conv heap-dump-tm1309176136-pid1231.hprof 4.hprof
6,
直接使用MAT打开4.hprof
--- >Leak Suspects