目前 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. 【LeetCode】947. Most Stones Removed with Same Row or Column 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 并查集 日期 题目地址:https://leetco ...

  2. centos 各版本下载

    地址: go to http://vault.centos.org/ for packages.

  3. DFT, DHT, DCT, DST

    目录 基本 酉变换 others Fourier-related Transforms DFT DHT DCT 与DFT的联系 DST 与DFT的联系 Gonzalez R. C. and Woods ...

  4. 编写Java程序,实现多线程操作同一个实例变量的操作会引发多线程并发的安全问题。

    查看本章节 查看作业目录 需求说明: 多线程操作同一个实例变量的操作会引发多线程并发的安全问题.现有 3 个线程代表 3 只猴子,对类中的一个整型变量 count(代表花的总数,共 20 朵花)进行操 ...

  5. Storm集群使用DRPC功能Version1.0.1

    在Storm集群上开启DRPC功能, 基于Storm的1.0.1版本, 并且执行简单的例子测试. 1.DRPC概念 DRPC就是分布式远程过程调用. Storm里面引入DRPC主要是利用storm的实 ...

  6. 树形DP总结基础

    概念 应用 例题 最大独立子集 没有上司的晚会 题目描述 分析 树的重心 题目描述 分析 树的直径 概念 题目描述 分析 概念 给定一棵有N个节点的树(通常是无根树,也就是有N-1条无向边),我们可以 ...

  7. 关于MySQL导入数据到elasticsearch的小工具logstash

    logstash核心配置文件pipelines.yml #注:此处的 - 必须顶格写必须!!! - pipeline.id: invitation #下面路径配置的是你同步数据是的字段映射关系 pat ...

  8. 记一次ARM服务器(鲲鹏920)的PXE批量装机遇到的坑

    由于近期项目需要,在对一批华为鲲鹏920的ARM服务器(型号为天宫TG225 B1)进行批量装机的过程中,遇到了各种各样千奇百怪的bug(换个高情商的说法就是遇到了各种各样和x86服务器不一样的地方) ...

  9. 端口状态 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT详解,以及三次握手四次挥手,滑动窗口(整理转发)

    网上查了一下端口状态的资料,我下面总结了一下,自己学习学习: TCP状态转移要点 TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死 ...

  10. spring-data-jpa -hibernate --specificationExecutor

    Specifications动态查询 在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationExecu ...