Perfetto入門詳解【新一代systrace分析工具】

之前一直使用systrace的同學(xué)強烈建議嘗試下這個工具


一筛欢、perfetto介紹及特點


在Android 9.0(API級別28)或更高版本的設(shè)備上晃听,可以使用 systrace 在設(shè)備上記錄系統(tǒng)跟蹤。Perfetto 工具是Android下一代全新的統(tǒng)一的 trace 收集和分析框架介却,可以抓取平臺和app的 trace 信息谴供,是用來取代 systrace 的,但 systrace 由于歷史原因也還會一直存在齿坷,并且 Perfetto 抓取的 trace 文件也可以同樣轉(zhuǎn)換成 systrace 視圖桂肌,如果習(xí)慣用 systrace 的,可以用 Perfetto UI 的 Open with legacy UI 轉(zhuǎn)換成 systrace 視圖來看


1.1功能

功能分析:

·? 系統(tǒng)分析(適用于Linux和Android的系統(tǒng)范圍分析)Linux內(nèi)核跟蹤:捕獲高頻ftrace數(shù)據(jù):調(diào)度活動永淌,任務(wù)切換延遲崎场,CPU頻率等等用戶空間分析器和額外的探針:本機堆分析,Java堆分析遂蛀,/ proc狀態(tài)文件的輪詢器內(nèi)置于Android:自Android 9 Pie以來該平臺的一部分谭跨,也可在Linux上運行

·? 應(yīng)用追蹤高效的跟蹤點儀器:以高吞吐量,低開銷的跟蹤點記錄C ++應(yīng)用程序的活動結(jié)構(gòu)化和可配置的事件:定義自定義protobuf消息以表示強類型的應(yīng)用程序特定信息李滴,僅跟蹤您需要的信息與系統(tǒng)范圍的跟蹤集成:在同一時間線上將應(yīng)用程序的狀態(tài)與系統(tǒng)范圍內(nèi)的分析數(shù)據(jù)相關(guān)聯(lián)

·? 跟蹤查看器交互式痕跡探索:使用Perfetto UI記錄螃宙,查看和處理跟蹤數(shù)據(jù)支持流行的跟蹤格式文件:TraceEvent JSON,Android systrace所坯,ftrace文本輸出完全在您的瀏覽器中運行:不涉及服務(wù)器交互谆扎,即使您離線也可以工作

·? 痕量分析基于SQL的跟蹤模型:跟蹤處理器提取跟蹤并公開基于SQLite的接口以通過外殼和UI訪問跟蹤的內(nèi)容大痕量分析:支持高達數(shù)十GB的跟蹤可互操作的:可以導(dǎo)入和導(dǎo)出流行的跟蹤格式:Chromium JSON跟蹤格式,Android Systrace芹助,ftrace堂湖,CSV


1.2 Perfetto主要特點


<1>可以在線抓取長時間的 trace,可以長達一個小時状土,另外抓取的文件size也可以達到GB級別无蜂,這樣就可以在后臺開啟,讓它一直抓取trace了声诸,特別適用于那種復(fù)現(xiàn)概率很低酱讶,又比較嚴重的性能問題

<2>Perfetto具有很好的可擴展性,它除了提供標準的 tracepoints 之外彼乌,例如CPU調(diào)度信息泻肯,內(nèi)存信息等渊迁,還可以通過 atrace HAL 層擴展,在 Android P當(dāng)中灶挟,Google新增加了一個 atrace HAL 層琉朽,atrace 進程可以調(diào)用這個HAL的接口來獲取當(dāng)前的擴展信息,相關(guān)代碼可見 Google 提交稚铣,這樣如果需要擴展 tracepoints 的話箱叁,就可以按照 graphic 的示例添加即可

<3>提供全新的 Perfetto UI 網(wǎng)站,可以在上面通過選取開關(guān)的方式惕医,自動生成抓取 trace 的命令耕漱,同時可以打開 trace 文件。另外還集成了幾種預(yù)定義的 trace 分析統(tǒng)計工具抬伺,詳情可見它的 Metrics and auditors 選項

