Systrace1 简介

一 概述

本文是 Systrace 系列文章的第一篇,主要是对 Systrace 进行简单介绍,介绍其简单使用方法;如何去看 Systrace;如何结合其他工具对 Systrace 中的现象进行分析。

本系列的目的是通过 Systrace 这个工具,从另外一个角度来看待 Android 系统整体的运行,同时也从另外一个角度来对 Framework 进行学习。也许你看了很多讲 Framework 的文章,但是总是记不住代码,或者不清楚其运行的流程,也许从 Systrace 这个图形化的角度,你可以理解的更深入一些。

二 Systrace 是什么?

Systrace 是 Android 4.1 中新增的性能数据采样和分析工具。它可帮助开发者收集 Android 关键子系统(如 SurfaceFlinger / SystemServer / Kernel / Input / Display 等 Framework 部分关键模块、服务,View 系统等)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。

Systrace 的功能包括跟踪系统的 I/O 操作、内核工作队列、CPU 负载以及 Android 各个子系统的运行状况等。在 Android 平台中,它主要由3部分组成:

  • 内核部分:Systrace 利用了 Linux Kernel 中的 ftrace 功能。所以,如果要使用 Systrace 的话,必须开启 kernel 中和 ftrace 相关的模块。
  • 数据采集部分:Android 定义了一个 Trace 类。应用程序可利用该类把统计信息输出给ftrace。同时,Android 还有一个 atrace 程序,它可以从 ftrace 中读取统计信息然后交给数据分析工具来处理。
  • 数据分析工具:Android 提供一个 systrace.py( python 脚本文件,位于 Android SDK目录/platform-tools/systrace 中,其内部将调用 atrace 程序)用来配置数据采集的方式(如采集数据的标签、输出文件名等)和收集 ftrace 统计数据并生成一个结果网页文件供用户查看。 从本质上说,Systrace 是对 Linux Kernel中 ftrace 的封装。应用进程需要利用 Android 提供的 Trace 类来使用 Systrace。

三 Systrace 怎么用?

3.1 Systrace 简单使用

使用 Systrace 前,要先了解一下 Systrace 在各个平台上的使用方法,鉴于大家使用Eclipse 和 Android Studio 的居多,所以直接摘抄官网关于这个的使用方法,不过不管是什么工具,流程是一样的:

  • 手机准备好你要进行抓取的界面
  • 点击开始抓取(命令行的话就是开始执行命令)
  • 手机上开始操作(不要太长时间)
  • 设定好的时间到了之后,会将生成 Trace.html 文件,使用 Chrome 将这个文件打开进行分析

一般抓到的 Systrace 文件如下:
在这里插入图片描述

3.2 使用命令行工具抓取 Systrace

命令行形式比较灵活,速度也比较快,一次性配置好之后,以后再使用的时候就会很快就出结果(强烈推荐)。

Systrace 工具在 Android-SDK 目录下的 platform-tools 里面,下面是简单的使用方法:

$ cd android-sdk/platform-tools/systrace
$ python systrace.py

可以在 Bash 中配置好对应的路径和 Alias,使用起来还是很快速的。另外 User 版本所抓的 Systrce 文件所包含的信息,是比 eng 版本或者 Userdebug 版本要少的,建议使用 Userdebug 版本的机器来进行 debug,这样既保证了性能,又能有比较详细的输出结果.

