转 http://maoao530.github.io/2017/02/06/systrace/

理解和使用systrace。

一、介绍systrace

systrace是Android4.1版本之后推出的,对系统Performance分析的工具。

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目录/sdk/platform-tools/systrace中,其内部将调用atrace程序)用来配置数据采集的方式(如采集数据的标签、输出文件名等)和收集ftrace统计数据并生成一个结果网页文件供用户查看。

二、抓取systrace

有三种方式抓取systrace:

2.1 systrace.py工具

命令行的用法是:

1
python systrace.py [options] [category1] [category2] ... [categoryN]

需要装python,最好是2.7版本,避免出现问题,示例如下:

1
2
cd android-sdk/platform-tools/systrace
python systrace.py --time=10 -o mynewtrace.html sched gfx view wm

2.1.1 options

其中options可取值:

options 描述
-o < FILE > 输出的目标文件
-t N, –time=N 执行时间,默认5s
-b N, –buf-size=N buffer大小(单位kB),用于限制trace总大小,默认无上限
-k < KFUNCS >,–ktrace=< KFUNCS > 追踪kernel函数,用逗号分隔
-a < APP_NAME >,–app=< APP_NAME > 追踪应用包名,用逗号分隔
–from-file=< FROM_FILE > 从文件中创建互动的systrace
-e < DEVICE_SERIAL >,–serial=< DEVICE_SERIAL > 指定设备
-l, –list-categories 列举可用的tags

2.1.2 category

其中category可取值:

category 描述
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
app Application
res Resource Loading
dalvik Dalvik VM
rs RenderScript
bionic Bionic C Library
power Power Management
sched CPU Scheduling
irq IRQ Events
freq CPU Frequency
idle CPU Idle
disk Disk I/O
mmc eMMC commands
load CPU Load
sync Synchronization
workq Kernel Workqueues
memreclaim Kernel Memory Reclaim
regulators Voltage and Current Regulators

2.2 Device Monitor(DDMS)

可以使用Eclipse或者Android Studio集成开发工具,切换到DDMS,点击devices,点击Systrace按钮:

补充说明:

  • Destionation file :trace输出的文件路径
  • Trace duration : 配置抓取systrace的时间,通常设置5秒,并在5秒内重现问题,时间太短会导致问题重现时没有被抓到,时间太长会导致Java Heap不够而无法保存,因此在能抓到问题点的情况下,时间越小越好。
  • Trace Buffer Size : Buffer Size是存储systrace的size,同样的,太小会导致信息丢失,时间太长会导致Java Heap不够而无法保存,建议20480。
  • Enable Application Traces from :如果用户有自己在应用程序中加入自己的systrace log:
    Trace.beginSection("newInstance"); Trace.endSection();
    那么此处必须选择这个应用对应的进程名字,否则新加的systrace log不会被抓到。

三、自定义systrace

有时候为了debug方便,那么我们需要自己在apk或者framework层添加trace信息:

3.1 app层

app可以使用:

1
2
3
import android.os.Trace;
Trace.beginSection(String sectionName)
Trace.EndSection()

然后通过python systrace.py --app=sectionName 指定apk,或者通过ddms选择指定apk,抓取systrace分析。

3.2 Java framework层

Java Framework可以使用:

1
2
3
import android.os.Trace;
Trace.traceBegin(long traceTag, String methodName)
Trace.traceEnd(long traceTag)

抓取systrace分析。

3.3 Native framework层

Native Framework可以使用:最好在函数开头声明定义

1
2
#include <cutils/trace.h>
ATRACE_CALL()

抓取systrace分析。

四、分析systrace

Google Chrome浏览器可以打开systrace,如果打不开,可以通过chrome://tracing/,然后load systrace。

以分析UI Performance为例:

4.1 Frame

每个应用都有一行专门显示frame,每一帧就显示为圆圈,正常绘制是1秒60帧,大约一帧16.6毫秒,在这个值以下是正常颜色绿色,如果超过它就会变成红色、黄色。非绿色的都说明有问题。这时需要通过’w’键放大那一帧,然后按‘m’键高亮,进一步分析问题。

对于Android 5.0(API level 21)或者更高的设备,该问题主要聚焦在UI ThreadRender Thread这两个线程当中。对于更早的版本,则所有工作在UI Thread

4.2 Alerts

Systrace能自动分析trace中的事件,并能自动高亮性能问题作为一个Alerts,建议调试人员下一步该怎么做。

比如对于丢帧是,点击黄色或红色的Frames圆点便会有相关的提示信息;另外,在systrace的最右上方,有一个Alerts tab可以展开,这里记录着所有的的警告提示信息。

五、快捷操作

5.1 导航操作

导航操作 作用
w 放大,[+shift]速度更快
s 缩小,[+shift]速度更快
a 左移,[+shift]速度更快
d 右移,[+shift]速度更快

5.2 快捷操作

