终端性能监控 Pro 提供全面的崩溃分析能力,支持 Android 与 iOS 多种崩溃异常的收集与上报,帮助用户更好地解决应用的质量问题。本文主要介绍终端性能监控 Pro 崩溃分析中,各模块的功能详情和使用方式。
崩溃概览
在崩溃概览页面,终端性能监控 Pro 提供崩溃率、崩溃趋势的全面分析,主要支持以下分析能力。
指标概览
支持今日设备崩溃率、次数崩溃率、发生次数、影响设备数的展示,支持相对前一天的日环比对比。
设备崩溃率:设备崩溃率 = 影响设备数 / 联网设备数。
次数崩溃率:次数崩溃率 = 满足筛选条件的异常个例数 / 满足筛选条件的启动次数。(当前启动次数的统计只支持时间范围和 App 版本两个筛选条件。)仅支持查看2023年7月29日之后的数据。
发生次数:满足筛选条件的异常个例发生次数。
影响设备数:满足筛选条件的异常个例所属的设备数量,异常上报中,按设备ID去重。

崩溃趋势
App 版本:包含所有上报的 App 版本,下拉可选择全版本或单个 App 版本进行筛选查看。
时间粒度:支持按5分钟聚合、1小时聚合和按天聚合。
展示:趋势图可按照百分比、千分比、万分比的坐标维度进行查看。
统计维度:包含5分钟和累计两个维度,5分钟维度趋势图会按照筛选条件每5分钟进行一次统计,统计时间点更详细,累计维度趋势图会按照筛选条件每55分钟进行一次统计,便于更直观的看出崩溃趋势。
支持多维度展示崩溃趋势,在时间粒度处选择按5分钟聚合、1小时聚合或按天聚合,同时可以在右侧 Tab 栏中切换设备崩溃率、设备平均崩溃率、次数崩溃率、发生次数、启动次数、影响设备数、联网设备数展示。

支持版本对比功能,单击版本对比可以选择不同的应用版本在趋势展示中进行比较。

支持趋势图时间范围内崩溃 Top 问题分析 ,在趋势统计图中,点击曲线中不同的数据范围可以在下方展示该范围内的Top 3问题及影响范围。

崩溃排行榜
支持统计不同应用版本、系统版本、机型的崩溃率下钻,单击右上角选择框可切换影响设备数或联网设备数。
支持统计展示指定日期下的 Top 20崩溃问题,并统计了问题的影响面及波动情况。

崩溃问题列表
问题查询
在崩溃的问题列表中,终端性能监控Pro支持全方位的个例查询能力,主要如下:
支持通过时间范围、App 版本、用户 ID、设备 ID、前后台状态、Issue 类型等多维度字段的下钻搜索。
支持出错堆栈的高级搜索功能,支持分词与不分词,字段交集、并集或模糊匹配搜索。
支持业务设置处理状态、处理人、标签、标签颜色等自定义问题类型的搜索。
支持业务上报自定义字段的搜索。
支持在 Issue个例详情内根据附件名称搜索,可以筛选出有对应附件上报的个例。

趋势分析

问题列表
问题列表支持针对问题 issue 的特征概览、影响范围判断、趋势判断、处理人、处理状态管理等问题管理功能。

统计分布
支持统计不同应用版本、系统版本、机型的崩溃率下钻,单击右上角选择框可切换发生次数、影响设备数或联网设备数。

崩溃问题详情
个例详情
错误详情:包含发生时间、用户 ID、系统版本、机型、Bundle ID、构建号、进程启动 ID、SDK 版本、使用时长、运行时架构、场景、上报时间、设备 ID、厂商、前/后台、APP 版本、启动 ID、消息 ID、出错进程#线程、ROM、CPU 架构、渠道等信息,能更直观展示本次异常上报的更多详情信息。
最近上报:展示最近的上报问题信息,包括App版本、上报时间、设备ID、系统版本、机型。
上报设备:按照上报的设备 ID 分类排序,可以根据设备 ID 更好的查找错误详情个例,包括 App 版本、上报时间、设备 ID、系统版本、机型。
上报用户:按照上报的用户 ID 分类排序,可以根据用户 ID 更好的查找错误详情个例,包括 App 版本、上报时间、用户 ID、系统版本、机型。