抓取结束后,会生成对应的 Trace.html 文件,注意这个文件只能被 Chrome 打开。关于如何分析 Trace 文件,我们下面的章节会讲。不论使用那种工具,在抓取之前都可以选择参数,下面说一下这些参数的意思:

  • -h, –help Show the help message.(帮助)

  • -o Write the HTML trace report to the specified file.(即输出文件名,)

  • -t N, –time=N Trace activity for N seconds. The default value is 5 seconds. (Trace抓取的时间,一般是 : -t 8)

  • -b N, –buf-size=N Use a trace buffer size of N kilobytes. This option lets you limit the total size of the data collected during a trace.

  • -k

  • —ktrace= Trace the activity of specific kernel functions, specified in a comma-separated list

  • -l, –list-categories List the available tracing category tags. The available tags are(下面的参数不用翻译了估计大家也看得懂,贴官方的解释也会比较权威,后面分析的时候我们会看到这些参数的作业的):

  • gfx - Graphics

  • input - Input

  • view - View

  • webview - WebView

  • wm - Window Manager

  • am - Activity Manager

  • audio - Audio

  • video - Video

  • camera - Camera

  • hal - Hardware Modules

  • res - Resource Loading

  • dalvik - Dalvik VM

  • rs - RenderScript

  • sched - CPU Scheduling

  • freq - CPU Frequency

  • membus - Memory Bus Utilization

  • idle - CPU Idle

  • disk - Disk input and output

  • load - CPU Load

  • sync - Synchronization Manager

  • workq - Kernel Workqueues Note: Some trace categories are not supported on all devices. Tip: If you want to see the names of tasks in the trace output, you must include the sched category in your command parameters.

  • -a

  • —app= Enable tracing for applications, specified as a comma-separated list of package names. The apps must contain tracing instrumentation calls from the Trace class. For more information, see Analyzing Display and Performance.

  • —link-assets Link to the original CSS or JavaScript resources instead of embedding them in the HTML trace report.

  • —from-file= Create the interactive Systrace report from a file, instead of running a live trace.

  • —asset-dir= Specify a directory for the trace report assets. This option is useful for maintaining a single set of assets for multiple Systrace reports.

  • -e

  • —serial= Conduct the trace on a specific connected device, identified by its device serial number.
    上面的参数虽然比较多,但使用工具的时候不需考虑这么多,在对应的项目前打钩即可,命令行的时候才会去手动加参数:

我们一般会把这个命令配置成 Alias,配置如下:

alias st-start='python /sdk/platform-tools/systrace/systrace.py'  
alias st-start-gfx-trace = ‘st-start -t 8 gfx input view sched 
freq wm am hwui workq res dalvik sync disk load perf hal rs idle mmc’

这样在使用的时候,可以直接敲 st-start 即可,当然为了区分和保持各个文件,还需要加上 -o xxx.html .上面的命令和参数不必一次就理解,只需要记住如何简单使用即可,在分析的过程中,这些东西都会慢慢熟悉的。

一般来说比较常用的是:

-o : 指示输出文件的路径和名字
-t : 抓取时间(最新版本可以不用指定, 按 Enter 即可结束)
-b : 指定 buffer 大小 (一般情况下,默认的 Buffer 是够用的,如果你要抓很长的 Trae , 那么建议调大 Buffer )
-a : 指定 app 包名 (如果要 Debug 自定义的 Trace 点, 记得要加这个)

四 查看支持的 TAG

Systrace 默认支持的 TAG,可以通过下面的命令来进行抓取,不同厂商的机器可能有不同的配置,在使用的时候可以根据自己的需求来进行选择和配置,TAG 选的少的话,Trace 文件的体积也会相应的变小,但是抓取的内容也会相应变少。Trace 文件大小会影响其在 Chrome 中打开后的操作性能,所以这个需要自己取舍

$ adb shell atrace --list_categories
         gfx - Graphics
       input - Input
        view - View System
     webview - WebView
          wm - Window Manager
          am - Activity Manager
          sm - Sync Manager
       audio - Audio
       video - Video
      camera - Camera
         hal - Hardware Modules
         res - Resource Loading
      dalvik - Dalvik VM
          rs - RenderScript
      bionic - Bionic C Library
       power - Power Management
          pm - Package Manager
          ss - System Server
    database - Database
     network - Network
         adb - ADB
    vibrator - Vibrator
        aidl - AIDL calls
       nnapi - NNAPI
         rro - Runtime Resource Overlay
  core_services - Core services
         pdx - PDX services
       sched - CPU Scheduling
        freq - CPU Frequency
        idle - CPU Idle
        disk - Disk I/O
        sync - Synchronization
  memreclaim - Kernel Memory Reclaim
  binder_driver - Binder Kernel driver
  binder_lock - Binder global lock trace
      memory - Memory
        freq - CPU Frequency and System Clock (HAL)
         gfx - Graphics (HAL)
         ion - ION Allocation (HAL)
       sched - CPU Scheduling and Trustzone (HAL)

