教日月换新天。为有牺牲多壮志,敢

HarmonyOS:调优工具DevEco Profiler

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ 
➤GitHub地址:https://github.com/strengthen
➤原文地址:https://www.cnblogs.com/strengthen/p/18516696
➤如果链接不是为敢技术的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

  

一、Profiler调优工具简介
调优工具首页分为:会话区和数据区。
1、工具特点:

(1)、无需关注数据采集细节,分析启动、卡顿、耗时、内存、能耗等场景性能问题。

(2)、操作简单、快速上手,帮助用户搭建鸿蒙应用性能模型。

(3)、 Top-Down设计理念和数据展现范式,直通代码行体验,高效调优。

2、打开方式:

(1)、在DevEco Studio顶部菜单栏中选择 【View -> Tool Windows -> Profiler】。

(2)、在DevEco Studio底部工具栏中单击 Profiler。

(3)、按“Double Shift”或者“Ctrl+Shift+A”打开搜索功能,搜索 Profiler。

3、会话区又分为:设备应用选择区、会话列表区、场景选择区。

(1)、设备应用选择区:选择调优设备(目前仅支持真机),进程列表及当前应用进程。

(2)、会话列表区:已创建的调优分析任务,单击某会话数据区显示其调优内容;选择设备和进程后,此处默认显示Realtime Monitor 任务。

(3)、场景选择区:新建任务的入口,Profier提供Launch(启动)、Frame(卡顿)、Time(耗时)、Allocation(内存)、Snapshot(内存快照)、CPU(运行分析)等场景化分析任务类型。

4、会话区详细操作流程:

(1)、会话区依次点击设备、应用、进程,选择想要分析的目标。

(2)、若目标正在运行,实时监控(Realtime Monitor)自动开启,问题初步定界。

(3)、选择详细定位相应性能问题图标,点击 Create Session 创建会话。

(4)、会话列表新增会话条目,说明如下:

i、会话的名称(图例中的“Frame”)、会话当前状态(图例中的“ldle”)、会话对应的录制时长信息(图例中的“0ms”),此外还有开始和删除按钮。

ii、点击开始按钮后,会话就会进入录制状态,开始按钮变成结束按钮,开发者可复现性能裂化场景。

iii、点击结束按钮,会话进入数据解析状态,结束按钮变为解析图标,开发者耐心等待。

iv、数据解析完成后,可视化展示在数据区,解析图标变为数据导出按钮,开发者可选择数据导出,用于数据备份或者团队共享,导入数据在创建会话界面的 Open File。

5、数据区菜单:

(1)、工具控制栏:提供辅助功能的入口,以及会话和时间轴的控制能力。可以启动录制、标记功能、收藏功能等等。

(2)、时间轴:提供横向时间轴,用于显示数据时间戳。

(3)、标记栏:用于放置标记。

(4)、泳道区:数据泳道图区域,展示数据随时间变化的特征,开发者快速发现数据异常的时间段,框选后在详情面板查看细节。是比较重要的部分,整个数据的显示都在这个部分

(5)、详情面板:详细数据展示区域,以各类表格为主,帮助开发者查看完整的详细数据,More 面板,是对左侧 Details区中选中数据的补充描述。在泳道区做框选和点选操作后,可以把时间范围详细信息展示出来。

6、数据区详细介绍。

(1)、会话控制:工具栏的首个按钮,如图所示分别对应开启录制、结束录制功能,第三个状态则代表录制完成。

(2)、泳道过滤:开发者可以按照自己的理解去除掉部分泳道单元的录制。

(3)、时间轴控制:操作最高频操作,提供按钮点击和快捷键。

放大:+按钮,快捷键 W 或者 Ctrl+鼠标向上滚轮。

缩小:-按钮,快捷键S 或者 Ctrl+鼠标向下滚轮。

左移:向左拖动滚动条,快捷键 A 或者 Shift+鼠标向上滚轮。

右移:向右拖动滚动条,快捷键S或者 Shift+鼠标向下滚轮。

