APP 性能分析工作台——你的最佳桌面端性能分析助手


 

目前 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 下的性能監控產品。我們通過先進的數據采集與監控技術,為企業提供全鏈路的應用性能監控服務,助力企業提升異常問題排查與解決的效率。

 

👉 點擊這里,了解更多產品信息,還可以免費體驗試用哦~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM