一、前言

MemoryLeakTool 是 Robin Hu 编写的一款用于监测Android进程内存使用情况的脚本工具,简称为 MLT 。


主要功能:

1、用于测试一个或多个进程是否有内存泄露。


2、用于自动提取一个Hprof文件,并转化为MAT所能识别的格式,以便分析。 该功能需要在你的程序的代码中先生成Hprof文件




Android2.3平台


当前版本:100


下载地址1

Android4.03平台

当前最新版本:101

下载地址1


历史版本:100


下载地址1( Android4.03平台)



二、运行环境


运行平台:Window


依赖软件1:安装 JDK ,且将其bin目录加入到环境变量path中。


依赖软件2:安装 android-sdk4.0 ,且将其platform-tools目录加入到环境变量path中。


三、配置参数


把 MLT 解压到你的电脑上,用记事本打开其中的 config.bat 文件进行参数配置。


批处理配置文件config.bat如下:


rem the following var is for getProcessState.bat
 
set rawDatadir=rawData
 
set processName= 
 android.process.acore 
 ; 
 com.android.systemui
 
rem set processShortName=a;b;c
 
set processShortName=
 
set outRoot=out
 
set statFilePrefix=stat
 
rem the following var is for getHprof.bat
 
set tools=D:\SDK\android-sdk4.0\tools
 
set hpInputFileDir=/sdcard
 
set hpInputFile=input.hprof
 
set hpRoot=hpTemp


注1:rawDatadir为“ps -x”提取出来的文件的目录


注2:processName需要统计内存的进程名字,可以同时统计多个,进程名之间用“;”进行分割。


注3:processShortName需要统计RSS的进程的名字的缩写形式,如果不坐设置或设置为空,这程序会根据processName自动生成。


注4:outRoot为对进程的RSS进行统计最后的生成文件的存放目录。


注5:statFilePrefix为对进程的RSS进行统计最后的生成文件的前缀。


注6:tools为hprof-conv.exe所在的目录。


注7:hpInputFileDir为手机中我们生成的hprof文件所在的目录。


注8:hpInputFileDir为手机中我们生成的hprof文件的名字。


四、进程PSS内存统计


PSS  (Proportional Set Size)是指进程实际使用的物理内存(比例分配共享库占用的内存)。


PSS 指标对于研发人员来说比较有用,对于测试人员请使用 RSS 指标,关于如何统计进程RSS的请参考后文。


确保手机连接电脑,确保手机已经开启debug模式, 然后双击 runMemoryPicker.bat 弹出界面,


 

 

android recylerview内存泄漏 android内存泄漏工具_android

界面中的interval time表示的是好久提取一次进程的内存信息 点击按钮开始内存统计, 在手机上进行一些反复操作后, 如果你想查看这些操作是否造成了config.bat中指定的进程是否有内存泄露。 请打开MLT目录下的out目录,里面已经生成了一些关于进程的内存取样值文件。 比如:stat_Memory_android.process.acore.txt;stat_Memory_com.android.systemui.txt


打开stat_Memory_android.process.acore.txt文件你会看到一些数值序列:


NativeSize:13172,13172,13232,13232,13232,13232,13232,13232,13232,13232,13232,13232,13232,13232,13232,13232,13232,13232,13232,13232


DalvikSize:11015,11015,11143,11271,11335,11399,11527,11591,11655,11655,11655,11655,11655,11655,11655,11655,11655,11655,11655,11655


NativeAllocated:13158,13159,13202,13202,13202,13203,13203,13205,4711,4732,4783,4770,4773,4781,4768,4770,4770,4770,4922,4923


DalvikAllocated:10775,10859,11038,11122,11206,11290,11374,11482,9898,10029,10229,10310,10405,10554,10651,10731,10811,10892,10338,10419


NativePSS:5189,5189,5249,5249,5249,5249,5249,5249,3701,3705,3713,3713,3713,3713,3713,3713,3713,3713,3808,3808


DalvikPSS:2894,2982,3167,3255,3347,3431,3519,3631,3175,3187,3195,3199,3203,3223,3231,3239,3243,3251,3312,3312


TotalPSS :20958,20993,21239,21326,21418,21502,21590,21702,9255,9276,9284,9288,9294,9317,9325,9333,9337,9345,9559,9559


我们首先需要关心的是 TotalPSS ,把TotalPSS里面的数值序列拷贝,用这些数值序列在excel中生成图表,  




android recylerview内存泄漏 android内存泄漏工具_android_02



查看其函数曲线最后是否稳定,如果不稳定,就说明可能存在内存泄露。


另外,下次重新对某个进程经常内存统计请在out目录中请先将老的统计文件删除。


五、进程RSS内存统计


RSS (Resident Set Size)表示的是进程实际使用物理内存大小(包含共享库占用的内存)


RSS 指标对于测试人员来说比较有用,对于研发人员最好使用PSS指标,关于如何统计进程PSS的请参考前文。


确保手机连接电脑,确保手机已经开启debug模式, 然后双击 runProcessStatePicker.bat 弹出界面,


 

android recylerview内存泄漏 android内存泄漏工具_Android_03

 

界面中的interval time表示的是好久提取一次进程的内存信息 


点击按钮开始内存统计, 在手机上进行一些反复操作后, 如果你想查看这些操作是否造成了config.bat中指定的进程是否有内存泄露。 请打开MLT目录下的out目录,里面已经生成了一些关于进程的内存取样值文件。


 比如: stat_android.process.acore.txt;stat_com.android.systemui.txt


打开stat_android.process.acore.txt文件你会看到一些数值序列:


RssSize :56892,56892,56892,56892,56892,56892,56892,56892,56892,56892,56892,56924,56916,56916,56916,56916,56916,56916,56916,56916,56952,56980,56976,56688,56688,56688,56688,56688,56688,56688,56688,56688,56688,56688,56688,56688,56688,56688,56688,56688,56688,56692,56712,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56732,56736,56844,40400,40392,40392


把RssSize里面的数值序列拷贝,用这些数值序列在excel中生成图表,  



android recylerview内存泄漏 android内存泄漏工具_android_04



查看其函数曲线最后是否稳定,如果不稳定,就说明可能存在内存泄露。


另外,下次重新对某个进程经常内存统计请在out目录中请先将老的统计文件删除。

六、提取hprof文件