跳到主要内容

异常分析

异常分析模块用于查看选定的App发生的崩溃、卡顿、OOM和自定义错误情况。内存溢出(Out Of Memory,简称OOM)是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行内存大于提供的最大内存,程序无法运行,系统提示内存溢出。

在左侧导航栏中单击异常分析,进入异常分析概览页面,查看当前应用中的整体和单样本的崩溃、卡顿、OOM和自定义错误信息。

数据卡片

异常分析概览上方展示4个数据卡片,分别是崩溃、卡顿、OOM和自定义错误。

  • 崩溃卡片展示当前应用的崩溃率、启动次数、崩溃次数和崩溃影响设备数。

  • 卡顿卡片展示当前应用的卡顿率、活跃设备数、卡顿次数和卡顿影响设备数。

  • OOM卡片展示当前应用的内存溢出率、内存溢出次数和内存溢出影响设备数。

  • 自定义错误卡片展示当前应用的错误率、活跃设备数、自定义错误次数和错误影响设备数。

鼠标单击某个数据卡片,下方的所有图表都将显示相应的数据。

说明:月活使用超量后,卡顿、自定义错误数据仍可上传。

趋势分析

趋势分析图中,根据卡片可分别查看次数崩溃率/次数卡顿率/次数OOM率/自定义错误率、设备崩溃率/设备卡顿率/设备OOM率、崩溃次数/卡顿次数/OOM次数/自定义错误次数和影响设备数的趋势,在图的右上方单击进行切换即可。在左上角的应用版本下拉菜单中,选择要对比的版本后,即可查看版本之间的趋势对比。仅支持2个版本之间的对比。

Top5设备型号列表能够帮助您查看当前应用在哪些设备上崩溃率、卡顿率或错误率更高。列表展示占比排名前5的设备型号,列表按百分比进行从低到高排序,百分比取决于单击的上方的数据卡片。百分比数字后分别展示各种设备型下的影响设备数和活跃设备数,单击表上方的影响设备数和活跃设备数进行切换查看。

Top5操作系统列表能够帮助您查看当前应用在哪些操作系统上崩溃率、卡顿率或错误率更高。列表展示占比排名前5的操作系统,列表按百分比进行从低到高排序,百分比取决于单击的上方的数据卡片。百分比数字后分别展示各种操作系统下的影响设备数和活跃设备数,单击表上方的影响设备数和活跃设备数进行切换查看。

版本分布列表能够帮助您查看当前应用在哪些应用版本中崩溃率、卡顿率或错误率更高。列表展示占比排名前5的版本,列表按百分比进行从低到高排序,百分比取决于单击的上方的数据卡片。百分比数字后分别展示各种版本下的影响设备数和活跃设备数,单击表上方的影响设备数和活跃设备数进行切换查看。

Top5渠道列表能够帮助您查看当前应用在哪些渠道(下载应用安装包的应用市场)中崩溃率、卡顿率或错误率更高。列表展示占比排名前5的渠道,列表按百分比进行从低到高排序,百分比取决于单击的上方的数据卡片。百分比数字后分别展示各种渠道下的影响设备数和活跃设备数,单击表上方的影响设备数和活跃设备数进行切换查看。

崩溃/卡顿/异常列表

崩溃列表展示当前应用发生的所有崩溃事件记录。卡顿列表展示当前应用发生的所有卡顿事件记录,包括自定义错误和捕获错误。异常列表展示当前应用发生的所有异常记录。列表展示的内容取决于您所选择的数据卡片。

三个列表按异常message和trace信息聚合数据,展示异常ID、异常问题、App版本、最近上报异常的时间、发生次数/占比(当前类型的异常发生次数/总异常次数)、影响设备数/占比(当前类型的影响设备数/总影响设备数)和状态。单击异常问题列的蓝色文字链接,可钻取至异常详情页面。列表支持根据处理人、标签、异常处理状态、异常堆栈、错误类型、平台类型和异常名称进行查询,卡顿列表支持根据主线程卡顿和ANR进行过滤。在异常问题的下方,单击添加标签按钮,可给当前异常添加标签进行标记,可添加多个。勾选多个问题后,可批量修改处理状态。

