内存分析总结
Posted 高桐@BILL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存分析总结相关的知识,希望对你有一定的参考价值。
这里是之前手机项目的内存分析总结,当前先简单介绍内存debug需要获取的数据,其中一些数据需要dev/user或eng版本取得root权限才可以拿到。
一、需要获取的数据
//确认当前整机系统内存使用情况
1.adb shell dumpsys meminfo
//确认重大进程内存使用情况,包括dalvik堆、native堆、GL/EGL、还有对象个数(View,Activity等),
2.adb shell dumpsys meminfo <pid_of_app>
//分析smaps数据,主要包括进程文件占用的内存情况
3.adb shell showmap <pid_of_app>
//查看hwui所占用的内存,hwui主要则是使用opengles来进行gpu硬件绘图,提升整个系统的绘制性能。hwui所使用的cache,也包括GPU使用的一些内存,如meminfo中的gl、egl所占用的内存变大了,可以对比这些数据
4.adb shell dumpsys gfxinfo <pid_of_app>
5.adb pull /proc/<pid_of_app>/smaps
6.adb shell cat /d/kgsl/proc/<pid_of_app>/mem > kgsl.txt
//分解system_server或者其他app占用内存大的情况,排查内存泄露等信息
7.hprof文件
二、数据说明
由于应用运行时的内存受多个因素影响,如平台、物理内存、内存参数配置、内存监控模块、ZRAM、常驻进程个数、当前后台运行的进程个数;所以要排查多个数据,交叉分析。
1.dumpsys meminfo 拿到整个手机内存使用情况,以PSS大小排序如下;
①按PSS大小排序,不区分native和java
②OOM adjustment排序
③按类别进行排序
④系统综述,可以看到总内存大小,剩余内存大小,ZRAM使用情况
2.dumpsys meminfo <pid_of_app>
①内存占用详细数据,从这里进行对比机哪里变大
②APP SUMMARY 内存占用按类型的一个汇总
③按对象个数的汇总,这里可以查看是否有异常的对象个数
④SQL
⑤DataBase信息
3.showmap <pid_of_app> 需root权限
showmap的数据其实是解析smaps的数据,会展示当前进程文件的内存占用,可以看到进程中每个打开文件所占用的内存,主要关注pss。
4.adb pull /proc/<pid_of_app>/smaps
5.adb shell dumpsys gfxinfo <pid_of_app>
查看hwui所占用的内存,对应meminfo里面的gl、egl,其结果包含以下两个部分:
①渲染信息,由于这里用到了frameinfo里记录的帧信息,所以这里可以看到每一帧的渲染信息,根内存无关。
②.hwui所使用的内存信息,这部分包括了hwui所使用的cache,也包括GPU使用的一些内存,如meminfo中的gl、egl所占用的内存变大了,可以对比这些数据。其中scratch部分跟应用占用的关系比较大。
6.graphics-kgsl
这里主要是display所使用的内存,display内存变大时,可以拿此数据进行对比
7.hprof文件用于查看java内存相关情况,用MAT工具打开,通过hprof文件查看对象个数,也可分析一些native内存的信息,如bitmap、线程创建等。
以上是关于内存分析总结的主要内容,如果未能解决你的问题,请参考以下文章