腾讯移动分析Crash系统实时化演进与实践
2020-02-27 235浏览
- 1.腾讯移动分析Crash系统实 时化建设与实践 李国栋 腾讯大数据高级工程师
- 2.目录 01 02 03 04 行业的 现状与挑战 腾讯移动分 析解决方案 终端 全平台建设 实时与运营 系统建设 什么是PUSH 什么是运营 什么是运营
- 3.体现产品性能和用户满意之间的非 线性关系。 KANO模型 兴奋型 好玩、有亮点 期望型 流畅、好用 基本型 稳定、可用、不闪退 当优化此需求,用户满意度不会提升,当不提供 此需求,用户满意度会大幅降低。 当提供此需求,用户满意度会提升,当不提供此 需求,用户满意度会降低。 当优化此需求,用户满意度不会提升,当不提供 此需求,用户满意度会大幅降低。
- 4.现在的移动App质量情况 60+% 用户遇到过Crash的比例 20+% 20+ 首次启动Crash,选 择立即卸载的比例 70+% 使用过程中,Crash后用 户给应用打差评比例 行业平均Crash率在3%以上!
- 5.面临的挑战 多平台覆盖 iOS Android 游戏引擎 海量实时处理 亿级日流量 实时还原 实时计算 实时告警 智能合并检索 堆栈提取 智能合并 多维检索
- 6.腾讯移动分析Crash系统解决方案 运营平台 终端SDK iOS Cocos2dx Android Unity3d Access:统一接入层 TDBank:消息中间件 实时处理 业务指标 日报系统 离线处理 ESP/ESA TRC Hadoop 监控告警 还原 告警 运营工具 云控系统 复现告警 HDFS 通用存储层 CKV HBase 多维查询 ElasticSearch 符号表管理 统一资源调度平台(虚拟化) CPU GPU 内存 磁盘 网络 数据开放
- 7.解决的问题 不同平台和CPU架构环境下的异 将异常数据实时化处理,第一时间 常数据、堆栈、环境属性、运行 展示给用户,了解产品质量。 参数等数据的完整获取,是后续 定位的基础。 完整 采集 告警 运营 实时 高效 精准 还原 完备的监控告警机制能及时监控App 准确的异常追踪过程、精确到行号 质量的波动,把握质量情况;云控助 的堆栈还原,是还原Crash现场的最 力远程解决问题。 有力数据。
- 8.终端Crash采集平台建设概览 Unity3d Cocos2dx C/C++ Lua C# JS 手游领域定制 Android iOS Java Objective C C/C++ Swift 原生系统 Ø覆盖主流平台和语言 Ø从系统底层到应用层 Ø从通用领域到专业领域定制
- 9.Android C/C++ Crash处理全流程 编译系统 发布 linker 第三方库文 件 二进制.so 文件 运行环境 下载运行 App 带符号信息 的.o文件 MTA SDK 提取符号 表.sym文件 符号表提取 init 上传 还原系统 实时上报 还原 计算入库 signal 初始化 compiler .cpp源文件 crash 可读堆栈 还原工具 tombstone SIGILL SIGABRT SIGBUS SIGFPE SIGSEGV SIGPIPE SIGSTKFLT Dump call stacks Crash Handler Dump CPU Registers
- 10.C/C++ Crash捕获流程 App Application.onCreate java runtime env Toast to user System.load report custom callback JNI NDK runtime env onLoad sigsetjmp setup 记录跳转点 NDK App运行 栈帧空间 jmp point 函数外跳转 sigcontext handler dump build info fingerprint, revision crash happen System runtime env siglongjmp call stacks System dump signal info /proc/pid/cmdline dump mem info /proc/pid/maps unwind frames CPU (armeabi;armeabi-v7a;arm64-v8a;x86;x86_64;mips;mips64) CPU armeabi:r0~r16,sp,lr,pc,cpsr x86:ax,bc,cx,dx,sp,bp,ip,cs,ds,ss,ex arm64-v8a:x0~x30,sp,pc,pstate mips:zr,at,v0,v1,a0-a3,gp,sp,epc,dsp Crash处理 专用栈帧 空间
- 11.全面数据采集—辅助快速定位异常问题 When:时间维度 • 异常时间 • 上报时间 • 运行时长 What:状态维度 单一堆栈到多 维灵活数据, 全面还原现场 • 使用时长 • 内存使用 • 网络状态 • 上下文数据 • 埋点日志 • 页面执行路径 • 线程状态 Who:身份维度 • 厂商机型 Where:位置维度 • 用户账号 Why:归因维度 • 设备ID • 异常堆栈 • 错误描述 • 信号量 • 关联子线程信息 • 组件/模块/页面 • 类/方法/行号
- 12.实时系统建设主题 还原 告警 实时 性能 计算
- 13.实时还原系统建设 数据接入层 TDBank 消息中间件 TRC 实时处理平台 l预处理:流量控制、数据过滤 l堆栈还原:不同平台的符号化堆栈内容 l智能合并:特性提取与归类 l入库:批量入库,实时检索 存储平台 预处理 流量控制 Web管理台 HDFS 分布式文件 REST API Java还原 C/C++还原 智能合并 iOS还原 MySQL 离线存储 CKV 内存存储 HBase 持久存储 处理计算 ElasticSearch 实时多维检索
- 14.iOS符号还原 特性: l不依赖于Mac OS系统 l支持framwork符号还原 l支持Swift语言 l支持Demangle l精准到行号 组成:latosa:符号还原工具llibmacho:解析Mach-O二进制文件llibdwarfline:解析dwarf数据ldemangle:还原swift、C++符号 swift libdwarfline libmacho CXX demangle 自研atosa工具
- 15.iOS行号还原过程 加载地址 dSYM文件 符号表信息 Crash地址 反ASLR地址 编译符号 demangle dwarf数据 最终输出符号 最终结果 源文件:行号 1. dSYM文件内容 2. 解析后地址与文件行号映射关系 地址 文件:行号 000000010000626cFirstViewController.m:290000000100006270FirstViewController.m:360000000100006298FirstViewController.m:37'>FirstViewController.m:37