7、标记

(1)、标记1:开发者可以在时间轴下方的标记区域(Makers)点击释放单个标记,也可以在框选时间段后,点击旗子按钮放置该时间段的标记。

(2)、标记2:工具控制栏中可查看到所有标记,可以快速查看标记描述、时刻,修改颜色,删除标记,以及跳转到标记时刻。

(3)、标记的作用:主要是为了在时间轴上快速找到某一个位置,方便用户去定位它之前找到的问题。

8、数据区也提供泳道单元收藏功能。

(1)、泳道单元收藏:开发者将关注的泳道单元提拉到泳道区域的顶端。

(2)、开发者可以再次点击该按钮取消收藏,工具还提供了压缩泳道的能力,可以帮助开发者将收藏的泳道单元进行折叠。工具还拥有统一的隐藏功能,可以一键将收藏的所有泳道隐藏起来。

(3)、离线符号导入:开发者分析Native的函数热点,选择带有调试信息的的so库导入,将采集到的函数偏移信息转换为对应的源码符号。

(4)、源码跳转:详情面板中所展示的函数栈帧信息,开发者只需要双击栈帧结点,工具便会尝试为开发者在编辑器中打开相关源码文件,并定位到对应行号。

二、实时监控 - Realtime Monitor
1、使用Profiler性能调优的过程,结合业界通常的定位过程包括4个步骤,即使用Profiler性能优化过程:
(1)、分析性能瓶颈:使用Realtime Monitor发现性能瓶颈并定界热点区域。
(2)、性能深度分析:创建场景化分析任务来定位性能问题出现的根因。
(3)、优化代码:根据性能分析的结果优化代码。
(4)、优化验证:再次使用Realtime Monitor来验证代码修改的可行性。

2、初步定位:Profiler提供实时监控(Realtime Monitor)能力,提供全方位的设备资源监测,覆盖系统事件、异常事件报告、CPU占用、内存占用、实时帧率、GPU使用率以及能耗等多个维度的数据,帮助开发者初步识别性能瓶颈,定界问题所在。

3、实时界面。

(1)、启停控制:可通过会话区域按钮来即时控制实时监控界面的录制状态。

(2)、详细数据展示:鼠标悬浮于所关心的泳道数据上时,界面上会出现当前时间点Tooltips。将鼠标悬浮于时间轴之上时,实时监控页面内的所有泳道均会以Tooltips展示出该时刻的数据。

(3)、图例选择:图例均支持选择/反选来增加/去除泳道内这一数据的展示,内容改变后泳道内的数据会自动缩放以适应泳道的高度。

4、模版:一共有6个模版,前四种是比较基础的模版,后两种是把前面4种模版的基础能力,进行了场景化得到的。开发者可以针对不同的性能问题场景选择不同模式的分析任务。

(1)、四种是比较基础的模版,耗时、内存、CPU基础场景。

Time Insight、Allocation Insight、Snapshot Insight、CPU Insight。

(2)、场景化多维度数据分析。

Frame Insight、Launch Insight

三、执行效率 - Time Insight模版

1、开发应用或服务过程中,如果 遇到卡顿、加载耗时等性能问题,开发者通常会关注相关函数执行的耗时情况,Profiler提供了基础的函数耗时场景分析Time Insight,用户开发的ArkTS代码是跑在方舟虚拟机上的。ArkTS Callstack泳道就是采集方舟虚拟机CPU的占用。

(1)、ArkTS Callstack泳道:ArkTS侧函数调用栈父泳道展示进程CPU使用率。子泳道展示线程CPU使用率及方舟虚拟机多实例执行状态(重点关注色块部分)。

(2)、User Trace泳道:ArkTS代码中进行自定义打点信息,以任务方块呈现(@ohos.hiTraceMeter)。在函数开始和结束的位置进行打点获取函数耗时。