Perfetto本身是一個框架螟够,關(guān)于它的架構(gòu)和模塊的詳細介紹,可以參考它的 doc網(wǎng)站峡钓,它的源碼可以參考 Android Source Tree 的 /external/perfetto 目錄妓笙,里面有很多的tools和腳本,可以拿來直接使用

doc網(wǎng)站:https://docs.perfetto.dev/#/?id=perfetto-performance-instrumentation-and-tracing

二能岩、抓取trace

2.1? UI操作抓取trace[推薦]

2.1.1打開操作界面

方式1:在開發(fā)者選項中打開

我的手機沒有找到這個選項寞宫。所以我自己寫了個應(yīng)用,啟動這個界面:

方式2:通過命令打開

adb shell am start com.android.traceur/com.android.traceur.MainActivity拉鹃,界面如下:

選中顯示“凱捷設(shè)置”圖塊辈赋,則會在控制中心中顯示快速抓取trace圖標:如下

那么下次要抓trace,直接點擊這個圖標可以了

2.1.2開始錄制

2.1.3數(shù)據(jù)保存位置 /data/local/traces

導(dǎo)出trace文件:

2.1.4如何查看trace文件

2.2命令行工具抓取trace

perfetto是一個命令行工具,在shell環(huán)境下執(zhí)行毛俏,同時在手機端也有兩個進程: traced 和 traced_probes,這兩個進程運行在手機端炭庙,可能需要執(zhí)行如下命令才會開啟這兩個進程饲窿,開啟這兩個進程之后煌寇,才能正常抓取trace信息

adb shell setprop persist.traced.enable 1

如果只是使用這個工具的話,只要懂得perfetto命令行工具的用法就可以了

參數(shù)使用

--out用來指定 trace 輸出文件逾雄,

--config用來指定配置阀溶,例如抓多長時間,間隔多久把內(nèi)存數(shù)據(jù)寫回文件鸦泳,抓取哪些 tracepoints 等等银锻,config 文件內(nèi)容,可以自己手動編寫做鹰,也可以用Perfetto UI網(wǎng)站生成击纬,另外在 Perfetto 里面默認集成了一個 test 配置,可以使用如下命令抓取一個使用 test config 的 trace 文件

//使用內(nèi)置的test配置钾麸,然后輸出到/data/misc/perfetto-traces/trace

$ adb shell perfetto --config :test --out /data/misc/perfetto-traces/trace

抓取完后更振,把/data/misc/perfetto-traces/trace文件內(nèi)容 pull 出來炕桨,然后使用 Perfetto UI 網(wǎng)站打開

adb shell chmod 777? /data/misc/perfetto-traces/trace

adb pull? /data/misc/perfetto-traces/trace .

2.3自定義Config[推薦]

目前最方便的配置文件生成方式是使用Perfetto UI網(wǎng)站來幫助生成,點擊 Record new trace 會看到有很多的配置界面



方式1:通過上面的步驟献宫,從而自動生成命令姊途,然后執(zhí)行

選擇想要的tracepoints之后负敏,點擊 Show Command友扰,將命令內(nèi)容拷貝出來直接在終端就可以執(zhí)行,完成之后把 /data/misc/perfetto-traces/trace 這個文件拷貝出來進行分析




adb shell perfetto \ -c - --txt \ -o /data/misc/perfetto-traces/trace \ <<EOF buffers: { size_kb: 8960 fill_policy: DISCARD } buffers: { size_kb: 1280 fill_policy: DISCARD } data_sources: { config { name: "linux.process_stats" target_buffer: 1 process_stats_config { scan_all_processes_on_start: true } } } data_sources: { config { name: "linux.sys_stats" sys_stats_config { stat_period_ms: 1000 stat_counters: STAT_CPU_TIMES stat_counters: STAT_FORK_COUNT } } } data_sources: { config { name: "linux.ftrace" ftrace_config { ftrace_events: "block/*" ftrace_events: "sched/sched_switch" ftrace_events: "power/suspend_resume" ftrace_events: "sched/sched_wakeup" ftrace_events: "sched/sched_wakeup_new" ftrace_events: "sched/sched_waking" ftrace_events: "power/cpu_frequency" ftrace_events: "power/cpu_idle" ftrace_events: "power/gpu_frequency" ftrace_events: "sched/sched_process_exit" ftrace_events: "sched/sched_process_free" ftrace_events: "task/task_newtask" ftrace_events: "task/task_rename" buffer_size_kb: 2048 drain_period_ms: 250 } } } duration_ms: 10000 EOF

