systrace简介

Android 4.1之后推出的,对系统performance分析工具。主要功能包括了跟踪系统的I/O操作,内核工作队列,CPU负载以及Android各个子系统的运行状况。

在Android平台,它主要分三部分

  • 内核部分 : Systrace利用了Linux Kernel中的ftrace功能。所以,如果要使用systrace的话,必须开启kernel中和ftrace相关的模块。
  • 数据采集:Android定义了一个Trace类。应用程序可利用该类把统计信息输出给ftrace。同时,Android还有一个atrace程序,它可以从ftrace中读取统计信息然后交给数据分析工具来处理。
  • 数据分析工具: 提供了数据采集以及报告生成的工具。

作用

Systrace是用来收集系统和应用的数据信息和一些中间生成数据的细节。

在分析显示的问题上特别有用,例如:分析应用画图慢,丢帧严重,动画变形等过程。

抓取工具

1. Android Device Monitor

此工具,正在本google慢慢废弃,但是其功能还是非常强大的。此工具存在于sdk中的tools目录下monitor脚本。

使用
  1. 再需要排查的方法中注入Trace.begin和Trace.end(),如果不注入只能看表现结果,无法知道具体执行的方法。

  2. 使用monitor选中指定进程执行抓取,方法如下

    Step 1:

    执行tools目录下的monitor,代开monitor工具; 选择指定的进程,点击Capture system wide trace using android systrace

    step 1

    Step 2:

    设置相关参数:

    Trace duration:抓取的时间长度,时间到之后自动结束;

    Trace Buffer Size(kb) : 默认2M,理论上,时间越长,需要的buffer越大

    Enable Application Traces from : 选择要监控的app, 如果没有就选none

    根据需要勾选要展示数据的内容。

    step 2

    Step 3:

    查看生成的报告,直接浏览器查看。

    该报告列出了呈现UI帧并指示沿时间线的每个渲染帧的每个进程。用绿色框架圆圈表示在16.6毫秒内渲染以保持每秒60帧稳定所需的帧。渲染时间超过16.6毫秒的帧用黄色红色框架圆圈表示。

    注意:在运行Android 5.0(API级别21)或更高版本的设备上, UI 渲染的工作是在UI Thread和RenderThread两个线程完成。 在之前的版本中,创建框架的所有工作都是在UI Thread上完成的。

    step 3

    操作快捷键:W 放大; S缩小; A向左移动; B向右移动

    systrace上task的运行状态:
    灰色:Sleeping
    蓝色:Runnable (它可以运行,但是需要等待调度程序唤醒)
    绿色:Running
    橙色:Uninterruptible sleep 由于 I/O 负载而不可中断休眠

    尤其关注Runnable, 很有可能wake by pid xxx , cpu此时被xxx进程抢占着,去看看这个进程是否有什么异常。

使用中可能遇到的问题
  1. Android Device Monitor无法打开,或者白屏,或者无法点击获取焦点

    解决方法: a. 替换最新的官方sdk原始的tools文件夹; b. jdk版本问题,如果是java 8的jdk,将将版本降低至java 8 151之前的版本。

2. 脚本抓取

SDK提供了一套python脚本来抓取trace日志,具体在Android/Sdk/platform-tools/systrace目录下, 具体使用自行Google吧。