「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战」
Systrace 简介
了解Systrace
Systrance是性能数据采样和分析工具,走性能优化方向的人一定对Systrace不陌生,希望各位大牛指点一下提供一些帮助。
主要优点:结果表现直观和准确,抓取工具会自动生成一个trace.html文件,通过Chrome浏览器打开,了解响应时间段的具体函数的相关性能。
缺点:Systrace的结果依赖代码中的trace,分析具体应用函数是需要在代码加上trace,这个过程可能比较耗时。
下面有个例子
Trace.traceBegin(Trace.TRACE_TAG_POWER, "userActivity");
try {
/**分析代码块*/
} finally {
Trace.traceEnd(Trace.TRACE_TAG_POWER);
}
Systrace抓取
目前我主要使用Android Studio,所以简单介绍以下基本的使用方法。
- Systrace命令在Android SDK工具包中提供/Android/Sdk/platform-tools/systrace/systrace.py
- 设备准备好你要进行抓取的界面
- 执行脚本./systrace.py或python systrace.py [options] [categories]
python systrace.py -t 20 sched gfx view wm am app webview -a "指定目标应用程序的包名" -o ~/Documents/open-project/systrace_data/wanandroid_start_1.html
- 设备执行操作,时间到达后,会生成Trace文件。
- 使用Chrome将这个文件打开进行分析
除此之外,Android SDK中的monitor工具也可以进行trace的抓取,里面会包含每个CPU,以及图形渲染,输入事件等等内容。这个报告提供了Android系统进程在该段时间内的整体流程情况。
adb shell atrace --list_categories
查看Systrace支持的TAG,因为不同厂商的机器可能有不同的配置。
Systrace基本知识
线程状态查看
Systrace会根据颜色的不同标识各个线程的状态,通过该状态我们进行分析。
- 绿色:Running 线程正在完成与某个进程相关的工作或正在响应中断,只有在该状态的线程才可能在 cpu 上运行
- 蓝色:Runnable 线程可以运行但目前未进行调度和安排,Runnable状态持续的越长,表示cpu的调度繁忙,不能及时处理该任务
- 白色:Sleeping 线程没有可执行的任务和工作,可能是因为线程在互斥锁上被阻塞。作用 : 这里一般是在等事件驱动
- 橙色:不可中断的睡眠态 IO Block, I/O被阻止或等待磁盘操作完成。
- 紫色:不可中断的睡眠态,线程在另一个内核操作(通常是内存管理)上被阻塞,需要按照具体的情况去分析 。