文档管理中心
我的
您当前浏览的HarmonyOS 5.0.0(API 12)文档归档不再维护,推荐您使用最新版本。详细请参考文档维护策略变更。
指南DevEco Studio性能分析内存泄露分析:Snapshot分析Snapshot模板基本操作

Snapshot模板基本操作

查看快照详情

  1. 创建Snapshot场景调优分析任务,操作方法可参考性能问题定位:深度录制。

    说明
    • 在任务分析窗口,可以通过“Ctrl+鼠标滚轮”缩放时间轴,通过“Shift+鼠标滚轮”左右移动时间轴。或使用快捷键W/S放大或缩小时间轴,使用A键/D键可以左右移动时间轴。
    • 将鼠标悬停在泳道任意位置,可以通过M键添加单点时间标签。
    • 鼠标框选要关注的时间段,可以通过“Shift+M”添加时间段时间标签。
    • 在任务分析窗口,可以通过“ctrl+, ”向前选中单点时间标签,通过“ctrl+. ”向后选中单点时间标签。
    • 在任务分析窗口,可以通过“ctrl+[ ”向前选中时间段时间标签,通过“ctrl+]”向后选中时间段时间标签。

  2. 设置Snapshot泳道。

    单击任务左上角的进行泳道的新增和删除,再次单击此按钮可关闭设置并生效。

  3. 开始录制后可观察Memory泳道的内存使用情况,在需要定位的时刻单击任务左上角的启动一次快照。

    “ArkTS Snapshot”泳道的紫色区块表示一次快照完成。

    说明
    • 在任务录制过程中,单击分析窗口左上角的可启动内存回收机制。
    • 当方舟虚拟机的调优对象的某个程序/进程占用的部分内存空间在后续的操作中不再被该对象访问时,内存回收机制会自动将这部分空间归还给系统,降低程序错误概率,减少不必要的内存损耗。

    在“Statistics”页签中显示当前快照的详细信息:

    • Constructor:构造器。
    • Distance:从GC Root到这个对象的距离。
    • Shallow Size:该对象的实际大小。
    • Retained Size:当前对象释放时,总共可以释放的内存大小。
    • Native Size:该对象所引用的Native内存大小。
    • Retained Native Size:当前对象释放时,总共可以释放的Native内存大小。
    • 构造函数名称后的“x数字”,表示该类型对象的数量,可单击折叠按钮展开。
    • 单击列表中任一对象,右侧区域会显示从GC roots到这个对象的路径,通过这些路径可以看到该对象的句柄被谁持有,从而方便定位问题产生的原因。
    • 带标识的对象,表示其可以通过全局window对象直接访问。

节点属性与引用链

在“Snapshot”的“Statistics”页签和“Comparison”页签中,所有实例对象节点展开后会显示"<fields>"以及"<references>",这两项节点分别代表该实例对象的属性以及该实例对象的引用链信息。

在“Snapshot”的More区域则展示“Fields”和“References”两个页签,分别代表Detail区域所选择对象的属性以及引用链信息,方便快捷查看所选中对象的属性等详细信息,而不需要跳转至对应对象。

节点跳转

在“Snapshot”的“Comparison”页签中,查看内存对象、对象属性及其引用链时,若要查看某一对象的详细信息,可以单击该对象所在行行尾的跳转图标跳转至该对象所在的“Statistics”页签并定位至该对象所在的位置,以查看该对象的详细信息。

历史节点前进/后退

当在“Comparison”和“Statistics”之间进行节点跳转后,单击详情区域左下角的左右箭头可以前进或者后退至下一个或上一个历史节点,以便快速在多个历史节点之间跳转查看。当箭头为激活状态时,表示前进/后退功能可用,当箭头为灰色状态时则代表无法使用该功能。

比较快照差异

在“Snapshot”的“Comparison”页签中,以当前选择的快照为base,下拉框选择的快照为Target,即可得到两次快照信息的比较结果。

在“Snapshot”的“Comparison”页签中,可进行两次快照的差异比较,比较内容包括新增数、删除数、个数增量、分配大小、释放大小、大小增量等等。通过不断对比,可快速分析和定位内存问题的具体位置。

Heap Snapshot离线导入

DevEco Profiler提供Heap Snapshot离线导入能力,可导入一个或多个.heapsnapshot文件。

您可以在DevEco Profiler主界面的“Create Session”区域中,单击“Open File”,导入.heapsnapshot文件。

说明
  • 导入的单个文件大小不超过150M。
  • 批量导入的文件数量不超过10个。

可以导入与heapsnapshot文件匹配的.jsleaklist文件,展示jsleakwatcher监控采集到的内存泄漏对象。

说明
  • 导入的单个jsleaklist文件大小不超过30M。
  • 导入的jsleaklist文件通过文件中的hash值与已导入的heapsnapshot文件匹配。
  • 可多次导入不同的jsleaklist文件,也可同时导入多个不同的jsleaklist文件,重复导入不会覆盖已导入的匹配上的jsleaklist文件。总的导入匹配成功的文件数量不超过导入的heapsnapshot文件。