美文网首页android
Android 分析OOM工具介绍

Android 分析OOM工具介绍

作者: wbo4958 | 来源:发表于2017-05-29 15:56 被阅读1013次

OOM问题从来都是一个让开发者闻风丧胆的大问题,它以 "难以定位,难以分析,并且它所导致的问题都很严重" 而闻名。
可不管多严重,总要解决这类OOM问题。工欲善其事必先利其器,这篇文章就简单的介绍下Android分析OOM问题的工具。

转载请标明来处: http://www.jianshu.com/p/f41db1f57523

1. Android OOM工具介绍

1.1 Android monitor

图1 Android Monitor图

如图1所示, 步骤
** 1, 2, 3** 为打开Android Monitor并切换标签到monitor的过程

4, 5, 6 对应的图标和文字含义分别是

  • 4: 触发GC
  • 5: dump Java heap
  • 6: 可以看到当前已经 allocated和free的 memory.

1.2 MAT (Memory Analyzer Tool)

MAT 工具识别,并解析hprof文件,
有两种方式可以获得hprof文件

  • a) 将Android studio导出来hprof. 点击图1中步聚5
  • b)命令行
adb shell am dumpheap <PID> /data/local/tmp/out.hprof

MAT并不能直接打开这两个hprof, 必须通过hprof-conv来转换一次

hprof-conv src.prof dest.prof
图2 MAT overview 图3 过滤要分析的class name

如图3所示,选中(过滤出MainActivity), 然后通过Objects可以看出它有8个实例

接着选中 com.example.wowo.MainActivity 然后右键选择
Merge shortest paths to GC Roots -> exclude week references

因为弱引用是会被回收的,所以排除掉更加容易发现OOM.

图4 排除弱引用后的的MAT图

2. Android studio 初步分析OOM

什么是OOM out-of-memory?

Android下的APP运行在VM中(Dalvik or ART), 一个APP需要的内存是有限,这个值在不同的平台, 不同的手机上是不同的,当APP需要的内存超过了内存上限,就会引起OOM.

下面给出一个最基本的Android APP显示HelloWorld的例子.

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

这时如果不停的旋转屏幕, 这时通过观察Android Monitor里的Free和allocated的memory会发现 allocated 的memory会不断增加,而Free的memory会不断减小

这时通过图1中步聚5 dump java heap, 然后filter到MainActivity, 会发现MainActivity有多个实例

图5 Not GC OOM图

接着再通过MAT来分析, 图4所示

发现有很多FinalizerReference, 应该是与GC有关,由于旋转屏幕会导致MainActivity销毁并重新创建实例,而JVM在创建MainActivity实例时还有free的memory, 所以并没有触发GC,即原来的MainActivity的实例并没有被回收,所以多次旋转后,在free memory还有的情况下就会保存多个MainActivity的实例造成内存泄露的假象。当free memory 不够时,这时会触发GC, 会回收之前销毁的MainActivity的实例。

所以在查看OOM问题时,当allocated内存不断增大时,应该人为先触发GC(点击图1的4)。
如果allocated的内存没有下降,说明当前并没有可回收的实例占据内存了。

而在该例中,如果点击了initiate GC后,allocated的内存立即减少了。
Android Monitor看到MainActivity也就只有一个实例了。

相关文章

  • Android 分析OOM工具介绍

    OOM问题从来都是一个让开发者闻风丧胆的大问题,它以 "难以定位,难以分析,并且它所导致的问题都很严重" 而闻名。...

  • Android性能优化—布局优化技巧

    前面几篇文章在前面几篇文章当中, Android 内存泄漏和OOM分析(一) Android 内存泄漏和OOM分析...

  • 性能优化-内存优化

    一:App内存组成以及限制 二:什么是OOM? 三:Android 内存分析命令介绍 四,内存三大问题 五,MAT...

  • JVM 技术详解:面临复杂问题时的几个高级工具

    前面提到了很多 JVM 的分析工具,本节里我们会再介绍几种有用的工具,大家可以在需要的时候按需使用。 OOM Ki...

  • Android OOM 分析

    OOM简介 OOM全称为Out of memory,解释为内存溢出。 为了整个Android系统的内存控制需要,A...

  • Android OOM分析

    概述 OOM(Out of Memory)即内存溢出,是因为应用所需要分配的内存超过系统对应用内存的阈值,而抛出的...

  • Eclipse-mat

    Eclipse MAT -- android 内存分析工具 资料 介绍 Eclipse MAT 名词解释 Shal...

  • 详解移动应用测试神器PerfDog

    PerfDog介绍: 移动全平台iOS/Android性能测试、分析工具平台。快速定位分析性能问题,提升APP应用...

  • Android性能分析工具介绍

    一、SysTrace 不能显示程序执行的代码信息,发现了问题,也不能定位问题的位置 sdk中tools工具包中mo...

  • Android 性能分析工具介绍

    本文作者:The Performance,原文发布于:Android Performance。 原文首发于知识星球...

网友评论

    本文标题:Android 分析OOM工具介绍

    本文链接:https://www.haomeiwen.com/subject/htakfxtx.html