抓取systrace
可以通过eclipse,AS或者命令行抓取systrace。
UI抓取
如下图选择抓取systrace的进程,然后点击右上角的按钮,在出现的界面进行设置,包括设置保存路径,抓取systrace的时间间隔,buffer大小,systrace中包含的tag等。
命令行抓取
Android-SDK中已经包含了systrace工具,platform-tools\systrace\systrace.py。使用命令行抓取的好处是比较灵活,可以把python、systrace工具打包,然后放到任何电脑上就可以直接抓取。
- python systrace.py sched freq idle am wm gfx view sync binder_driver irq workq input -b 96000
其它方法抓取systrace
部分手机厂商为了更加方便、快捷的抓取systrace,把这项功能内置到了手机中,在手机上点击记下就可以抓取到。
如图所示,打开systrace悬浮窗之后,可以在任何界面点击右下角的按钮就可以开始抓取systrace,更加的方便、简单。
查看支持的TAG
抓取TAG的时候如果选择的太多会导致得到的文件太大,如果选择的太少又可能抓取的信息不全,所以要根据问题进行取舍,可以用如下命令查看手机支持哪些TAG。
adb shell atrace --list_categories
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
res - Resource Loading
dalvik - Dalvik VM
rs - RenderScript
bionic - Bionic C Library
power - Power Management
pm - Package Manager
ss - System Server
database - Database
network - Network
adb - ADB
vibrator - Vibrator
aidl - AIDL calls
nnapi - NNAPI
rro - Runtime Resource Overlay
pdx - PDX services
sched - CPU Scheduling
irq - IRQ Events
i2c - I2C Events
freq - CPU Frequency
idle - CPU Idle
disk - Disk I/O
mmc - eMMC commands
sync - Synchronization
workq - Kernel Workqueues
memreclaim - Kernel Memory Reclaim
regulators - Voltage and Current Regulators
binder_driver - Binder Kernel driver
binder_lock - Binder global lock trace
pagecache - Page cache
memory - Memory
查看systrace
systrace只能通过chrome浏览器进行查看,把抓取到的systrace导入到chrome中,大概显示如下图所示:
可以通过快捷键进行移动、放大、缩小。
- A 向左移动
- B 向右移动
- S 缩小
- W 放大
查看线程状态
systrace中用不同的颜色表示线程的状态,可以很直观的区分线程的状态。
运行中-绿色
该状态的进程说明在对应时间上正在被CPU调度,同一时间可能有多个进程处于运行状态,查看运行中的进程,可以判断是否跑在了CPU小核上?是否在不同的状态间频繁切换?
可运行-蓝色
线程当前在等待CPU调度,目前处于等待中,没有运行。如果进程长时间处于这个状态需要分析是否后台任务过多,导致该进程一直没有被调度到?
不可中断的睡眠态-褐色
线程在另一个内核操作上被阻塞。
休眠中-白色
线程没有工作要做,可能是因为线程在互斥锁上被阻塞。