目前 MARS-App 性能分析工作台版本为开发者提供Fastbot桌面版的服务。 旨在帮助开发者们更快、更便捷地开启智能测试之旅,成倍提升稳定性测试的效率。

作者:字节跳动终端技术——王凯

背景

Fastbot 是一款由字节跳动 Quality Lab 团队出品,基于 model-based testing 结合机器学习、强化学习的 App 稳定性测试工具。相比 Android 自带的原生 Monkey 等工具,Fastbot 表现出更好的性能,在相同时间内的 Android Activity 覆盖率和代码覆盖率要远高于其他工具。

图 1  Fastbot 性能对比图

之前在《奔跑吧!智能 Monkey之Fastbot跨平台》一文,我们曾详细地介绍了 Fastbot 在跨平台方面的设计思路、技术演进及应用。

图 2  Fastbot 跨平台架构图

目前,Fastbot 已广泛应用于字节客户端类产品的稳定性测试与兼容性测试。每日启动任务数超过 300 次,每日平均发现 5000 个以上的崩溃,并有超过 100 个新捕获的崩溃。借助 Fastbot 的能力,在发版前(主要用在机架测试)就可以修复大部分的 crash,确保线上用户的使用体验。

在 2020 年 12 月,Fastbot 在 Github 上开源后,受到了广大开发者的喜爱,并积极提供的使用反馈,其中两点被反复提及:

1. Android 输出的崩溃以文本形式按时间序存储在 sd 卡中,不方便开发者解析;

2. iOS 没有崩溃的读取支持;

Github 地址

Android:https://github.com/bytedance/Fastbot_Android

iOS:https://github.com/bytedance/Fastbot_ios

与此同时,在字节跳动内部,我们通过一款内部代号为「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 的选取,以及参数的编辑。

图 3:软件截图-启动 Fastbot

2. 崩溃日志分析功能

在原来 Fastbot 中,运行结果日志是放在 sd 卡里的 crash-dump.log 文件,不方便开发者进行解析,也没有归类去重等能力。而 App 性能分析工作台新增崩溃日志分析功能,以及解混淆/符号化的能力。当开发者完成 Fastbot 测试后,可以通过「崩溃分析」功能对结果日志进行分析。

图 4:软件截图-崩溃分析

技术说明

基础架构

开发桌面版时,我们参考了 Facebook 的 Flipper, 使用 Electron 技术进行了开发。

设备操作

对 Android 的操作是通过 adbkit 实现了对原有 Fastbot 执行所需要的 adb shell 命令的封装。

iOS 设备控制能力无需单独安装依赖工具,如 Appium 所依赖的 imobiledevice 与 ios-deploy 工具,MARS-App 性能分析工作台参考 imobiledevice 独自实现了一个类 ADB 的设备控制工具,实现了即插即用。

日志解析

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 月底的新版本将会包含性能指标的归因分析能力,敬请期待。

更多产品交流及问题反馈,欢迎添加小助手微信


火山引擎 APMPlus 应用性能监控是火山引擎应用开发套件 MARS 下的性能监控产品。我们通过先进的数据采集与监控技术,为企业提供全链路的应用性能监控服务,助力企业提升异常问题排查与解决的效率。

点击这里,了解更多产品信息,还可以免费体验试用哦~

APP 性能分析工作台——你的最佳桌面端性能分析助手的更多相关文章

  1. android app性能优化大汇总(google官方Android性能优化典范 - 第1季)

    大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能.从设计师的角度,他们希望App能够有更多的动画,图片等时尚元素来实现流畅的用户体验.但是Android系统很有可能无法及时完成那些复杂的界 ...

  2. MySQL性能优化的21个最佳实践

    http://www.searchdatabase.com.cn/showcontent_38045.htm MySQL性能优化的21个最佳实践 1. 为查询缓存优化你的查询 大多数的MySQL服务器 ...

  3. Bug预防体系(上千bug分析后总结的最佳实践)

    Bug预防体系(上千bug分析后总结的最佳实践) 原创 2017-08-16俞美玲 光荣之路 吴老的<selenium webdriver 实战宝典>出版了!  web常见产品问题及预防 ...

  4. Windows五种IO模型性能分析和Linux五种IO模型性能分析

    Windows五种IO模型性能分析和Linux五种IO模型性能分析 http://blog.csdn.net/jay900323/article/details/18141217 http://blo ...

  5. ySQL性能优化的21个最佳实践 和 mysql使用索引

    MySQL性能优化的21个最佳实践 和 mysql使用索引 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 ...

  6. web服务器、app(应用)服务器、DB后端性能瓶颈和分析

    性能测试day07_性能瓶颈和分析 https://www.cnblogs.com/leixiaobai/p/9463748.html 其实如果之前都做的很到位的话,那么再加上APM工具(dynaTr ...

  7. Mysql数据库调优和性能优化的21条最佳实践

    Mysql数据库调优和性能优化的21条最佳实践 1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响.MySQL是目前使用最多的开 ...

  8. paip.前端加载时间分析之道优化最佳实践

    paip.前端加载时间分析之道优化最佳实践 1.另存为 ,查看文件尺寸..和图片. 2.view the 另存为的htm静态的文件单个的加载,看时间...可以排除编程语言的问题and 数据库.. ## ...

  9. PLSQL_性能优化系列14_Oracle High Water Level高水位分析

    2014-10-04 Created By BaoXinjian 一.摘要 PLSQL_性能优化系列14_Oracle High Water Level高水位分析 高水位线好比水库中储水的水位线,用于 ...

随机推荐

  1. Android 控件使用教程(一)—— ListView 展示图片

    起因 最近在看一些开源项目时,经常看到了RecyclerView,这是安卓5.0推出的一个新的控件,可以代替传统的ListView,已经这么久了还没有用过,所以决定试一试.另外在做这个的工程中看到了另 ...

  2. 【LeetCode】604. Design Compressed String Iterator 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 维护当前字符和次数 日期 题目地址:https://l ...

  3. 【九度OJ】题目1113:二叉树 解题报告

    [九度OJ]题目1113:二叉树 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1113 题目描述: 如上所示,由正整数1,2,3-- ...

  4. 【LeetCode】537. Complex Number Multiplication 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 日期 题目地址:https://leetcode.com/pr ...

  5. 【LeetCode】62. Unique Paths 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/unique-pa ...

  6. 【LeetCode】503. Next Greater Element II 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力解法 单调递减栈 日期 题目地址:https:/ ...

  7. 湫湫系列故事——消灭兔子(hdu4544)

    湫湫系列故事--消灭兔子 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  8. Redis -使用 Bitmap

    redis数据类型 String.Set.Zset.List.hash       Bitmap . 四种统计类型: 二值状态统计: 聚合统计: 排序统计: 基数统计 二值状态统计: 就是集合中的元素 ...

  9. <学习opencv>图像变换

    拉伸.收缩.扭曲和旋转 统一调整大小 我们经常会遇到一些我们希望转换为其他尺寸的图像. 我们可能想要扩大或缩小图像; 这两项任务都是由同一个功能完成的. cv::resize() 该cv::resiz ...

  10. CSS基础 装饰 元素本身隐藏和显示效果及案例

    1.visibility:hidden; 2.display: none: 区别: 1.visibility:hidden 隐藏元素本身,且在网页中 占位置 2.display:none; 隐藏元素本 ...