APP 性能分析工作台——你的最佳桌面端性能分析助手
目前 MARS-App 性能分析工作台版本为开发者提供Fastbot桌面版的服务。 旨在帮助开发者们更快、更便捷地开启智能测试之旅,成倍提升稳定性测试的效率。
作者:字节跳动终端技术——王凯
背景
Fastbot 是一款由字节跳动 Quality Lab 团队出品,基于 model-based testing 结合机器学习、强化学习的 App 稳定性测试工具。相比 Android 自带的原生 Monkey 等工具,Fastbot 表现出更好的性能,在相同时间内的 Android Activity 覆盖率和代码覆盖率要远高于其他工具。
![](https://static001.geekbang.org/infoq/9c/9ca57b5b0fa5b98ab824471145d639d7.webp?x-oss-process=image/resize,p_80/format,jpg)
图 1 Fastbot 性能对比图
之前在《奔跑吧!智能 Monkey之Fastbot跨平台》一文,我们曾详细地介绍了 Fastbot 在跨平台方面的设计思路、技术演进及应用。
![](https://static001.geekbang.org/infoq/3e/3e695a6a7371f7d3df79310360217cda.webp?x-oss-process=image/resize,p_80/format,jpg)
图 2 Fastbot 跨平台架构图
目前,Fastbot 已广泛应用于字节客户端类产品的稳定性测试与兼容性测试。每日启动任务数超过 300 次,每日平均发现 5000 个以上的崩溃,并有超过 100 个新捕获的崩溃。借助 Fastbot 的能力,在发版前(主要用在机架测试)就可以修复大部分的 crash,确保线上用户的使用体验。
在 2020 年 12 月,Fastbot 在 Github 上开源后,受到了广大开发者的喜爱,并积极提供的使用反馈,其中两点被反复提及:
1. Android 输出的崩溃以文本形式按时间序存储在 sd 卡中,不方便开发者解析;
2. iOS 没有崩溃的读取支持;
Github 地址
与此同时,在字节跳动内部,我们通过一款内部代号为「Diggo」的桌面端软件,帮助质量测试同学完成 App 的性能测评,给研发同学实现性能问题的归因分析。在打磨、迭代一年多之后,我们决定把它整理、开放出来,为广大的应用开发者和质量测试同学提供服务。
两个团队碰撞后,我们思考为什么不用 Diggo 为 Fastbot 提供一个方便使用的工具环境,或者做一个 Fastbot 的桌面端,为开发者们提供更便捷测试工具呢?MARS-App 性能分析工作台应运而生。
产品介绍
App 性能分析工作台是由火山引擎 MARS-APMPlus 团队打造,是一款 App 性能和稳定性的测试与归因分析的桌面端助手,为开发者提供本地开发调试工具。通过丰富的可视化插件,分析手机中的 App 异常崩溃和性能数据。
目前 MARS-App 性能分析工作台版本为开发者提供 Fastbot 桌面版的服务。并基于 Fastbot 原生功能的基础上,解决了命令行 Fastbot 不方便在本地分析日志的问题,尤其解决了无法在本地对 iOS 崩溃日志进行可视化查询和分析的问题。旨在帮助开发者们更快、更便捷地开启智能测试之旅,成倍提升稳定性测试的效率。
1. 可视化的启动操作
使用过 Fastbot 的用户应该知道:Fastbot 原来的启动方式是通过命令行指定设备、应用以及测试时长等参数。在 MARS-App 性能分析工作台中,我们对原生 Fastbot 进行了封装,开发者可以方便地通过可视化的方式进行设备和 App 的选取,以及参数的编辑。
![](https://static001.geekbang.org/infoq/2b/2b54e126f8dbca1c8906f9d3f60d4a02.webp?x-oss-process=image/resize,p_80/format,jpg)
图 3:软件截图-启动 Fastbot
2. 崩溃日志分析功能
在原来 Fastbot 中,运行结果日志是放在 sd 卡里的 crash-dump.log 文件,不方便开发者进行解析,也没有归类去重等能力。而 App 性能分析工作台新增崩溃日志分析功能,以及解混淆/符号化的能力。当开发者完成 Fastbot 测试后,可以通过「崩溃分析」功能对结果日志进行分析。
![](https://static001.geekbang.org/infoq/0e/0e569a62c24476be6ca6eab11c02f129.webp?x-oss-process=image/resize,p_80/format,jpg)
图 4:软件截图-崩溃分析
技术说明
基础架构
开发桌面版时,我们参考了 Facebook 的 Flipper, 使用 Electron 技术进行了开发。
设备操作
对 Android 的操作是通过 adbkit 实现了对原有 Fastbot 执行所需要的 adb shell 命令的封装。
iOS 设备控制能力无需单独安装依赖工具,如 Appium 所依赖的 imobiledevice 与 ios-deploy 工具,MARS-App 性能分析工作台参考 imobiledevice 独自实现了一个类 ADB 的设备控制工具,实现了即插即用。
![](https://static001.geekbang.org/infoq/f0/f0e8f259adde6ffd4c797efa3ffa189f.webp?x-oss-process=image/resize,p_80/format,jpg)
日志解析
Android 通过对 Fastbot 记录的 logcat 日志进行分析。其中,对 Java 崩溃支持了 retrace 操作和去重操作,去重操作的原理是根据日志的堆栈计算 md5 值,md5 值相同的崩溃日志被认为是重复的。
iOS 日志除了支持平常使用的 ips 崩溃日志,还支持 ResourceBug 与 Jetsam 日志的提取与展现,其中 ips 崩溃日志与 ResourceBug 日志均支持符号解析,解析效果参考 Xcode 的 symbolicatecrash。
特别对于 iOS15,ips 崩溃日志记录格式发生了升级,对于以往的符号解析工具,面临了格式兼容问题,而 App 性能分析工作台完美兼容了新老格式,均支持解析。
且对于部分对包大小有优化的 App,如 TEXT 段迁移优化方案,会导致新格式的 ips 崩溃日志丢失有效的 Binary Image 信息,导致 TEXT 段迁移后的代码无法正常符号化。由于段迁移优化方案在字节全线产品均有使用,故该问题成了不得不解决的问题。MARS-App 性能分析工作台针对该问题也提供相应解决方案,即通过 dsym 逆向还原丢失的 Binary Image 信息,目前在字节系 App 中还原准确度高达 99%。大致方案如下:
offset_max = pc – main_low_pc + vm offset_min = pc – main_high_pc + vm lib_size = addr – vm + size align = int(0x1000) offset = (offset_min / align + 1) * align
结语
目前 MARS-App 性能分析工作台仅支持 Mac 用户安装,预计在 2 月底我们会完成 Windows 的适配,欢迎大家持续关注。
未来,我们会持续提供性能分析的能力;在 2 月底更新的版本中会包含内部版的性能测评工具,提供无侵入免越狱环境下的各项基础指标的测试,4 月底的新版本将会包含性能指标的归因分析能力,敬请期待。
![](https://static001.geekbang.org/infoq/f5/f5afdb515ccdc87b50a903aa3f6c6a99.webp?x-oss-process=image/resize,p_80/format,jpg)
更多产品交流及问题反馈,欢迎添加小助手微信 👏
🔥 火山引擎 APMPlus 应用性能监控是火山引擎应用开发套件 MARS 下的性能监控产品。我们通过先进的数据采集与监控技术,为企业提供全链路的应用性能监控服务,助力企业提升异常问题排查与解决的效率。
👉 点击这里,了解更多产品信息,还可以免费体验试用哦~