• 背景

1、什么是systrace?

Systrace是Android4.1引入的性能分析工具。利用ftrace,在系统关键位置都有埋点,主要用于分析系统调用耗时问题,可以自定义trace标签来细化调用栈

2 、为什么要用systrace,像腾讯的PerfDog不香吗?

原因有以下几点:

  • PerfDog这种软件能直观的查看CPU、GPU、内存等数据,比较适合用来做内存泄漏分析或者帧率的测试,但是对CPU具体使用情况是无法细化的,而systrace可以查看手机全部CPU每时每刻的占用情况,从而发现哪些时刻的CPU比较空闲或者太忙碌
  • 想象一下,如果你要排查项目中主线程耗时情况,你会怎么做呢?可选的方法是可以写个基于asm的插件来为每个方法进行插桩,不过这样一方面需要额外的人力消耗,另一方面不够直观,因为你最多只能发现耗时点,但是不知道当时的环境以及其他相关耗时。这时候systrace就有优势了,它可以直观的展示出比较耗时的方法以及里面的相关调用,而且也不需要你额外编写什么插件,最好的方式是systrace与插桩的结合,这样能快速定位问题
  • 具体使用

  • systrace命令

systrace_path=“/xxx/Android/sdk/platform-tools/systrace/systrace.py" python $systrace_path -a “com.test.myapplication” -o trace.html gfx input view wm am dalvik

说明:systrace是Android SDK自带的工具,位置就是systrace_path定义的目录,注意的是目前只能用Python2来执行,不能用Python3

1)option可取值:

Option

解释

-o <FILE>

指定trace数据文件的输出路径,如果不指定就是当前目录的trace.html

-t N, –time=N

执行时间,默认5s。绝对不要把时间设的太短导致你操作没完Trace就跑完了,这样会出现Did not finish 的标签,分析数据就基本无效了

-b N, –buf-size=N

buffer大小(单位kB),用于限制trace总大小,默认无上限

-k <KFUNCS>,–ktrace=<KFUNCS>

追踪kernel函数,用逗号分隔

-a <APP_NAME>,–app=<APP_NAME>

这个选项可以开启指定包名App中自定义Trace Label的Trace功能。也就是说,如果你在代码中使用了Trace.beginSection("tag"), Trace.endSection;默认情况下,你的这些代码是不会生效的,因此,这个选项一定要开启

–from-file=<FROM_FILE>

从文件中创建互动的systrace

-e <DEVICE_SERIAL>,–serial=<DEVICE_SERIAL>

指定设备,在特定连接设备上进行跟踪,由

2)category可取值:

gfx

Graphic系统的相关信息

input

输入事件

view

View绘制相关信息

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

虚拟机相关信息

rs

RenderScript

bionic

Bionic C Library

power

Power Management

sched

CPU调度的信息

Binder_driver

Binder驱动的相关信息

core_services

SystemServer中系统核心Service的相关信息

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

从上面命令可以看出,systrace提供了非常丰富的性能种类,可以根据自己需要来选择相关category,一般情况下我们主要监听主线程和CPU情况,所以像input、view、am、wm、dalvik、sched是比较常用的

  • 具体场景分析

以上图为例进行分析:

  • 先看一下左边栏目,左边是一些具体的性能种类,我们一般是先找到对应的进程名,每个进程下面有一系列信息,比如上面的UI Thread就是我们关心的
  • 接着定位到具体栏目,开始查看右边信息,上图右边是UI线程相关情况,这里我们抓取的是应用启动5秒内的信息,最上面是时间轴,中间那些五颜六色的就是具体的调用方法以及耗时信息,颜色越深代表越耗时
  • 快捷键介绍,如何查看信息,这边介绍几个快捷键,分别是a、d、w、s,和游戏使用的按键有点像,分别代表左移、右移、放大、缩小。第一次使用应该很多人不知道这个快捷键
  • 接着看下面部分,下面部分是你选择具体某个调用方法后展示的相关信息,里面有这个调用方法的介绍,耗时信息以及一些描述,比如我们可以看到像bindApplication这些系统方法,这个就代表了应用启动阶段走到了Application初始化这边,从上往下分别是该方法的调用栈,越往下越具体,比如下面这个:

上面是点击了框中位置的方法调用,然后下面就显示了该方法具体信息,可以看出是我们的一个类对象创建,Wall Duration代表持续时间,即该方法总耗时,CPU Duration代表CPU耗时,还有个Self Time代表自身方法耗时,不包含其调用方法

  • CPU信息查看

以上图为例,我们可以清楚看到该手机八个CPU核的占用情况,和上面方法视图类似,也是用颜色来代表耗时情况,白色就是空闲状态,像我们做启动优化就可以根据CPU的空闲状态来重新分配每个时间段的代码调用,这样就能充分利用CPU,又能避免CPU高负载导致的ANR

  • 总结

  1. systrace是提供查看系统相关api调用情况的工具,它相比插桩来看是无法具体到每个方法,但是可以提供一个全局的性能数据,然后你可以根据定位到的具体对象来进一步排查就能解决大部分问题
  2. systrace提供了很多性能选项,并且视图里面以时间为横轴记录了完整的代码执行过程,可以清晰看到CPU和每个对象的创建过程,可以做为性能优化的参考依据
  3. systrace结合插桩可以做到先定位具体对象,再看对象具体方法耗时的操作流程,建议作为性能优化的必备工具

systrace介绍相关推荐

  1. Android系统性能调优工具介绍

    经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优工具介绍 在软件开发过程中,想必很多读者都遇到过系统性能问题.而解决系统性能问题的几个主要步骤是: 测评 ...

  2. Android性能分析之---卡顿分析

    一.性能分析---场景 低性能的APP常见的表现有启动/界面切换慢.动画掉帧.卡顿(启动卡,点击按钮卡,进入新页面卡等).耗电,甚至出现应用无响应.程序崩溃的现象.当我们着手解决这些性能问题时,面对的 ...

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

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

  4. systrace的简单介绍及使用

    systrace的简单介绍 systrace是 Android 4.1 之后,引入的分析设备性能的主要工具,是Linux内核中的主要跟踪机制. Systrace 允许你收集和检查设备上运行的所有进程的 ...

  5. 理解和使用systrace

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

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

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

  7. Systrace的用法小结

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

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

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

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

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

  10. Systrace 流畅性实战 2 :案例分析: MIUI 桌面滑动卡顿分析

    当我们说 流畅度 的时候,我们说的是什么?不同的人对流畅性(卡顿掉帧)有不同的理解,对卡顿阈值也有不同的感知,所以有必要在开始这个系列文章之前,先把涉及到的内容说清楚,防止出现不同的理解,也方便大家带 ...

最新文章

  1. 并发Bug之源有三,请睁大眼睛看清它们
  2. python爬虫知识_Python 爬虫技术分享
  3. 百炼OJ:4146:数字方格
  4. rt5350 中断初始化
  5. linux 硬盘繁忙,icinga2 借助check_iostat.sh抓取linux服务器的diskIO(硬盘繁忙度)
  6. 手工代付系统/api代付系统/代付系统源码
  7. Python 字符串与二进制串的相互转换
  8. 3.Dockerfile
  9. GPU成为主流 NVIDIA GRID亮相Citrix Synergy 2017
  10. 灯效控制器和rgb控制器_还有什么不能RGB?TT发布Level 20 RGB BattleStation电竞桌
  11. java 视频压缩_Java视频压缩有人会吗?
  12. 七月算法机器学习 7 工作流程与模型调优
  13. 【bat批处理】常用bat批处理内部命令简介
  14. 同一文件夹下的excel文件合并成一个总excel
  15. 自己动手写iPhone wap浏览器之界面架构篇
  16. 迅捷路由器设置找不到服务器,迅捷(fast)路由器怎么设置?
  17. 朋友圈为什么不做智能排序?
  18. 美的微晶冰箱以云数据为驱动,实现智能保鲜冰箱智慧新升级
  19. 2021年底跨平台技术比较和选型指南(也许是最全的)
  20. 回顾Vue2---②

热门文章

  1. Android 特效直播实现原理解析
  2. Unity for易接sdk接入文档
  3. Android设备信息修改器,如何更改android手机的设备号信息
  4. 金额要用BigDecimal,原理分析
  5. DBSCAN聚类算法原理和伪代码
  6. JanusGraph概述
  7. Ubuntu 16.04 安装 破解版的PyCharm
  8. 2021-02-19
  9. 6轴并联机器人示教器
  10. Linux系统编程---消息队列