为了能快速并准确地定位应用发生崩溃、卡顿和错误的代码位置,基调听云使用符号表文件对应用崩溃、卡顿和错误堆栈进行解析和还原。单击列表右上角的符号表管理即可上传符号表,也支持自动上传符号表。还原效果示例如下:

原堆栈:

还原后堆栈:

说明:只有系统管理员用户可以上传符号表。

具体上传的说明,请参见符号表管理

设备列表

设备列表展示当前设备发生的「OutOfMemoryError」和「内存溢出」两种类型的异常详情数据。

列表展示:异常发生时间、User ID、设备ID、App版本、设备、操作系统和操作。

  • OutOfMemoryError:为Android系统抛出的OOM异常。
  • 内存溢出:为基调听云SDK根据内存阈值占用系统的OOM异常。判断规则连续三个统计周期内超过阈值且本周期内存占比大于等于「上一周期内存占比-0.5」,则判断发生了一次OOM异常。

您可以对列表进行以下操作:

  • 单击查看详情,页面跳转到OOM详情信息页面。

  • 列表支持根据异常类型、设备ID和User ID 进行精确查询,支持模糊搜索。

  • 支持将列表导出为CSV格式。单击列表右上角导出按钮,系统会创建导出任务,展示在导出任务列表中。

    说明:只支持下载10000条数据。

崩溃/卡顿/异常详情

崩溃/卡顿/异常详情展示应用发生的每个异常事件的详细信息,包含异常信息、异常列表、异常趋势图表。

页面头部展示崩溃/卡顿/异常信息,包括发生次数、影响设备数、修复状态。

异常列表标页签:展示每次异常发生的记录。单击一条记录,下方会展示本次异常发生时的上下文信息,也就是终端用户信息,包括设备启动时间、异常发生时间、UserID、设备ID、App版本、操作系统和设备型号。

设备统计页签:展示按设备型号展示崩溃次数(条形图)在各个维度上的变化情况,能够查看该维度下的崩溃次数和影响设备数帮助客户找到崩溃率最高的设备/操作系统及了解哪个设备崩溃发生最多,从而有针对性的进行优化。

异常趋势页签:展示崩溃次数和影像设备数的对比图(条形图),能够查看崩溃次数和影响设备数的趋势情况,从而了解其变化情况。

上下文信息:展示该崩溃事件发生的环境信息,包含:User ID、应用启动时间、异常发生时间、会话时长、DeviceID、应用版本、设备型号、操作系统、地域、运营商、接入方式、设备内存、应用占用内存(百分比)、剩余内存(百分比)、剩余存储空间(百分比)、CPU型号、CPU指令集和UI朝向。

堆栈信息:展示崩溃事件的源头及最终发生崩溃的直接原因(若当前版本未上传符号表文件或符号化失败则会有 提示)。

Binary Images:基础信息,iOS应用特有。仅崩溃和卡顿有该页签。

自定义信息:您可以在基调听云SDK启动后的任意位置添加10条100个字节的自定义信息,例如可以添加真实用户的账号和联系方式。

添加方法:NBSAppAgent.setUserCrashMessage(String key,String value);

系统日志:对于Android SDK,用户可以自定义系统日志,定义之后,崩溃详情页面会新增一个系统日志页签。

**卡顿详情:**卡顿详情比崩溃详情多出火焰图、请求瀑布图、ANR Message和Stack。

**火焰图:**对于卡顿事件,通过卡顿时对主线程不断切片,采集卡顿过程中的 N 个调用栈(默认每隔 100ms 采集一次)信息,并采用火焰图的方式进行汇总展示和综合分析,自动找出出现概率最高的用户代码,进而直接定位用户卡顿的根因。

说明:支持根据一定频率采集主线程调用栈,默认每隔100ms采集一次主线程调用栈。除了主线程调用栈外还会采集CPU占比和内存占用情况。