(3)、Native Callstack泳道:包括Native侧C或者C++的函数采样,在C++代码中调用的对应的函数会抓取到这些函数的分配。展示函数调用方面的一些情况。Native侧函数调用栈,父泳道展示进程CPU使用率,子泳道展示线程CPU使用率及Native调用栈(重点关注与应用同名线程)。

2、把泳道区框选后,就会出现详细区的信息,框选ArkTS Callstack泳道后,详细区展示函数耗时调用栈信息,所有的函数做了归并展示,展示当前函数在这个时间范围内自身运行时长,子函数运行时长。

(1)、函数耗时调用栈展示:支持用户ArkTS代码到用户Native代码缝合展示,Category分类有ArkTS层、NAPI层、Native层。(高亮显示为用户侧代码,置灰显示为系统侧代码)。

(2)、函数耗时火焰图展示:打开 Flame Chart 开关开启火焰图展示,支持放大缩小常见操作,此外还支持关键字搜索功能。开启火焰图展示可以更方便地查看哪些函数在虚拟机上的执行情况。

四、内存分析 - Allocation Insight模版
1、应用在开发过程中,可能会因为API使用错误,变量未及时释放,异常频繁创建,释放内存等情况引发各种内存问题。Profile提供了基础的类型场景分析Allocation Insight,识别和定位内存泄漏、内存抖动以及内存溢出等问题,对应用或服务的内存使用进行优化。
2、Memory泳道:展示应用整体内存随时间的变化情况。

PSS:进程独占内存和按比例分配共享库占用内存之和。

RSS:进程独占内存和相关共享库占用内存之和。

USS:进程独占内存。

3、ArkTS Allocation泳道:方舟虚拟机上的堆内存分配与使用情况主泳道展示进程的ArkTS堆内存总和子泳道展示对应实例在录制过程中的内存分配情况,灰色柱子代表内存已释放,绿色柱子则代表内存在录制结束时仍未释放。

4、Native Allocation泳道:Native内存分配,展示具体的Native内存分配情况(包含堆内存和匿名内存),包括内存统计数据、内存分配栈以及内存分配事件。

5、框选ArkTS Allocation泳道后,下面就会展示当前框架的时间段。

(1)、ArkTS Allocation洋情:展示当前框选时段内存活对象的详细信息,包括距GC Root的距离、対象自身内存大小、对象关联内存大小等。支持关联对象跳转。

(2)、Native Allocation泳道:Statistics页签中显示该段时间内的内存分配统计数据;Call Info页签显示线程的内存分配栈;Allocations List显示该时间段内的所有内存分配事件详细信息。
支持按内存状态(All/Existing/Release)筛选。
支持按统计方式(大小/so库)筛选。
支持搜索功能。在Allocation里面。
(3)、一般用的比较多的就是搜索功能,因为数据量比较大,用搜索功能可以快速定位到想要找到的函数栈。

五、内存快照 - Snapshot Insight模版

1、针对方舟虚拟机,Profile提供了内存快照分析能力,结合Memory实时占用情况,分析不同时刻的方舟虚拟机内存占用的差异。在Snapshot的Comparison页签中,可以进行快照的差异对比,比较内容包括:新增数、删除数、相对变化数、分配大小、释放大小、相对变化大小等。分析快照间的对比数据,有助于定位内存问题的具体位置。这个模版主要就是用来进行内存对比的。

2、ArkTS Snapshot泳道:紫色区块代表方舟堆快照,区块的长度代表堆快照的生成时间,并显示该快照内存大小。录制过程中工具栏点击进行方舟堆内存拍照,录制过程中工具栏点击触发方舟虚拟机GC。

(1)、构造函数名称后的x数字,表示该类型对象数量,可单击折叠按钮展开。

(2)、实例对象名称后的 @数字,表示该对象实例ID。

(3)、单击列表中任一对象,Retainers 区域会显示该对象的引用链,通过引用链信息可以分析对象被谁持有、如何持有,从而定位问题产生的原因

