FOOM(Foreground Out Of Memory),前台内存溢出,我们将 App 在前台触发到系统内存限制而被 SIGKILL 信号杀死的情况,定义为 FOOM,本文介绍了 有关FOOM上报的各种指标分析以及如何查看详细问题上报 。
指标分析
趋势分析
趋势图会以折线等形式展示不同类型 FOOM 率(如设备 FOOM 率、人数 FOOM 率等)随时间的变化趋势,单位为(%)。可通过展示选项调整展示形式,也可单击加入对比列表将不同数据系列加入对比。

对比列表区域可查看不同筛选条件下的 FOOM 相关数据明细,包括序号、时间范围、APP 版本等信息,还可进行删除、批量删除、趋势预览等操作。
勾选一条或多条需删除的数据后,然后单击删除或批量删除,即可完成删除。

单击趋势预览即可查看对比列表中已选择的 FOOM 率总览。

多维分析
筛选条件设置:可设置时间范围(默认或自定义)、APP 版本、系统版本、SDK 版本、场景、上报量、机型、厂商等筛选条件,还可选择是否过滤 DAU 占比小于1%的 APP 版本。设置完成后,单击查询将获取筛选后数据。若要收起筛选条件,可单击收起筛选项。
数据展示:该区域会展示设备 FOOM 率、人数 FOOM 率、次数 FOOM 率、单位时间 FOOM 率、上报量、占比、累计占比等多维度的 FOOM 相关数据,帮助用户从不同角度分析 FOOM 指标情况。

问题列表
个例聚类
平台尽量将上报的个例进行聚类,生成 issue,方便业务开发以 issue 维度跟进定位问题。目前平台通过 FOOM 个例中的分配堆栈提取信息聚类,因为 FOOM 采集堆栈的策略问题,并非所有的上报个例都拥有分配堆栈信息,因此对于无堆栈的问题,会进入一个特殊的 issue 类别:"无堆栈问题" 。其他包含堆栈的个例,则提取堆栈中的特征,形成聚类特征进行聚类。

注意:
由于开启堆栈的占比较少,因此绝大部分的个例问题,都会被聚类在无堆栈问题中。
问题详情
个例详情
从 FOOM > 问题列表进入到一个 issue 中,会展示该 issue 下的所有个例问题。个例问题除基本的信息外,最重要的部分便是堆栈分配详情数据。

内存分配堆栈
堆栈分配详情
堆栈分配详情中的数据便是 SDK 收集的 App 在运行过程中记录到的 malloc logger 信息。
在 malloc logger 记录中,按照相同的分配类型和分配堆栈进行了合并,展示对应的堆栈分配的数量和总大小。

注意:
此处堆栈不会包含所有的内存分配,只会包含在现有策略下记录到分配而未释放的内存操作行为,未在记录策略中的分配不会包含。在默认记录策略下,只有同时满足以下条件的分配才会记录:
单次分配大于阈值,默认阈值为8K,可通过配置调整。
相同堆栈累计分配大于阈值,默认阈值为512K,可通过配置调整。
堆栈分配记录开启前的分配不会包含:在记录逻辑开始前已分配的内存不会在记录中。
堆栈分配树、火焰图
堆栈分配树和火焰图是对堆栈分配详情中的堆栈数据进行聚合产生的数据,其没有特殊含义,只是通过聚合为树结构后,可以更直观的发现内存分配的占比等情况。
堆栈分配树

火焰图

VMMAP
VMMAP 指的是虚拟内存管理器(VMM)的内存分配表,记录了所有内存区域的分配信息,包括堆栈内存。

在上述记录策略外的内存问题,堆栈分配详情可能无法直接提供有效信息,因此后续引入了 VMMAP 数据。VMMAP 数据类似 vmmap 命令的输出,提供的是内核管理的内存信息的使用情况,包括 user_tag、virtual_size、dirty_size 等信息。
user_tag:与内存堆栈分配详情中的 "分配类型" 对应。
virtual_size:表示该类型使用逻辑地址大小,不代表实际的物理占用内存。
dirty_size:表示该类型使用无法被操作系统回收使用的内存,占用实际的物理内存。
SDK 会周期性采集该数据,其采集频率与内存指标相关,因此其拿到的值为峰值内存时的 VMMAP 信息,基本包含所有的内存使用情况。因采集频率的缘故,可能无法与最终的峰值内存一致。
通过 VMMAP 信息,可以大致了解到主要的内存使用情况,再结合其他因素可进行进一步分析。
内存分配列表
FOOM 内存分配列表功能主要用于查询和管理与内存分配相关的问题,帮助开发者或运维人员快速定位、分析内存分配方面的异常情况,如内存分配过大、影响设备数多等问题,以便及时处理,保障应用的稳定运行。
查询

FOOM 分配列表
用户查询以后查询结果会在 FOOM 分配列表中展示,包括问题特征、最近上报时间、影响设备数、上报次数、内存分配总大小等信息。

同时,可进行以下操作:
问题标签分布:查看不同问题标签的分布情况,便于统计和分析问题类型。

批量操作:对符合条件的多条数据进行批量处理,提高工作效率。

设置:可对列表的展示等进行相关设置,以满足个性化需求。
