Flutter效能監控工具(3)--- Observatory使用

小德_koude發表於2019-01-28

Flutter效能監控工具(1)--- Observatory簡介 主要講了如何開啟Observatory,現在講一下如何使用Observatory裡的各個功能來分析效能問題,

下圖是Observatory的主頁面:

Flutter效能監控工具(3)--- Observatory使用

最上面的藍色導航欄

表示當前所在的位置

  1. vm@ws://127.0.0.1:50579/ws :表示當前連線的VM

    滑鼠放在這個上面,會看到這個,表示當前APP的main():

Flutter效能監控工具(3)--- Observatory使用

  1. 右邊的Refresh :重新整理資料

VM

這裡顯示當前VM的資訊

  1. name : 當前VM的名字
  2. version :Dart的版本,APP build的時間,執行在哪個平臺上
  3. embedder :嵌入的平臺
  4. started at :VM啟動時的時間戳
  5. uptime :VM已執行的時長
  6. refreshed at :上次取樣資料的時間
  7. pid : 程式ID
  8. peak memory :APP執行時用的峰值記憶體
  9. current memory : APP當前用的記憶體
  10. native zone memory :native 原生記憶體
  11. native heap memory :native 堆記憶體
  12. native heap allocatioon count : native 堆物件數量
  13. flag :一些標記位
  14. timeline :工具
  15. native memory profile :

Isolates

這裡是顯示APP裡的Isolates,每個APP都有一個root Isolates。

Isolates是用一個餅圖顯示,這個餅圖有很多組成部分,我們把這些叫做tags,這些tags用來代表在VM裡不同的執行列表,包括User TAG 和 VM TAG:

  • User TAG

    使用者自定義的TAG,使用方式如下:

import 'dart:developer';

var customTag = new UserTag('MyTag');

// Save the previous tag when installing the custom tag.
var previousTag = customTag.makeCurrent();

// your code here

// Restore the previous tag.
previousTag.makeCurrent();
複製程式碼
  • VM TAG

    VM TAG是系統定義的,在整個UI中使用,有:

    1. CompileOptimized, CompileScanner, CompileTopLevel, CompileUnoptimized :編譯Dart程式碼
    2. GCNewSpace : 新生代的垃圾收集
    3. GCOldSpace : 老生代的垃圾收集
    4. Idle : 不是VM TAG,但是用來標識Isolate空閒的佔比
    5. Native : 執行Native程式碼,dart:io庫使用的C ++程式碼 或者 平臺相關程式碼(Platform Channel)
    6. Runtime : 執行 Runtime 程式碼
    7. Dart : 執行 自己的業務Dart 程式碼
    8. VM :建立isolate,和其他未被覆蓋的部分

影象的右邊還有一系列連結,代表著不同的功能。

debug

可以設定斷點並除錯您的應用程式。
複製程式碼

如何設定debugger,看 dart-lang.github.io/observatory…

class hierarchy

顯示應用程式的類層次結構。
複製程式碼

Flutter效能監控工具(3)--- Observatory使用

cpu profile

顯示當前isolate的CPU使用資料
複製程式碼

圖表的下部按cpu佔用比例做了一個列表,反映的是函式的呼叫次數和執行時間(劃重點)。一般排在前面的函式(這些函式是?有待學習)都不是我們寫的dart程式碼。如果你發現自己的某個函式呼叫佔比反常,那麼可能存在問題。

Flutter效能監控工具(3)--- Observatory使用

具體使用的地址:dart-lang.github.io/observatory…

cpu profile (table)

和cpu profile一樣,但是是以表格的形式來展示
複製程式碼

Flutter效能監控工具(3)--- Observatory使用

allocation profile

顯示isolate已分配的記憶體。通過這個皮膚你能看到新生代/老生代的記憶體大小和佔比;每個型別所佔用的記憶體大小。
複製程式碼

Flutter效能監控工具(3)--- Observatory使用
Heap 堆,動態分配的Dart物件所在的記憶體空間

New generation: 新建立的物件,一般來說物件比較小,生命週期短,如local 變數。在這裡GC活動頻繁 Old generation:從GC中存活下來的New generation將會提拔到老生代Old generation,它比新生代空間大,更適合大的物件和生命週期長的物件

通過這個皮膚你能看到新生代/老生代的記憶體大小和佔比;每個型別所佔用的記憶體大小。 為了debug的方便,我們可以獲取到某段時間的記憶體分配情況:點選Reset Accumulator按鈕,把資料清零,執行一下要測試的程式,點選重新整理。 為了檢查記憶體洩露,我們可以點選GC按鈕,手動執行GC。 Accumulator Size:自點選Reset Accumulator以來,累加物件佔用記憶體大小 Accumulator Instances:自點選Reset Accumulator以來,累加例項個數 Current Size:當前物件佔用記憶體大小 Current Instances:當前物件數量

具體使用的地址:dart-lang.github.io/observatory…

heap snapshot

堆快照
複製程式碼

Flutter效能監控工具(3)--- Observatory使用

heap map

將分配的記憶體顯示為顏色塊
複製程式碼

Flutter效能監控工具(3)--- Observatory使用

heap map 皮膚能檢視old generation中的記憶體狀態 它以顏色顯示記憶體塊。 每個記憶體頁面(page of memory)為256 KB,每頁由水平黑線分隔。 畫素的顏色表示物件的類ID - 例如,藍色表示字串,綠色表示雙精度表。 可用空間為白色,指令(程式碼)為紫色。 如果啟動垃圾收集(使用“分配配置檔案”螢幕中的GC按鈕),堆對映中將顯示更多空白區域(可用空間)。 將游標懸停在上面時,頂部的狀態列顯示有關游標下畫素所代表的物件的資訊。 顯示的資訊包括該物件的型別,大小和地址。 當你看到白色區域中有很多分散的其它顏色,說明存在記憶體碎片化,可能是記憶體洩露導致的。

具體使用看:dart-lang.github.io/observatory…

metrics

包含您應用中收集的指標。
複製程式碼

Flutter效能監控工具(3)--- Observatory使用

persistent handles

檢視強物件和若物件
複製程式碼

Flutter效能監控工具(3)--- Observatory使用

ports

複製程式碼

Flutter效能監控工具(3)--- Observatory使用

啥也沒有

logging

設定Log的級別
複製程式碼

Flutter效能監控工具(3)--- Observatory使用

參考

juejin.im/post/5c123e…

相關文章