You need to enable JavaScript to run this app.
导航
使用APMPlus分析优化Java OOM问题
最近更新时间:2024.09.09 11:46:51首次发布时间:2024.09.09 11:46:51

本文介绍如何查看Java OOM的崩溃率,以及如何通过Java OOM时上报的Hprof文件分析泄漏和大对象,最终帮助您优化Java OOM的问题。

步骤一:分析Java OOM 崩溃率

  1. 查看Java崩溃率。

    筛选条件

    取值

    崩溃类型

    Java崩溃,Java启动崩溃

    如图总体Java崩溃率为2.27‰
    图片

  2. 查看Java OOM崩溃率。

    筛选条件

    取值

    崩溃类型

    Java崩溃,Java启动崩溃

    是否OOM

    如图总体Java OOM崩溃率为1.01‱。有时,Java OOM问题严重的应用,Java OOM 甚至占据 Java崩溃的50%。
    图片

  3. 分析Java OOM的Hprof文件。

    1. 配置 OOM分析采样率。
      SDK上报配置 页面,配置模块 内存优化 的指标 OOM分析采样率 为100%。
      图片
      Java OOM时,平台会dump Hprof文件裁剪后上报。防止资源过量消费,APMPlus平台会限制一天上报的Hprof份数最多数百份。

    2. 过滤存在Hprof文件的Java OOM进行分析。

      筛选条件

      取值

      崩溃类型

      Java崩溃

      是否OOM

      是否存在Hprof文件

      如图有2次Java OOM崩溃上报了Hprof文件。
      图片

    3. 单击异常崩溃列表里的Java OOM崩溃,进入详情页面。
      图片

步骤二:查看Java OOM Hprof文件

  1. 在Java OOM崩溃详情页,找到 Hprof文件 模块。

    筛选条件

    取值

    是否存在Hprof文件

    图片

  2. 单击 查看Hprof文件,进入单设备内存详情页面。
    图片

  3. 查看单设备内存详情的Hprof文件。

    说明

    单设备内存详情根据Device ID关联到Java OOM崩溃时的Hprof文件。注意筛选时间区间和崩溃时间对应。

    1. 单击 原始数据下载,下载Hprof文件到本地。
      图片
      您可以使用hprof-conv命令转换后,使用MAT等内存分析工具进一步分析任意对象内存占用和引用链。
    2. 单击 + 展开,查看APMPlus平台把Hprof文件自动解析后,发现的对象泄露和单个大对象等数据。
      如下图的单个大对象,展示了对象类名、大对象的引用链路和大对象的Retained Size。当前的大对象占据内存较大,为248M,需要优化当前的对象,达到优化内存的目的,进而优化Java OOM崩溃问题。
      图片

步骤三:结合泄露和大对象问题优化OOM

Java OOM崩溃时上报的Hprof文件,通过APMPlus平台自动化解析分析出泄露和大对象。平台会对所有解析出的泄露和大对象进行聚合,帮助您发现高频问题、占据内存较大的问题。
聚合后的泄露和大对象在内存优化页面的泄露分析大对象这两个模块。您可以优先优化解决Top泄露和大对象问题,进而优化Java OOM问题。

  1. 在泄露分析页面,查看所有泄露聚合后的泄露列表。
    图片

  2. 进入泄露详情页面,查看泄露堆栈。您可以根据堆栈解决泄露问题。
    图片

  3. 在大对象分析页面,查看所有大对象聚合后的列表。
    您可以根据次数、平均大小、总大小进行排序。
    图片

  4. 进入大对象详情页面,查看大对象具体的引用链和持有对象。
    您可以通过断掉引用链或者优化持有对象,优化大对象内存占用。

  5. 分析大对象持有对象,您可以优化大对象的持有对象来优化内存。
    如果发现几十或者上百M的大对象,优化后会极大的优化Java OOM崩溃问题。
    图片

相关文档