六、调度分析 - CPU Insight模版
1、使用CPU Insight模版,查看应用/服务的CPU使用率,调度信息和线程的运行情况,了解指定时间段内的CPU资源消耗情况,查看系统的关键打点,进行更具针对性的优化。
2、CPU Core泳道:父泳道展示当前进程CPU使用率。子泳道展示各CPU核运行时间片、频率、使用率。
3、Process泳道:父泳道展示各进程CPU核使用概览。子泳道展示各线程运行状态和打点任务运行情况。

4、CPU Core子泳道:

(1)、泳道显示各CPU核心调度信息。

(2)、置灰非同进程时间片。

(3)、查看单时间片基本运行信息及调度时延信息。

(4)、框选查看进程维度统计信息及时间片列表。

(5)、支持显示完整调度链。

5、Process子泳道:

(1)、线程的运行状态和任务打点情况。

(2)、框选查看线程状态列表和打点任务列表。

(3)、支持显示用户自定义打点。

(4)、支持搜索、排序、过滤功能。

(5)、支持关键信息跳转功能。

七、卡顿丢帧 - Frame Insight模版

1、 Frame Insight模版在实际开发中用得非常多,如果有发现表单滑动不顺畅,页面交互延迟、动效不流畅等卡顿现象时,可以使用Profile提供的场景分析Frame Insight。当某一帧的实际结束时间晚于该帧的期望结束时间时,该帧即被识别为卡顿帧。目前卡顿帧仅被分为APP与Render Service两种,且APP与Render Service侧的卡顿并非一定同时出现。这就是卡顿帧主要的定义。

2、Frame Insight模版主要包含的功能。

(1)、Anomaly泳道:应用主线程图像编码耗时情况,耗时超过50% Vsync周期告警。

(2)、Frame泳道:主泳道显示GPU使用率。子泳道显示 Render Service 侧帧数据和应用侧帧数据。

(3)、ArkUl Component泳道:用户自定义组件和系统组件绘制耗时情况。

(4)、Frame Insight还集成了Time、CPU场景分析的功能,方便开发者在分析卡顿丢帧数据时对比同时段的其他资源占用情况。

(5)、Frame Insight模版是一个复合模版,还在分析帧率低同时可以查看对应的调用栈信息。

3、Frame泳道:

(1)、正常渲染的帧显示为绿色,出现卡顿的帧显示为红色。

(2)、框选父泳道支持卡顿丢帧率、卡顿次数等;

(3)、单选某帧查看详情,支持跳转到对应打点任务

4、ArkUl Component泳道:这个泳道主要是对组件进行打点,让用户对自己的组件使用过程中的耗时有进一步的分析。

(1)、支持显示系统组件和用户自定义组件的耗时情况。

(2)、框选查看各组件节点个数,耗时统计情况。

八、启动分析 - Launch Insight模版
1、开发应用或服务的过程中,启动耗时是很重要的一个指标。如果开发者需要分析启动过程的耗时瓶颈,优化应用或服务的冷启动耗时,可使用Profiler提供的Launch场景分析能力,录制采集应用或服务过程中的关键数据进行分析。识别出应用/服务启动耗时长的问题。
2、Launch泳道:父泳道查看启动各阶段耗时。子泳道查看启动详细信息。
3、Launch Insight还集成了Time、CPU、Frame 场景分析的功能,方便开发者在分析启动阶段数据时对比同时段的其他资源占用情況。

4、Launch Insight模版也是一个复合模版,其在分析应用启动的过程中,还可以定位和它相关的代码问题,Launch模版支持分析静态资源库加载耗时,也支持查看核心线程在CPU Core的运行情况。支持查看启动过程、关键线程Trace数据,这个Trace数据对开发者来定位启动过程中的问题是非常重要的。

九、操作界面:

  

posted @   为敢技术  阅读(127)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!
历史上的今天:
2018-10-30 [Swift]字符串(String类、NSString类)常用操作
2018-10-30 [Swift实际操作]九、完整实例-(1)在iTunesConnect网站中创建产品
点击右上角即可分享
微信分享提示