跳转到主要内容
PRODUCT DOCUMENTS

快速找到所需文档,高效完成接入与排障

浏览产品文档与友盟 Skill,展开目录并阅读正文。

内存分析

说明

内存分析为专业版/尊享版功能,请购买开通后使用。

Android端: OOM异常无需更新SDK。如需查看内存占用指标,需更新到U-APM SDK 1.4.0及以上 并建议搭配最新Common使用;

iOS端:使用OOM异常与内存占用指标均升级 U-APM SDK 至1.4.0及以上,并建议搭配最新Common 使用;

功能概述

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

OOM异常

基础定义

OOM异常:OutOfMemoryError

Android OOM

  • Java :堆栈信息包含OutOfMemoryError/OutOfDirectMemoryError/CursorWindowAllocationException/StackOverflowError

  • Native:32位App虚拟内存在32位手机上大于2.8G的native崩溃或64位APP虚拟内存在64位手机手机上大于3.8G的native崩溃

  • 持有句柄超过900

  • logcat中包含oom、open fd too many等关键信息

iOS OOM

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

OOM异常与崩溃分析关系如下

  • Android端:Java崩溃和Native崩溃中包含由于OOM异常引起的崩溃,因此可以认为Android端OOM异常是崩溃分析的子集,将其中由于OOM异常的部分抽取出来提供独立的OOM分析

  • iOS端:由于原Crash捕获机制是无法捕获到由于OOM引起的崩溃退出,因此崩溃分析中的错误情况与新增捕获的OOM异常彼此独立,并无包含关系。

采样配置说明

  1. OOM异常:

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

  • iOS:提供独立开关配置,可自行配置开启或关闭,点击查看详情。

  1. 内存占用:

  • 开关配置:提供独立开关配置,可自行配置开启或关闭,点击查看Android详情, 点击查看iOS详情。

  • 如果您需要配置iOS应用的OOM异常、内存占用开关/采样率或者Android应用的内存占用开关/采样率。请在专业版-开通管理-修改配置中更改

功能介绍

OOM异常趋势

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

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

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

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

OOM异常分布

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

OOM异常列表

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

聚合方式说明

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

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

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

点击查看详细说明

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

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

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

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

内存占用

指标说明

提供如下指标的平均值、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

指标分布

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

指标分布

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

维度细分

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