内存分析总结

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、线程创建等。

以上是关于内存分析总结的主要内容,如果未能解决你的问题,请参考以下文章

java面试总结2

案例分析 - OOM的内存分析

剩余内存无法满足申请时,系统会怎么做?

剩余内存无法满足申请时,系统会怎么做?

Linux 学习总结(二十三)系统管理技巧2

Flink性能调优总结