火焰图的每一列代表一个调用栈,每一个格子代表一个函数。详细的描述如下:

  • 纵轴表示:纵轴代表调用栈的深度,用于表示函数间调用关系:下面的函数是上面函数的父函数。按照调用关系从上到下排列,最上面的格子代表采样时间。格子越长代表在应用卡顿的过程中耗时越长。

  • 横轴表示:火焰图将采集的多个调用栈信息,通过加载时间顺序进行横向排序。

    横轴格子的宽度代表其在采样中出现频率(默认间隔100ms采集一次数据,则出现频率越高表明占用时间越长),所以格子的宽度越大,说明它是导致卡顿根因的可能性就越大。

  • 火焰图格子颜色:后台随机生成。

  • 提示框展示(当鼠标停留在任意火焰图上):

    • 名称:展示当前选择调用栈的完整名称(可自动换行)。

    • 耗时:展示当前选择调用栈的具体用时,该时间为调用次数*采样频率。

    • 次数:展示当前选中调用栈的出现次数。

    • 占比:展示当前选中调用栈在父级上的占比情况。

      说明:占比=子级调用次数/父级调用次数

  • 支持节点搜索,搜索选中后高亮显示对应调用栈。

  • 支持节点过滤,默认将用户节点和系统节点全部高亮展示,支持单击取消不展示。

  • 支持将火焰图上下进行反转,可以从上到下分析或从下到上分析。

  • 支持最大化展示当前火焰图内容。

异常溯源:提供回溯功能,通过卡顿轨迹记录用户动作从而真实反映出当前异常发生前的一系列用户行为,最终还原当前异常发生时的场景。

请求瀑布图:以瀑布图的形式展示各个请求的执行进度,以及异常出现的时间。

ANR Message:ANR 的详情。

Stack:发生ANR时的所有线程堆栈。

OOM详情

OOM详情是当前设备发生OOM异常事件的详情信息,详情页面区分Android和iOS操作系统。

说明:OOM 仅支持Java及OC的代码,包含Android、iOS、HarmonyOS 3.0,Android目前暂不支持非Java实现Hybrid应用。

Android系统

环境信息:User ID、应用启动时间、异常发生时间、会话时长、DeviceID、应用版本、设备型号、操作系统、地域、运营商、接入方式、设备内存、应用占用内存(百分比)、剩余内存(百分比)、剩余存储空间(百分比)、CPU型号、CPU指令集和UI朝向。

持有对象(根因分析):首先查看Retained Heap,如果Retained Heap特别大,而自身的Shallow Heap比较小,说明持有的对象没有及时的释放,此时需要查找响应类中的哪些大的对象没有释放内存,导致GC无法回收内存。

  • Object(对象):格式为「对象Class名+内存地址」或「对象数组+内存地址」。
  • Ref.Objects:对象的持有个数,仅展示Shallow Heap大于256KB的节点。
  • Shallow Heap:对象本身占用内存的大小。
  • Retained Heap:对象被垃圾回收器回收后能被GC从内存中移除的所有对象之和。Retained Heap可以更精确的反映一个对象实际占用的内存的大小。
  • 页面支持跳转到会话详情

内存详情:提供Android设备相关内存详情数据,包含前台内存和后台内存:物理内存、Java使用内存、显存、虚拟内存、Java内存使用率、Java物理内存使用、Native物理内存使用。

iOS系统

环境信息:User ID、应用启动时间、异常发生时间、会话时长、DeviceID、应用版本、设备型号、操作系统、地域、运营商、接入方式、设备内存、应用占用内存(百分比)、剩余内存(百分比)、剩余存储空间(百分比)、剩余电量、CPU指令集、CPU用量和是否越狱。

引用链(根因分析):首先,从对象数量和对象内存分配大小两个角度找到引用链中最可能的那个类别。其次,在Stacks中选中某个调用者并向它的父节点回溯查看引用关系,找到有可能的一条引用路径(可以通过Total和Size来判断当前选中的Stacks出现次数及大小)。最后查看Stacks Trace里内存分配时的调用栈信息,再判断是哪个业务模块发生的问题。

  • Category:内存分配类别(可能为具体的对象名或Malloc分配内存的大小)。
  • Total:类别调用次数。
  • Total Bytes:类别内存分配总大小。
  • Stacks:调用者(可能为一个,也可能为多个)。
  • Stacks Trace:内存分配时调用栈信息。
  • 页面支持跳转到 会话详情

异常详情分享

单击详情页面右上角的按钮,可以将「崩溃」、「卡顿」或「自定义错误」的详情内容生成一条分享链接,您可以将该链接提供给第三方进行数据分析、查看等工作,该链接无需登录即可查看对应内容且永久有效。