復(fù)制到dos框梭域,進行執(zhí)行

方式2:網(wǎng)頁中直接連接設(shè)備,然后開始抓取

2.4 trace無法抓取解決方案:

<1>啟動跟蹤服務(wù)

由于Perfetto基于服務(wù)的體系結(jié)構(gòu) ,因此必須運行traced和traced_probes服務(wù)來記錄跟蹤。

自Android 9(Pie)起囊颅,這些服務(wù)默認情況下在Android系統(tǒng)映像中附帶先鱼,但默認情況下并非始終啟用串远。在Android 9(P)和10(Q)上伸但,這些服務(wù)默認情況下僅在Pixel手機上啟用,并且必須在其他手機上手動啟用。從Android 11(R)開始彪标,默認情況下当船,大多數(shù)設(shè)備上都啟用了perfetto服務(wù)苍息。

要啟用perfetto服務(wù),請運行:

# Will start both traced and traced_probes.

adb shell setprop persist.traced.enable 1

三铃肯、打開trace


3.1使用默認窗口打開trace[推薦步藕,畢竟是google推崇的]

https://ui.perfetto.dev/#!/



3.2使用命令將perfetto的trace轉(zhuǎn)換為systrace分析


3.3使用舊版systrace界面分析

四立润、trace界面使用詳解

4.1快捷鍵


4.1放大

W鍵放大或者ctrl+滾輪

4.1 shift+m選中區(qū)域

4.1文字顯示線程的運行狀態(tài)丛晦,取締舊版的線程顏色

4.2選中框的含義

當(dāng)我們選中一段時間內(nèi)的幾個線程時仲器,還需要加入其他線程辆沦。就可以通過選擇復(fù)選框,來添加需要分析的線程或進程肢扯。然后整體查看這些線程的運行信息

4.3搜索


4.4關(guān)注的線程可用收藏號進行標記妒茬,便于上下翻動時快速找到

4.5查看Runnable被誰喚醒的方法

Perfetto查看runnable的喚醒方法和systrace不一樣,如下:

點擊runnable蔚晨,看不到是誰喚醒的乍钻。需要緊接著點擊:running


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載肛循,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末银择,一起剝皮案震驚了整個濱河市多糠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌浩考,老刑警劉巖夹孔,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異析孽,居然都是意外死亡搭伤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門绿淋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闷畸,“玉大人,你說我怎么就攤上這事吞滞∮悠校” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵裁赠,是天一觀的道長殿漠。 經(jīng)常有香客問我,道長佩捞,這世上最難降的妖魔是什么绞幌? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮一忱,結(jié)果婚禮上莲蜘,老公的妹妹穿的比我還像新娘。我一直安慰自己帘营,他們只是感情好票渠,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著芬迄,像睡著了一般问顷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上禀梳,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天杜窄,我揣著相機與錄音,去河邊找鬼算途。 笑死塞耕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的郊艘。 我是一名探鬼主播荷科,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼唯咬,長吁一口氣:“原來是場噩夢啊……” “哼纱注!你這毒婦竟也來了畏浆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤狞贱,失蹤者是張志新(化名)和其女友劉穎刻获,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞎嬉,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡蝎毡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了氧枣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沐兵。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖便监,靈堂內(nèi)的尸體忽然破棺而出扎谎,到底是詐尸還是另有隱情,我是刑警寧澤烧董,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布毁靶,位于F島的核電站,受9級特大地震影響逊移,放射性物質(zhì)發(fā)生泄漏预吆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一胳泉、第九天 我趴在偏房一處隱蔽的房頂上張望拐叉。 院中可真熱鬧,春花似錦扇商、人聲如沸凤瘦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽廷粒。三九已至,卻和暖如春红且,著一層夾襖步出監(jiān)牢的瞬間坝茎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工暇番, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留嗤放,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓壁酬,卻偏偏與公主長得像次酌,于是被迫代替她去往敵國和親恨课。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容