出错堆栈
出错堆栈详细展示当前崩溃问题堆栈,是分析解决崩溃问题最直接的信息。
在 Java 崩溃堆栈中,出错堆栈展示的是 error message 和当前出错调用栈,调用栈通常由文件名+符号+偏移组成。如果 Java 代码在编译时配置了混淆,可以通过上传混淆的 mapping 符号表来翻译混淆后的符号。如果已上传符号表,可以通过右边按钮来切换展示原始堆栈或还原后堆栈,默认展示还原后堆栈。
如当前线程堆栈无法定位问题,可以单击展开线程堆栈 来查看其他线程堆栈,其他线程堆栈同样支持符号的还原。

在出错堆栈中,如果未上传堆栈对应符号表,页面会提示堆栈未翻译,可以单击去上传跳转至符号表上传界面。上传完符号表后,单击页面右上方手工还原,等待数分钟后刷新页面,堆栈即可被还原,操作流程请参见 符号表相关。
现场数据
现场数据是崩溃发生时采集的现场数据信息,主要包含如下内容。
基础信息:包括网络 APN、内存状态、存储状态、JVM 状态等。其中 JVM 状态的说明如下:
JVM 最大内存:表示 JVM 可以使用最大堆内存大小。JVM 已分配内存:表示 JVM 已分配的内存大小。通常情况下,已分配内存的值会小于最大内存值,当 Java 程序需要更多内存时,JVM 会自动扩展堆内存大小,直到达到最大内存为止。如果 JVM 无法分配更多内存,就可能会抛出 OutOfMemoryError 异常。JavaHeap:表示分配的内存中,存储 Java 对象实例使用的内存大小。PSS:表示进程共享内存的大小。VSS:表示进程虚拟内存的大小。自定义维度:自定义维度,限定 Key 的自定义数据。Key 由 SDK 限定,应用可以根据实际需要,设置不同意义的 Value。Value 当前支持 Number、String、String Array 三种类型,每一种类型支持十组 Key。
Value 为 Number 类型,维度 Key 为 n1 ~ n10;
Value 为 String 类型,维度 Key 为 s1 ~ s10;
Value 为 String Array 类型,维度 Key 为 a1 ~ a10;
自定义字段:展示用户通过接口上传的自定义字段,可参见 自定义数据。
页面跟踪:展示崩溃前页面的生命周期跟踪,可以分析用户发生崩溃前,进行了哪些页面操作。

日志
日志部分展示了崩溃发生时间前后的日志流,支持通过日志级别、关键字对日志进行检索。

