首发尝鲜!字节开源 Btrace 性能分析工具

4,539 阅读3分钟

概述

RheaTrace (以下简称 btrace ) 是字节跳动技术团队旗下开源的一款性能分析追踪工具,截止到笔者今日写该文时间 2021年12月22日,项目开源推送到 GitHub 仅仅 2 日,虽然开源仅 2 日,但是根据从字节的 Android 研发同学获悉到,字节内部已经有多款 APP 正在使用。下文列出 GitHub 和和介绍文章。

GitHub

介绍文章

GitHub介绍

实现

根据 介绍文章 以及进行初步的接入体验,用一句话来概括 :btrace 是以 Android Systace 为基石通过对 systrace 进行二次开发、封装(含 systrace 命令封装),结合了 Android 字节码插桩技术、Gradle 插件、Python 等多样性的技术结合推出的性能分析工具,并且 btrace 在文件的 IO 写出效率以及 output 输出的 trace 文件可视化做了很大的努力。

当然项目使用的语言很多,受限于个人的认知可能没有概括完全的地方。

反编译查看全量插桩:

我将演示的工程进行了反编译,通过下图我们可以看出 btrace 确实对方法进行了全量插桩

Systace

对于 Btrace ,Systrace 是关键。

Systrace的原理:它的思想很朴素,在系统的一些关键链路(比如System Service,虚拟机,Binder驱动)插入一些信息(我这里称之为Label),通过Label的开始和结束来确定某个核心过程的执行时间,然后把这些Label信息收集起来得到系统关键路径的运行时间信息,进而得到整个系统的运行性能信息。Android Framework里面一些重要的模块都插入了Label信息(Java层的通过android.os.Trace类完成,native层通过ATrace宏完成),用户App中可以添加自定义的Label,这样就组成了一个完成的性能分析系统。

使用案例:

Btrace 对 Systrace的概述

使用

(直接以 btrace 工程为例) 省略 gradle 以及 Python 脚本配置,如果在自己的工程中使用请配置上述两项

环境准备

Python 2.7

配置完毕后可通过终端执行 Python 查下 Python 版本

systrace 环境变量配置

配置到 ~/.bash_profile

export PATH=${PATH}:/Users/macbook/Library/Android/sdk/platform-tools/systrace

配置完毕后可执行 source ./~bash_profile 立即生效,如果该项配置有问题。执行后续 systrace 命令时会报

验证配置

工程根路径下 /scripts/python/rheatrace 执行:

获取输出文件

Run 起来工程以后执行:

python rheatrace.py -a rhea.sample.android -t 5 -o ./output/mynewtrace.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res

将产生的 HTML 文件通过 ui.perfetto.dev/ 去打开。

查到对应进程进行图表查看(查询命令如上)

样例编写分析

我尝试改造演示 demo 在 FirstFragment#onViewCreated()加入一个 3000 的主线程休眠,我们重新生成 trace 文件,再来查看主进程:

image.png 清晰能查看到成功抓取到了这 3000ms 耗时

以上只是基础用法,btrace 以及 systrace 还有大量的命令以及如何对图表进行分析才是排查问题的关键。

不足

线上

从 btrace 了解到,目前不支持线上生成环境使用和开启 btrace,全量插桩带来的性能损耗在 10% 以下

本地环境依赖

需要依赖本地环境 ,例如 python systrace

环境支持

目前仅支持 Mac 环境

不足解决

btrace 在 GitHub 上提到有计划将目前存在的不足之处在后续的版本迭代中持续解决。

image.png

支持

目前 btrace 的技术支持可以通过 QQ群以及到 GitHub 上提交 issue ,回复都相当快。

  1. Communicate on GitHub issues.
  2. Study the source code.
  3. Check wiki or FAQ for help.
  4. Contact us kisson_cjw@hotmail.com.
  5. Join QQ group chat.

参考文章

github.com/bytedance/b…

blog.csdn.net/qq_19986309…

zhuanlan.zhihu.com/p/27331842

www.jianshu.com/p/ab22238a9…