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

Flutter性能监控工具(1)--- Observatory简介主要讲了如何打开Observatory,现在讲一下如何使用Observatory里的各个功能来分析性能问题,

下图是Observatory的主页面:

image.png

最上面的蓝色导航栏

表示当前所在的位置

  1. vm@ws://127.0.0.1:50579/ws :表示当前连接的VM

    鼠标放在这个上面,会看到这个,表示当前APP的main():

image.png
  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

显示应用程序的类层次结构。
复制代码
image.png

cpu profile

显示当前isolate的CPU使用数据
复制代码

图表的下部按cpu占用比例做了一个列表,反映的是函数的调用次数和执行时间(划重点)。一般排在前面的函数(这些函数是?有待学习)都不是我们写的dart代码。如果你发现自己的某个函数调用占比反常,那么可能存在问题。

image.png

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

cpu profile (table)

和cpu profile一样,但是是以表格的形式来展示
复制代码
image.png

allocation profile

显示isolate已分配的内存。通过这个面板你能看到新生代/老生代的内存大小和占比;每个类型所占用的内存大小。
复制代码
image.png

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

堆快照
复制代码
image.png

heap map

将分配的内存显示为颜色块
复制代码
image.png

heap map 面板能查看old generation中的内存状态 它以颜色显示内存块。 每个内存页面(page of memory)为256 KB,每页由水平黑线分隔。 像素的颜色表示对象的类ID - 例如,蓝色表示字符串,绿色表示双精度表。 可用空间为白色,指令(代码)为紫色。 如果启动垃圾收集(使用“分配配置文件”屏幕中的GC按钮),堆映射中将显示更多空白区域(可用空间)。 将光标悬停在上面时,顶部的状态栏显示有关光标下像素所代表的对象的信息。 显示的信息包括该对象的类型,大小和地址。 当你看到白色区域中有很多分散的其它颜色,说明存在内存碎片化,可能是内存泄露导致的。

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

metrics

包含您应用中收集的指标。
复制代码
image.png

persistent handles

查看强对象和若对象
复制代码
image.png

ports

端口
复制代码
image.png

啥也没有

logging

设置Log的级别
复制代码
image.png

作者:小德_Kurt
链接:https://juejin.im/post/5c4f1c6951882525a72458b6
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容