Android性能分析之systrace使用
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脚本。
使用
再需要排查的方法中注入Trace.begin和Trace.end(),如果不注入只能看表现结果,无法知道具体执行的方法。
使用monitor选中指定进程执行抓取,方法如下
Step 1:
执行tools目录下的monitor,代开monitor工具; 选择指定的进程,点击Capture system wide trace using android systrace
Step 2:
设置相关参数:
Trace duration:抓取的时间长度,时间到之后自动结束;
Trace Buffer Size(kb) : 默认2M,理论上,时间越长,需要的buffer越大
Enable Application Traces from : 选择要监控的app, 如果没有就选none
根据需要勾选要展示数据的内容。
Step 3:
查看生成的报告,直接浏览器查看。
该报告列出了呈现UI帧并指示沿时间线的每个渲染帧的每个进程。用
绿色
框架圆圈表示在16.6毫秒内渲染以保持每秒60帧稳定所需的帧。渲染时间超过16.6毫秒的帧用黄色
或红色
框架圆圈表示。注意
:在运行Android 5.0(API级别21)或更高版本的设备上, UI 渲染的工作是在UI Thread和RenderThread两个线程完成。 在之前的版本中,创建框架的所有工作都是在UI Thread上完成的。操作快捷键:W 放大; S缩小; A向左移动; B向右移动
systrace上task的运行状态:
灰色:Sleeping
蓝色:Runnable (它可以运行,但是需要等待调度程序唤醒)
绿色:Running
橙色:Uninterruptible sleep 由于 I/O 负载而不可中断休眠尤其关注Runnable, 很有可能wake by pid xxx , cpu此时被xxx进程抢占着,去看看这个进程是否有什么异常。
使用中可能遇到的问题
Android Device Monitor无法打开,或者白屏,或者无法点击获取焦点
解决方法: a. 替换最新的官方sdk原始的tools文件夹; b. jdk版本问题,如果是java 8的jdk,将将版本降低至java 8 151之前的版本。
2. 脚本抓取
SDK提供了一套python脚本来抓取trace日志,具体在Android/Sdk/platform-tools/systrace目录下, 具体使用自行Google吧。