内存分析

1.内存分析

因OOM的采集方式在安卓和iOS中不同,OOM异常安卓端跟随崩溃采集,iOS需要单独采集。故而安卓的OOM已经在崩溃分析中展示,您可以在安卓平台的崩溃分析中筛选“OutofMemory”的关键词查看,iOS 带有「OOM异常」左导中单独展示OOM。

2概述

内存分析提供内线上OOM异常的监控与分析,帮助开发者及时发现与定位线上OOM问题。同时,提供APP运行阶段内存占用情况,为应用内存优化提供关键指标数据。

3.OOM异常定义

基础定义

OOM异常:OutOfMemoryError

Android OOM

安卓OOM在崩溃分析中展示,在错误列表中搜索“OutofMemory” 即可

iOS OOM

由于iOS的Jetsam机制,当程序内存超出限制时造成的一种特殊的Crash。当前QT主要捕获对用户影响更大的FOOM。

4.采样配置说明

4.1:OOM异常

  • Android:Android端OOM异常是崩溃分析的子集,因此不单独提供开关配置,是否采集OOM与是否采集Crash同步

  • iOS:提供独立开关配置,可自行配置开启或关闭,请参考集成文档

4.2:内存占用

  • 开关配置:提供独立开关配置,可自行配置开启或关闭,请参考集成文档

参数

参数字段

默认值

内存信息采样率

apm_memperf_sampling_rate

1%

内存信息采集频率

apm_memperf_collect_interval

5秒

内存信息上报间隔

record_accumulation_time

60秒

内存信息单次监控最大时长

apm_memperf_collect_max_period_sec

10分钟

5.OOM异常

5.1OOM异常趋势

  • 错误数:在一定时间范围和筛选条件下,发生OOM异常的次数

  • 错误率:在一定时间范围和筛选条件下,发生OOM异常的次数/启动次数

  • 影响用户数:在一定时间范围和筛选条件下,发生OOM异常的设备去重数

  • 影响用户占比:在一定时间范围和筛选条件下,发生OOM异常的设备去重数/活跃设备去重数

image

5.2OOM异常分布

在所选时间范围和筛选条件下,按照设备(机型)、系统、运营商、版本、崩溃页面、运行时长、首次启动渠道、地域八个维度的OOM异常次数分布排行,并可通过点击「明细」查看OOM异常次数和影响用户数详情

image

5.3OOM异常列表

在所选时间范围和筛选条件下,所有OOM异常日志聚合后的错误列表,默认按照OOM异常次数降序展示,帮助您快速的找到OOM异常次数最多、影响最严重的错误。您也可以选择按照影响人数排行,找到影响面积最大的错误

image

聚合方式说明

  • Android OOM:基于崩溃信息与崩溃点进行聚合

  • iOS OOM:基于崩溃前最后停留页面进行聚合

将错误摘要相同的错误日志聚合在一起,展示其详细信息,帮助您快速定位问题、解决问题。

其中,iOS OOM日志详情中指标信息含义如下

  • app:APP真实使用内存(app Used Memroy)

  • free:APP可用内存(usage Comparison Free)

  • adisk:设备剩余存储空间(free Disk Space

5.4内存占用

image

指标说明

提供如下指标的平均值、25%分位值、50%分位值(中位数)、75%分位值和90%分位值。

样本量:采集到的内存信息日志数

指标名称

获取方式

Android

物理内存(后台)

Debug.MemoryInfo.getTotalPss()

物理内存(前台)

Debug.MemoryInfo.getTotalPss()

Java使用内存(后台)

Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()

Java使用内存(前台)

Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()

Java内存使用率(后台)

java_heap_background/Runtime.getRuntime().maxMemory()

Java内存使用率(前台)

java_heap_foreground/Runtime.getRuntime().maxMemory()

显存(后台)

Debug.MemoryInfo.getMemoryStat("summary.graphics")

显存(前台)

Debug.MemoryInfo.getMemoryStat("summary.graphics")

虚拟内存(后台)

/proc/进程pid/status

虚拟内存(前台)

/proc/进程pid/status

Java物理内存使用(后台)

Debug.MemoryInfo.dalvikPss

Java物理内存使用(前台)

Debug.MemoryInfo.dalvikPss

Native物理内存使用(后台)

Debug.MemoryInfo.nativePss

Native物理内存使用(前台)

Debug.MemoryInfo.nativePss

iOS

APP占用内存大小

appUsedMemory

APP占用内存比例

appUsedMemory/totalMemory

指标分布

所选指标按照一定区间分布的情况以及在关键维度细分下的中位数表现。

指标

在所选时间范围和筛选条件下,所选指标数据在各个区间内的样本量分布占比情况

维度细分

在所选时间范围和筛选条件下,所选指标数据在设备、系统、版本、渠道四个维度下的中位数表现