本人网易博客原文:http://hubingforever.blog.163.com/blog/static/171040579201243071752744/

一、前言MemoryLeakToolRobin Hu编写的一款用于监测Android进程内存使用情况的脚本工具,简称为MLT主要功能:1、用于测试一个或多个进程是否有内存泄露。2、用于自动提取一个Hprof文件,并转化为MAT所能识别的格式,以便分析。 该功能需要在你的程序的代码中先生成Hprof文件Android2.3平台当前版本:100下载地址1Android4.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.batset rawDatadir=rawDataset processName=android.process.acore;com.android.systemuirem set processShortName=a;b;cset processShortName=set outRoot=outset statFilePrefix=statrem the following var is for getHprof.batset tools=D:\SDK\android-sdk4.0\toolsset hpInputFileDir=/sdcardset hpInputFile=input.hprofset 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内存泄露利器MLT(整合篇)_第1张图片界面中的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,13232DalvikSize:11015,11015,11143,11271,11335,11399,11527,11591,11655,11655,11655,11655,11655,11655,11655,11655,11655,11655,11655,11655NativeAllocated:13158,13159,13202,13202,13202,13203,13203,13205,4711,4732,4783,4770,4773,4781,4768,4770,4770,4770,4922,4923DalvikAllocated:10775,10859,11038,11122,11206,11290,11374,11482,9898,10029,10229,10310,10405,10554,10651,10731,10811,10892,10338,10419NativePSS:5189,5189,5249,5249,5249,5249,5249,5249,3701,3705,3713,3713,3713,3713,3713,3713,3713,3713,3808,3808DalvikPSS:2894,2982,3167,3255,3347,3431,3519,3631,3175,3187,3195,3199,3203,3223,3231,3239,3243,3251,3312,3312TotalPSS:20958,20993,21239,21326,21418,21502,21590,21702,9255,9276,9284,9288,9294,9317,9325,9333,9337,9345,9559,9559我们首先需要关心的是TotalPSS,把TotalPSS里面的数值序列拷贝,用这些数值序列在excel中生成图表, Android内存泄露利器MLT(整合篇)_第2张图片
查看其函数曲线最后是否稳定,如果不稳定,就说明可能存在内存泄露。另外,下次重新对某个进程经常内存统计请在out目录中请先将老的统计文件删除。五、进程RSS内存统计RSS(Resident Set Size)表示的是进程实际使用物理内存大小(包含共享库占用的内存)RSS指标对于测试人员来说比较有用,对于研发人员最好使用PSS指标,关于如何统计进程PSS的请参考前文。确保手机连接电脑,确保手机已经开启debug模式, 然后双击runProcessStatePicker.bat弹出界面,Android内存泄露利器MLT(整合篇)_第3张图片 界面中的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内存泄露利器MLT(整合篇)_第4张图片
查看其函数曲线最后是否稳定,如果不稳定,就说明可能存在内存泄露。另外,下次重新对某个进程经常内存统计请在out目录中请先将老的统计文件删除。六、提取hprof文件关于此的详细内容请参考《Android内存泄露利器(hprof篇)

更多相关文章

  1. 解决在3.6.2安装android的ADT文件bug
  2. Android中应用多进程的整理总结
  3. 【转】Android中对Log日志文件的分析
  4. android:gravity 和 android:layout_Gravity属性——android开发
  5. Android之文件读写
  6. Android 文件格式
  7. android项目中每个文件的作用

随机推荐

  1. Android(安卓)ContentProvider的线程安全
  2. android 使用asm.jar将android手机屏幕投
  3. android 中使用socket使native和framewor
  4. Android消息传递之组件间传递消息
  5. 深入理解Android插件化技术
  6. Android(安卓)IPC之Messenger和AIDL(andr
  7. [转载]Android实现更换皮肤功能
  8. Android中绘制2D图形基础
  9. APK反编译软件以及方法
  10. android之规范命名