• 内存分析总结


    这里是之前手机项目的内存分析总结,当前先简单介绍内存debug需要获取的数据,其中一些数据需要dev/user或eng版本取得root权限才可以拿到。

    一、需要获取的数据

    //确认当前整机系统内存使用情况

    1.adb shell dumpsys meminfo

    //确认重大进程内存使用情况,包括dalvik堆、native堆、GL/EGL、还有对象个数(View,Activity等),

    2.adb shell dumpsys meminfo

    //分析smaps数据,主要包括进程文件占用的内存情况

    3.adb shell showmap

    //查看hwui所占用的内存,hwui主要则是使用opengles来进行gpu硬件绘图,提升整个系统的绘制性能。hwui所使用的cache,也包括GPU使用的一些内存,如meminfo中的gl、egl所占用的内存变大了,可以对比这些数据

    4.adb shell dumpsys gfxinfo

    5.adb pull /proc//smaps

    6.adb shell cat /d/kgsl/proc//mem > kgsl.txt

    //分解system_server或者其他app占用内存大的情况,排查内存泄露等信息

    7.hprof文件

    二、数据说明

    由于应用运行时的内存受多个因素影响,如平台、物理内存、内存参数配置、内存监控模块、ZRAM、常驻进程个数、当前后台运行的进程个数;所以要排查多个数据,交叉分析。

    1.dumpsys meminfo 拿到整个手机内存使用情况,以PSS大小排序如下;

    ①按PSS大小排序,不区分native和java

    ②OOM adjustment排序

    ③按类别进行排序

    ④系统综述,可以看到总内存大小,剩余内存大小,ZRAM使用情况

    2.dumpsys meminfo

    ①内存占用详细数据,从这里进行对比机哪里变大

    ②APP SUMMARY 内存占用按类型的一个汇总

    ③按对象个数的汇总,这里可以查看是否有异常的对象个数

    ④SQL

    ⑤DataBase信息

    3.showmap  需root权限

    showmap的数据其实是解析smaps的数据,会展示当前进程文件的内存占用,可以看到进程中每个打开文件所占用的内存,主要关注pss。

    4.adb pull /proc//smaps

    5.adb shell dumpsys gfxinfo

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

  • 相关阅读:
    MAC M1安装多个JDK版本及动态切换
    图Graph的存储、图的广度优先搜索和深度优先搜索(待更新)
    【TcaplusDB知识库】TcaplusDB技术支持介绍
    【数据结构】栈和队列
    【Windows】磁盘管理无法删除卷
    Redis的持久化方式各有什么优点?
    如何提pr
    web安全学习笔记(11)
    Python武器库开发-常用模块之subprocess模块(十九)
    PyTorch 2.0 重磅发布:一行代码提速 30%
  • 原文地址:https://blog.csdn.net/huangyabin001/article/details/126902461