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