OOM分析
1,dump命令使用:
busybox watch -n 3 -d dumpsysmeminfo${pid} 如: busybox watch -n 3 -d dumpsys meminfo com.gala.video
命令作用: 每隔3s打印一次dump命令
正常操作回到HomeActivity时,Activities应该为1,如果进入到 某二级页面(Activities:2) ,然后退出,回到HomeActivity。(Activities:1)。
如果回到HomeActivity,Activities不为1,说明有内存泄漏。
或者说如果进入到 某二级页面,然后退出该二级页面后,Activities:X ,X值没有回归到原值,或者说X值+1,说明该二级页面有内存泄漏
2.抓取信息
Android studio 中Android Monitor ----- > Monitors+ -------->Memory -------->Dump Java Heap 工具
运行要分析的程序,进行响应操作,后点击Dump Java Heap 按钮,稍等片刻,或生成一个 .hprof 文件,如 AAA.hprof
3.AMT 分析
1.使用android SDK 自带工具 android-sdk\platform-tools\hprof-conv.exe 进行文件转化
如 hprof-conv AAA.hprof AAAConveted.hprof (转换后的文件,可以使用MAT进行分析)
2.首先需要去下一个MAT工具。(可以是eclipse插件形式,也可以单独运行)
3.用AMT--File---openHeapDump-- 选择文件如:AAAConveted.hprof
4.Histogram-- 搜索 包名:com.gala.video 或是已知Acitivity泄漏的情况下:输入 Activity 结果如下:
(看到 下图MultiSubjectActivityUIKIT 的 objects 值为8 ,很显然该Activity存在内存泄漏)
5。选择要分析的Activity右键--Merge Shortest Root to GC Path -Exclude weak/soft reference
6.找到内存泄漏的代码:
(结合实际代码,分析,找到原因:注册了observer监听,没有释放,导致Activity无法销毁)
本文介绍了Android应用程序中出现OOM(Out of Memory)错误时如何进行分析和排查,包括使用`dumpsys meminfo`命令监控内存状态,通过Android Studio的Memory Monitor获取堆转储文件,以及使用MAT工具进行详细分析,找出内存泄漏的源头,特别是关注Activity的内存泄漏问题。

7956

被折叠的 条评论
为什么被折叠?



