VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
top –m 20 –s rss
$pid表示进程号
-i 2表示每两秒更新一次
DirtyPage是内存泄漏的一种重要指标, 只有可写的内存区域才存在内存泄漏的可能性.
privateDirty 进程独有占的dirty内存
shareDirty 进程的共享库占的dirty内存
如果上面两个指标有一个不断增长, 表示该进程内存有泄漏的嫌疑.
内存Break-down:
Native
Dalvik
Other
内存持续增加表示有内存泄漏的嫌疑
Objects的变化
Objects持续增加表示有内存泄漏嫌疑
PID Vss Rss Pss Uss cmdline
481 31536K 30936K 14337K 9956K system_server
475 26128K 26128K 10046K 5992K zygote
526 25108K 25108K 9225K 5384K android.process.acore
523 22388K 22388K 7166K 3432K com.android.phone
574 21632K 21632K 6109K 2468K com.android.settings
521 20816K 20816K 6050K 2776K jp.co.omronsoft.openwnn
。。。。。。
查看Uss如果这个指标不断增长, 表示该进程内存有泄漏的嫌疑。
生成.hprof文件
先编辑一个批量执行脚本dumphprof.bat,内容如下:
adb shell am dumpheap %1 /sdcard/%2.hprof
pause
adb pull /sdcard/%2.hprof ./%2.hprof
hprof-conv %2.hprof ./1/%2_conv.hprof
脚本含义:先用adbshell am dumpheap %1 /sdcard/%2.hprof生成初始hprof数据,第一个参数是进程号,第二个参数是最终生成的文件名;然后用adbpull /sdcard/%2.hprof ./%2.hprof将原始数据卡版本到本地,然后用hprof-conv%2.hprof ./1/%2_conv.hprof将原始数据转换为mat可识别的数据,例子脚本是把最终数据文件放在当前目录的子目录1里面
脚本使用:手机连上电脑后,运行要检查的应用,用adb shell ps命令列出所有应用的进程,找到对应被检查应用的进程id。