常用操作 作用
f 放大当前选定区域
m 标记当前选定区域
v 高亮VSync
g 切换是否显示60hz的网格线
0 恢复trace到初始态,这里是数字0而非字母o
一般操作 作用
h 切换是否显示详情
/ 搜索关键字
enter 显示搜索结果,可通过← →定位搜索结果
` 显示/隐藏脚本控制台
? 显示帮助功能

对于脚本控制台,除了能当做记事本的功能,目前还不清楚有啥功能,或许还在开发中。

5.3 模式切换

  • Select mode: 双击已选定区能将所有相同的块高亮选中;(对应数字1)
  • Pan mode: 拖动平移视图(对应数字2)
  • Zoom mode:通过上/下拖动鼠标来实现放大/缩小功能;(对应数字3)
  • Timing mode:拖动来创建或移除时间窗口线。(对应数字4)

可通过按数字1~4,用于切换鼠标模式; 另外,按住alt键,再滚动鼠标滚轮能实现放大/缩小功能。

Reference:

  • https://developer.android.com/studio/profile/systrace-commandline.html
  • https://developer.android.com/studio/profile/systrace.html
  • http://gityuan.com/2016/01/17/systrace/

systrace的使用相关推荐

  1. 理解和使用systrace

    理解和使用systrace. 一.介绍systrace systrace是Android4.1版本之后推出的,对系统Performance分析的工具. systrace的功能包括跟踪系统的I/O操作. ...

  2. Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)...

    此篇将重点介绍几种常用的Android性能分析工具: 一.Logcat 日志 选取Tag=ActivityManager,可以粗略地知道界面Displaying的时间消耗.当我们打开一个Activit ...

  3. systrace html空白,Android性能优化之Systrace工具介绍(一) _ Systrace生成的trace.html打开空白或者打不开的解决办法...

    1.必须用Chrome打开 2.在mac电脑上,可能Chrome打开也是空白,解决办法是:在chrome地址栏中输入"chrome:tracing",然后点击load按钮load你 ...

  4. TraceView(profile) and Systrace

    TraceView(profile) 代码里面 拖到AS ----------------------------------------------------------------------- ...

  5. Systrace的用法小结

    通过SysTrace可以帮助我们分析性能问题,包含方法的耗时时长.CPU的使用情况.ANR.布局情况等:相比性能工具TraceView,主要用来分析每个方法的执行时间,对于冷启动而言,想抓trace只 ...

  6. 如何抓取Camera systrace

    如何抓取Camera systrace 在分析camera performance issues时,需要抓取systrace给来定位问题. 由于平台有设置property来控制一些trace tag的 ...

  7. Chrome查看Android的systrace抓取的log

    1.在Chrome浏览器输入:chrome://tracing 2.将systrace抓取的文件拖进去即可

  8. Mac使用systrace/monitor/adb等工具

    1.Android monitor # cd android-sdks/tools # ./monitor&2.Android SDK Manager # ./android3.fastboo ...

  9. Android:通过systrace进行性能分析及使用-详细

    Android:通过systrace进行性能分析 https://www.cnblogs.com/blogs-of-lxl/p/10926824.html 一.Systrace 简介 Systrace ...

  10. btrace 开源!基于 Systrace 高性能 Trace 工具

    介绍 btrace(又名 RheaTrace) 是抖音基础技术团队自研的一款高性能 Android Trace 工具,它基于 Systrace 实现,并针对 Systrace 不足之处加以改进,核心改 ...

最新文章

  1. linux文件夹加密访问,技术|Linux系统上用encfs创建和管理加密文件夹
  2. 学python心得体会1000字-Python学习心得体会总结,不要采坑
  3. 成功解决ModuleNotFoundError: No module named 'urllib2'
  4. GAN——UNIT简单梳理
  5. 安卓--L2T虚拟连接
  6. UVA 11136——Hoax or what
  7. 计算ln_钢筋工程算量培训-钢筋工程量计算公式
  8. C/C++认识标准win32应用程序
  9. kaggle实战—泰坦尼克(二、数据清洗及特征处理)
  10. zookeeper3.4.5集群安装
  11. 华为交换机几种端口属性
  12. QGIS导入postgresql数据库shp数据
  13. 最值得收藏的 考研线性代数 全部知识点思维导图整理(张宇, 汤家凤), 附带惯用思维/做题技巧/易错点整理
  14. 计算机无法识别外接光驱,【win7无法识别光驱怎么办】win7外置光驱无法识别
  15. 高频面试之Eureka
  16. 百度竞价推广之关键词的选择策略
  17. windows IIS+php配置教程
  18. Django创建超级管理员用户步骤
  19. PyMOL免费下载及安装教程【Win版】
  20. c语言日历程序 带农历,一个完整的日历程序(含有农历)

热门文章

  1. Kvaser Memorator数据记录仪通过KVmlib配置和读取SD卡
  2. PLSQL官网下载地址
  3. java怎么解析json_基于java解析JSON的三种方式详解
  4. 【CPRI】(3)帧格式详解(重点)
  5. cad导入进max线会乱_AutoCAD导入3dmax显示错乱(z轴归零).doc
  6. 调用百度地图API实现连线高铁线路的调用示例
  7. 5--残差网络(ResNet)
  8. 计算机软件设计费计算标准,水利工程咨询、勘测设计费收费标准及计算程序
  9. HUAWEI AC+AP设备配置
  10. 【技术】H5网页调用手机摄像头扫码