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

Flutter性能監控工具(1)--- Observatory簡介 主要講了如何打開Observatory,如今講一下如何使用Observatory裏的各個功能來分析性能問題,html

下圖是Observatory的主頁面:git

最上面的藍色導航欄

表示當前所在的位置github

  1. vm@ws://127.0.0.1:50579/ws :表示當前鏈接的VMbash

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

  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。post

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

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

cpu profile

顯示當前isolate的CPU使用數據
複製代碼

圖表的下部按cpu佔用比例作了一個列表,反映的是函數的調用次數和執行時間(劃重點)。通常排在前面的函數(這些函數是?有待學習)都不是咱們寫的dart代碼。若是你發現本身的某個函數調用佔比反常,那麼可能存在問題。

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

cpu profile (table)

和cpu profile同樣,可是是以表格的形式來展現
複製代碼

allocation profile

顯示isolate已分配的內存。經過這個面板你能看到新生代/老生代的內存大小和佔比;每一個類型所佔用的內存大小。
複製代碼

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

堆快照
複製代碼

heap map

將分配的內存顯示爲顏色塊
複製代碼

heap map 面板能查看old generation中的內存狀態 它以顏色顯示內存塊。 每一個內存頁面(page of memory)爲256 KB,每頁由水平黑線分隔。 像素的顏色表示對象的類ID - 例如,藍色表示字符串,綠色表示雙精度表。 可用空間爲白色,指令(代碼)爲紫色。 若是啓動垃圾收集(使用「分配配置文件」屏幕中的GC按鈕),堆映射中將顯示更多空白區域(可用空間)。 將光標懸停在上面時,頂部的狀態欄顯示有關光標下像素所表明的對象的信息。 顯示的信息包括該對象的類型,大小和地址。 當你看到白色區域中有不少分散的其它顏色,說明存在內存碎片化,多是內存泄露致使的。

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

metrics

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

persistent handles

查看強對象和若對象
複製代碼

ports

端口
複製代碼


啥也沒有

logging

設置Log的級別
複製代碼

參考

juejin.im/post/5c123e…

相關文章
相關標籤/搜索