FD 信息
FD 信息展示了崩溃发生时的 FD 使用状态。
包括当前已使用的 FD 数、当前未使用的 FD 数和单进程最大可使用的 FD 数。并按照 FD 的类型、数量,占比进行分类。在 FD 详情中,展示了具体被打开的 FD 资源路径,并在尾部标识了有多少个 FD 指向该路径。可以使用 FD 信息来辅助排查问题,了解在崩溃发生时,哪种类型的 FD 打开过多,或可以针对打开过多的 FD 类型进行优化。
进程信息
说明:
Native 崩溃上报该信息,Java 崩溃不上报。
进程信息展示了崩溃发生时与进程相关的信息,包括 Maps 信息、Meminfo 信息、进程状态和线程状态。进程信息的原始内容可以在附件 state_file.zip 中查看。
Maps 信息是用户进程运行时的内存映像,能够查看到当前进程空间的映射情况。可以通过地址、内存段名、访问权限来筛选指定的内存段。其中内存段的筛选支持正则表达式匹配,访问权限需全匹配,如可读可写可执行的私有内存段表示为 rwxp。
Meminfo信息表示了用户进程的内存使用情况,可以查看应用当前内存主要被如何分配。Meminfo 信息中的坐标说明如下:
坐标 | 字段 | 说明 |
横坐标 | Native Heap | 本地堆的使用情况。 |
| Dalvik Heap | Dalvik 堆的使用情况。 |
| Dalvik Other | Dalvik 堆之外的内存使用情况。 |
| Stack | 进程堆栈的使用情况。 |
| Ashmem | 匿名共享内存的使用情况。 |
| Other dev | 其他设备内存的使用情况。 |
| .so mmap | 共享库的内存使用情况。 |
| .jar mmap | JAR 文件的内存使用情况。 |
| .apk mmap | APK 文件的内存使用情况。 |
| .ttf mmap | 字体文件的内存使用情况。 |
| .dex mmap | DEX 文件的内存使用情况。 |
| .art mmap | ART 文件的内存使用情况。 |
| .oat mmap | OAT 文件的内存使用情况。 |
| Other mmap | 其他内存映射文件的使用情况。 |
| GL mtrack | OpenGL ES 内存使用情况。 |
| Unknown | 未知的内存使用情况。 |
纵坐标 | Pss Total | 进程使用的总共物理内存大小,包括共享库、匿名共享内存和堆栈等。 |
| Private Dirty | 进程使用的私有脏内存大小,即进程独占的内存大小,包括堆、栈、匿名共享内存等。 |
| Private Clean | 进程使用的私有干净内存大小,即已被清理不包含任何数据的内存。 |
| SwapPss Dirty | 进程的交换的内存脏页大小。 |
进程状态和线程状态分别表示当前运行进程及其中各线程的状态指标。在线程状态中,可以点击线程名称旁边的箭头展开单个线程的状态,鼠标 hover 至对应指标时,会展示对应状态指标的含义。
符号表
在崩溃个例的消息详情中,也可以进行符号表的上传。区别于设置中的符号表上传,这里仅展示在当前个例的出错堆栈中未被还原的 Java 堆栈和 Native 堆栈所需的对应符号表。
其中,Java 符号表文件根据版本号+构建号进行匹配,so 符号表文件根据 UUID 进行匹配。单击待上传,点击上传可在该页面上直接上传对应符号表,上传完成后需单击手工还原进行还原操作,等待数分钟后即可翻译当前出错堆栈 ,符号表相关参阅符号表。

附件
终端性能监控 Pro 支持所有附件的打包下载。对于用户自定义上报的数据文件,可以在以下附件中找到:
通过回调接口
getCrashExtraData 设置的内容存放在 userExtraByteData 中。通过回调接口
getCrashExtraMessage 设置的内容存放在 user_datas.log 附件中。通过自定义字段
putUserData 设置的内容会放在 valueMapOthers.txt 中。通过自定义文件
setAdditionalAttachmentPaths 设置的大文件会放在 custom_log.zip 中。下钻分析
在崩溃的 Issue 个例中,可以在下钻分析页面查看 Issue 问题的下钻信息。
数据概览
终端性能监控 Pro 提供崩溃 Issue 的发生次数、影响用户数、影响设备数、首次上报时间、最近一次上报时间等维度的数据以供分析。
上报趋势
上报趋势页面展示提供 Issue 问题按不同粒度的上报趋势统计图,粒度可以选择天、小时、分钟、5分钟,上报趋势可选择发生次数、影响用户数、影响设备数。

统计分布
支持根据不同的维度(如应用版本、系统版本、机型等)以饼状图的形式分析 Issue 问题,分析同样支持发生次数、影响用户数、影响设备数的选择。
如需要分析在该 Issue 问题下不同机型、架构的分布比例,或分析不同的应用版本中出现该问题的比例,可以使用该统计分布功能进行查看。
区间分布
支持根据不同字段(如使用时长、可用内存、设备异常次数、用户异常次数)和不同维度(如发生次数、影响用户数、影响设备数)以柱状图的形式分析 Issue 问题,单击右上角的添加分布可以新增添加分布,在添加分布中支持输入区间,如[0,5),[5,30),[30,60)。
出错堆栈分析
支持按出错堆栈的内容进行分析问题,单击右上角的编辑条件可以添加编辑条件,在编辑条件中支持添加需搜索的字符串,如搜索
com字符在当前 Issue 问题中出现的个例数量。搜索后的个例数量以柱状图的方式提供对比展示。