(完)

### 如何使用 Android Systrace 进行性能分析 #### 工具简介 Systrace 是一种平台提供的旧版命令行工具,能够记录短时间内的设备活动并将其保存到压缩的文本文件中[^3]。通过生成的报告,可以汇总来自 Android 内核的数据,例如 CPU 调度程序、磁盘活动以及应用线程的信息。 对于运行 Android 10 或更高版本的设备,推荐使用 Perfetto 替代 Systrace,因为 Perfetto 提供更强大的功能和更高的灵活性。然而,在某些情况下,尤其是针对较老版本的 Android 设备,Systrace 仍然是一个有效的选择。 --- #### 安装与配置 要使用 Systrace,首先需要确保已安装 Python 和 Android SDK 平台工具。Systrate 工具通常位于 `AndroidSDK/platform-tools/systrace` 文件夹下[^4]。如果未找到此路径,则可以通过更新 Android SDK 来获取最新版本的工具。 --- #### 收集 Trace 数据 以下是收集 Systrace 数据的主要步骤: 1. **启动 ADB** 确保目标设备连接成功并通过 USB 授权调试模式。执行以下命令验证连接状态: ```bash adb devices ``` 2. **运行 Systrace 命令** 执行以下命令来捕获跟踪数据(假设工具存储在默认目录): ```bash python $ANDROID_HOME/platform-tools/systrace/systrace.py --time=10 -o trace.html sched freq idle am wm gfx view input hal camera audio video rs bluetooth power workq sync app window sf dm ab dpkg dalvik hal hwui compositor inputflinger media crypto keymaster ``` 上述命令将捕获指定类别下的系统行为,并持续 10 秒的时间[^5]。 3. **调整参数** 如果仅关注特定方面(如 CPU 频率),则可以选择性地减少追踪类别的数量以优化资源消耗。 --- #### 查看与分析 Trace 报告 完成数据采集后,双击生成的 HTML 文件即可在浏览器中打开可视化报告。报告主要由以下几个部分组成: 1. **CPU 活动** 显示各个核心的工作负载及时钟频率变化情况。展开视图可以帮助定位高耗能的任务或瓶颈所在。 2. **用户交互** 记录触摸屏输入及其他外部事件的发生时刻及其处理过程。 3. **显示帧** 展现渲染管线的状态,帮助发现掉帧现象的原因。 4. **系统事件** 列出了内核调度决策以及其他低级别操作细节。 利用键盘快捷键导航至感兴趣区域进一步探索潜在问题点。 --- #### 解读常见指标 当评估应用程序表现时,应重点关注以下几项关键指标: - **主线程阻塞 (Main Thread Blocking)** 主线程长时间处于等待状态可能表明存在同步锁竞争或者 I/O 密集型任务被放置于错误上下文中。 - **过度绘制 (Overdraw)** 多次重绘同一像素会浪费 GPU 时间;因此应当尽量降低复杂布局层次结构带来的影响。 - **GC 活跃程度 (Garbage Collection Activity)** 频繁触发垃圾回收意味着内存分配策略有待改进。 --- #### 结合其他工具增强效果 尽管 Systrace 功能强大,但它并不能单独解决所有类型的性能挑战。配合使用如下附加组件往往可以获得更好的结果: - **Perfetto**: 对于现代设备而言,其丰富的特性使其成为首选方案[^1]。 - **Traceview/Method Tracing**: 更加专注于方法调用栈层面剖析。 - **Memory Profiler & Network Profiler**: 分别监控堆动态变化趋势及网络请求效率。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值