当前位置: 首页 > news >正文

内存分析总结

这里是之前手机项目的内存分析总结,当前先简单介绍内存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、线程创建等。

相关文章:

  • awk编辑器
  • 基于Java毕业设计游泳馆管理平台源码+系统+mysql+lw文档+部署软件
  • 2022年全国大学生数学建模竞赛C题思路与程序
  • `算法知识` 字符串哈希
  • 打造这样的“超级云APP”有什么优势?
  • 一篇文章带你理解Thread(多线程)的基础用法
  • harbor部署实录
  • 计算机毕业设计ssmEE的仓库管理系统93c6b系统+程序+源码+lw+远程部署
  • MySQL group by后取每个分组中最新一条数据
  • JVM:(十六)垃圾回收器
  • 节点流和处理流详解
  • MySQL binlog 数据恢复
  • ArcGIS中添加在线地图(影像图、街道图等)
  • Opencv图像模板匹配
  • c语言进阶: 指针的进阶(上)
  • DataBase in Android
  • download使用浅析
  • JavaScript新鲜事·第5期
  • Netty 4.1 源代码学习:线程模型
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spark学习笔记之相关记录
  • SpringBoot几种定时任务的实现方式
  • Webpack 4x 之路 ( 四 )
  • 从setTimeout-setInterval看JS线程
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 如何优雅地使用 Sublime Text
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 时间复杂度与空间复杂度分析
  • 使用 Docker 部署 Spring Boot项目
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 线上 python http server profile 实践
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​如何防止网络攻击?
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​水经微图Web1.5.0版即将上线
  • ![CDATA[ ]] 是什么东东
  • #etcd#安装时出错
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (十三)Maven插件解析运行机制
  • .NET NPOI导出Excel详解
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET企业级应用架构设计系列之结尾篇
  • /boot 内存空间不够
  • @Async注解的坑,小心
  • [ C++ ] STL---仿函数与priority_queue
  • []error LNK2001: unresolved external symbol _m
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [CVPR2021]Birds of a Feather: Capturing Avian Shape Models from Images