命令用法
sched
: CPU調(diào)度的信息,非常重要鳞滨;你能看到CPU在每個(gè)時(shí)間段在運(yùn)行什么線程洞焙;線程調(diào)度情況,比如鎖信息拯啦。
gfx
:Graphic系統(tǒng)的相關(guān)信息澡匪,包括SerfaceFlinger,VSYNC消息褒链,Texture唁情,RenderThread等;分析卡頓非常依賴這個(gè)甫匹。
view
: View繪制系統(tǒng)的相關(guān)信息甸鸟,比如onMeasure,onLayout等兵迅;對(duì)分析卡頓比較有幫助抢韭。
am
:ActivityManager調(diào)用的相關(guān)信息;用來(lái)分析Activity的啟動(dòng)過(guò)程比較有效恍箭。
-
測(cè)試列表滑動(dòng)刻恭, 桌面滑動(dòng)等流暢性問(wèn)題
gfx input view
-
若在上面的基礎(chǔ)上 還需要分析HWUI
gfx input view hwui
-
測(cè)試app啟動(dòng)或者進(jìn)入某個(gè)界面的速度
gfx input view am wm res
-
懷疑有GC或者是IO導(dǎo)致的卡頓
gfx input view dalvik disk
-
懷疑有power相關(guān)的問(wèn)題
gfx input view res am wm power
systrace 查看線程狀態(tài)
1.綠色:運(yùn)行中
作用: 查看Running狀態(tài)的線程,查看其運(yùn)行的時(shí)間扯夭,與競(jìng)品做對(duì)比鳍贾,分析快或者慢的原因
2.藍(lán)色:
作用:Runnable狀態(tài)的線程持續(xù)時(shí)間越長(zhǎng),則表示cpu調(diào)度越忙勉抓,沒(méi)有及時(shí)處理這個(gè)任務(wù)贾漏,是否后臺(tái)有太多的任務(wù)在跑,是否頻率太低
3.白色:
作用: 一般都是在等待事情驅(qū)動(dòng) 在互斥鎖上被阻塞
4.橘色 不可中斷的睡眠態(tài)藕筋? 一般都是線程在IO上被阻塞 或者等待磁盤(pán)操作 IO操作很慢
大量的橘色出現(xiàn) 表明 低內(nèi)存狀態(tài)
5.紫色: 可中斷的睡眠態(tài)纵散,線程在另一個(gè)內(nèi)核上被阻塞 ,有可能是正常的隐圾,也有可能是不正常的
命令行
python systrace.py [options] [category1] [category2] ... [categoryN]
options
其中options可取值:
options | 解釋 |
---|---|
-o <FILE > |
輸出的目標(biāo)文件 |
-t N, –time=N | 執(zhí)行時(shí)間伍掀,默認(rèn)5s |
-b N, –buf-size=N | buffer大小(單位kB),用于限制trace總大小暇藏,默認(rèn)無(wú)上限 |
-k <KFUNCS >蜜笤,–ktrace=<KFUNCS > |
追蹤kernel函數(shù),用逗號(hào)分隔 |
-a <APP_NAME >,–app=<APP_NAME > |
追蹤應(yīng)用包名盐碱,用逗號(hào)分隔 |
–from-file=<FROM_FILE > |
從文件中創(chuàng)建互動(dòng)的systrace |
-e <DEVICE_SERIAL >,–serial=<DEVICE_SERIAL > |
指定設(shè)備 |
-l, –list-categories | 列舉可用的tags |
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 |
示例
例如把兔,在systrace.py
所在目錄下執(zhí)行指令:
python systrace.py -b 32768 -t 5 -o mytrace.html wm gfx input view sched freq
./systrace.py -b 32768 -t 5 -o mytrace.html wm gfx input view sched freq //等價(jià)
又例如沪伙,輸出全部的trace信息
python systrace.py -b 32768 -t 5 -o mytrace.html gfx input view webview wm am sm audio video camera hal app res dalvik rs bionic power sched irq freq idle disk mmc load sync workq memreclaim regulators
注:收集trace,需要提前安裝python县好,并且一定要注意必須是python 2.x围橡,而不是能3.x,否則可能會(huì)出現(xiàn)問(wèn)題缕贡。另外翁授,buffer大小不可過(guò)大,否則會(huì)出現(xiàn)oom異常晾咪。
Google瀏覽器輸入chrome://tracing/
進(jìn)行查看
圖形化
橫坐標(biāo)是以時(shí)間為單位收擦,縱坐標(biāo)是以進(jìn)程-線程的方式來(lái)劃分,同一進(jìn)程的線程為一組放在一起谍倦,可收縮/展開(kāi)塞赂,
Frames
產(chǎn)生的html格式的trace文件必須使用Google Chrome打開(kāi),才能正確地解析并已圖標(biāo)形式展現(xiàn)昼蛀。上圖中紅色圈起來(lái)的减途,都是可以點(diǎn)擊操作的地方,最上方是搜索欄曹洽,往下處是Alerts按鈕,再往下是鼠標(biāo)操作模式辽剧。
在每個(gè)app進(jìn)程送淆,都有一個(gè)Frames行,正常情況以綠色的圓點(diǎn)表示怕轿。當(dāng)圓點(diǎn)顏色為黃色或者紅色時(shí)偷崩,意味著這一幀超過(guò)16.6ms(即發(fā)現(xiàn)丟幀),這時(shí)需要通過(guò)放大那一幀進(jìn)一步分析問(wèn)題撞羽。對(duì)于Android 5.0(API level 21)或者更高的設(shè)備阐斜,該問(wèn)題主要聚焦在UI Thread和Render Thread這兩個(gè)線程當(dāng)中。對(duì)于更早的版本诀紊,則所有工作在UI Thread谒出。
Alerts
Systrace能自動(dòng)分析trace中的事件,并能自動(dòng)高亮性能問(wèn)題作為一個(gè)Alerts邻奠,建議調(diào)試人員下一步該怎么做笤喳。
比如對(duì)于丟幀是,點(diǎn)擊黃色或紅色的Frames圓點(diǎn)便會(huì)有相關(guān)的提示信息碌宴;另外杀狡,在systrace的最右上方,有一個(gè)Alerts tab可以展開(kāi)贰镣,這里記錄著所有的的警告提示信息呜象。
注:本文講到最新版的systrace膳凝,其中sdk 23,chrome版本49.0恭陡,部分功能在老版本systrace并沒(méi)有蹬音。
快捷操作
導(dǎo)航操作
導(dǎo)航操作 | 作用 |
---|---|
w | 放大,[+shift]速度更快 |
s | 縮小子姜,[+shift]速度更快 |
a | 左移祟绊,[+shift]速度更快 |
d | 右移,[+shift]速度更快 |
快捷操作
常用操作 | 作用 |
---|---|
f | 放大當(dāng)前選定區(qū)域 |
m | 標(biāo)記當(dāng)前選定區(qū)域 |
v | 高亮VSync |
g | 切換是否顯示60hz的網(wǎng)格線 |
0 | 恢復(fù)trace到初始態(tài)哥捕,這里是數(shù)字0而非字母o |
一般操作 | 作用 |
---|---|
h | 切換是否顯示詳情 |
/ | 搜索關(guān)鍵字 |
enter | 顯示搜索結(jié)果牧抽,可通過(guò)← →定位搜索結(jié)果 |
` | 顯示/隱藏腳本控制臺(tái) |
? | 顯示幫助功能 |
對(duì)于腳本控制臺(tái),除了能當(dāng)做記事本的功能遥赚,目前還不清楚有啥功能扬舒,或許還在開(kāi)發(fā)中。
模式切換
- Select mode: 雙擊已選定區(qū)能將所有相同的塊高亮選中凫佛;(對(duì)應(yīng)數(shù)字1)
- Pan mode: 拖動(dòng)平移視圖(對(duì)應(yīng)數(shù)字2)
- Zoom mode:通過(guò)上/下拖動(dòng)鼠標(biāo)來(lái)實(shí)現(xiàn)放大/縮小功能讲坎;(對(duì)應(yīng)數(shù)字3)
- Timing mode:拖動(dòng)來(lái)創(chuàng)建或移除時(shí)間窗口線。(對(duì)應(yīng)數(shù)字4)
可通過(guò)按數(shù)字1~4愧薛,用于切換鼠標(biāo)模式晨炕; 另外,按住alt鍵毫炉,再滾動(dòng)鼠標(biāo)滾輪能實(shí)現(xiàn)放大/縮小功能瓮栗。