博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【分享】如何构建并应用Crash实时统计
阅读量:5995 次
发布时间:2019-06-20

本文共 2307 字,大约阅读时间需要 7 分钟。

研究数据表明,高达62%的用户在使用移动App时遭遇过死机、无反应、闪退等程序崩溃(Crash)。如果Crash发生在首次启动,21%的用户会选择立即卸载App;而如果Crash发生在使用过程中,70%的用户会给App差评。

这个数字是不是高的有点可怕?质量学界有名的KANO模型也证实了这个道理,产品性能和用户满意之间并不总是呈线性关系。

在产品功能的优先级上,我们要优先满足基本型需求,第二是期望型需求,最后才是兴奋型需求。因为如果基本型需求的表现差强人意,用户的不满情绪会急剧增加,甚至粉转黑,即使满足此类需求并不能带来客户满意度的增加。

未满足的基本型需求会带来严重的负面体验

比如一个号称装备双曲面柔性屏、2256万超高像素、充电五分钟通话两小时的完美手机,如果打电话信号非常差、时断时续、通话质量掉渣,想必买了的客户都吵着要退货吧。

而对于一个App来说,用户的基本型需求就是程序稳定可用不闪退

Crash全方位解决方案

针对这个App开发同学的刚需,腾讯移动分析(MTA)将内部打磨多年的Crash分析能力对外输出,合成进阶版Crash分析。本文我们主要分享了Crash分析平台构建的架构,与在Crash实时分析统计的应用中,攻克的技术难点,希望能为更多读者带来裨益。

Crash平台实现了哪些能力

它实现了多平台的Crash数据完全采集,帮助开发者动态监测App在各移动设备的异常情况,且支持按错误类型和应用版本筛选/分析错误, 如果APP发生重大的质量问题,系统将自动告警给相关人员,让相关人员做出相应的应急处理。更重要的是它简化了流程,助力App开发者用“一行代码”拥有“完整Crash分析系统”,为App运行时的崩溃检测和恢复提供有力保障。

具体来讲,MTA提供的 Crash分析解决了四大痛点:

  1. 它实现了多平台的Crash数据完全采集。不同平台和CPU架构环境下的异常数据、堆栈、环境属性、运行参数等数据的完整获取,是后续定位的基础。
  2. 数据的实时高效处理。将异常数据实时化处理,第一时间展示给用户,实时了解产品质量。并且支持按错误类型和应用版本筛选错误。
  3. 堆栈数据的精准还原。准确的异常追踪过程、精确到行号的堆栈还原,是还原Crash现场的最有力数据。
  4. 完善的告警运营体系。Crash分析完备的监控告警机制能及时监控App质量的波动,把握质量情况,甚至能云控助力远程解决问题。

Crash分析系统架构

下图是 Crash分析的全方位解决方案可视化图。

Crash 分析背后的技术攻关

能实现如此牛逼哄哄的功能,背后自然少不了程序员小哥哥们的技术突破,总的来说有二:终端Crash采集多平台建设和海量实时还原系统建设。

1、 终端Crash采集多平台建设

终端数据采集主要分为两个维度,一个是基本平台的建设,即Android和Java与C/C++、iOS的Objective C和Swift;二是专业领域的定制,比如主流的手游引擎Cocos2dx中的C/C++、Lua与JS,以及Unity3d的C#。有了这两个维度平台,基本上能覆盖绝大部分场景。而在众多语言平台上,Android的C/C++异常捕获是最具挑战性的。

一个简单的Crash处理会涉及到至少三个重要环节:一是源代码文件编译时的编译过程,中间会生成符号表和二进制文件;二是用户安装运行时,发生Crash后,整个捕获过程;三是后台对上报的异常堆栈进行堆栈符号还原的过程。

除了堆栈数据,系统还需要更多维度更灵活的数据来辅助定位,诸如时间、状态、身份标识、归因、位置等详细的信息。

2、 海量实时还原系统建设

还原系统主要是用于处理不同平台上报的堆栈,主要有四个部分:预处理,流量控制、数据过滤;堆栈还原,不同平台的符号化堆栈内容;智能合并,特性提取与归类;入库,批量入库,实时检索。

同时MTA自研的iOS符号表还原工具也很强大,它不依赖于Mac OS系统,支持framwork符号还原,支持Swift语言,支持Demangle,还可精准到行号。

通过解析iOS的dSYM文件,我们可以得到符号表和dwarf数据,解析dwarf数据后可以得到解析后地址与文件行号映射关系,最终可对应到Crash地址发生的行号。

堆栈还原后,我们需要做结构化处理以方便提取特征堆栈。分级优化,按App、第三方组件、系统分级,第一次提取最直接相关的,第二次做干扰数据的过滤优化;同时,还要对堆栈的调用链过程做分析。

同时,增量计算模型还有如下功能:单层单节点内计算小段时间(秒级)的增量,定期发送到下一层节点进行汇总;全整数运算:减少字符串处理开销;全内存处理:文件持久化支持,保证端到端的消息可靠传输;智能容灾策略:本地文件备份、双机热备、一致性hash。

除以上两大技术攻关,MTA还有一个亮点功能,那就是一行代码,一个系统。只需要集成简单一行代码,便可拥有Crash分析、自定义事件、分群画像、无埋点等一系列服务,不愧为解放开发者的神器。


那么,当用户秒删App时,他在想什么呢?

暴躁的小A:垃圾软件,毁我青春,废我前程!

淡定的小B:连程序稳定都做不到,怎么实现“改变世界”的小目标呀~
聪明的小C:赶紧接入腾讯MTA来为你的App保驾护航啊!

联系我们:

如果您希望试用或者体验 MTA Crash分析,请访问接入试用。

如果您对该功能有疑问、或者在使用中遇到了困难,欢迎您联系mta官网在线客服,或者发送您的问题邮件至:dtsupport@tencent.com

商务合作或业务咨询,请联系以下邮箱:mta@tencent.com

转载地址:http://khqlx.baihongyu.com/

你可能感兴趣的文章
int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restric mutex)
查看>>
“最大子序列和”算法 java
查看>>
Linux netstat
查看>>
aps.net MVC view 判断方法
查看>>
数学之美读书笔记——搜索引擎的反作弊问题
查看>>
用信号量实现进程互斥示例和解决哲学家就餐问题
查看>>
element-ui el-input只显示下划线
查看>>
如何设计一个单点登录系统(1)?
查看>>
windows 中 到底是用的哪个java.exe??? 删除了PATH变量的Java设置还是可以运行java.exe windows/system32...
查看>>
50070只有本机可以访问(除本机外无法访问)
查看>>
AndroidStudio运行java的main方法
查看>>
logstash retrying failed action with response code: 429
查看>>
XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -...
查看>>
ASP+SQL 文件、目录,文本文件等多种操作类
查看>>
Duwamish深入剖析-结构篇
查看>>
本周ASP.NET英文技术文章推荐[04/22 - 04/28]
查看>>
【自然框架 NatureFramework】 项目结构、命名空间和命名规范
查看>>
(译)如何使用spritehelper和levelhelper教程:引子
查看>>
StringBuffer append整数0001的问题
查看>>
31个方法把你的IQ提高到顶峰,你还在等什么?
查看>>