应用或服务运行期间可能出现响应速度慢、动画播放不流畅、列表拖动卡顿、应用崩溃或耗电量过高、发烫、交互延迟等现象,这些现象表明应用或服务可能存在性能问题。造成性能问题的原因可能是业务逻辑、应用代码对系统API的误用、对ArkTS对象的不合理持有导致内存泄露等,引起对系统资源不合理使用,包括对CPU、内存、网络、文件、GPU、以及其他外设等器件的冗余占用,进而引发性能问题。
通常,进行性能优化主要围绕关键点“降负载”来入手,这包括:
1)永久降负载。即将原本不合理的冗余处理进行彻底清理;
2)临时降负载。即避免在关键时间段内扎堆产生负载。可以考虑采用懒加载等延迟处理机制,错峰运行。
在遇到这些问题时,首先需要对应用的运行情况以及设备的资源消耗进行监测,以初步确定可能存在的性能问题以及问题出现的位置,进而有针对性的降低负载。
DevEco Profiler提供实时监控(Realtime Monitor)能力,提供全方位的设备资源监测,覆盖系统事件、异常报告、CPU占用、内存占用、实时帧率、GPU使用率以及能耗等多个维度的数据,自顶向下逐层展开分析,并可借助DevEco Profiler跳转到代码位置,结合代码进行白盒分析,明确不合理的负载出现位置,帮助识别性能瓶颈,定界问题所在,提高解决问题的效率。
DevEco Profiler工具的界面分为两大区域:
①[会话区]:负责调优会话的管理。会话区提供了性能实时监控工具Realtime Monitor来帮助开发者先明确问题场景,完成问题的发现和初步定界。开发者可以在会话区选择待调优的设备、应用及当前应用进程,当前已创建的调优分析任务将在下方以列表的形式展示。
每个会话是一份独立完整的性能数据单位,是由开发者通过一次录制得到的,同一个会话中的各种数据经过工具的处理可以互相关联,而不同会话间的数据,由于来自不同时间段的录制,不会具备关联关系。实时监控本质上也是一种会话,是由实时监控这个场景模板创造而成的。录制会话时需要注意,确保场景复现完整后再结束该次会话的录制。
同时会话区提供Launch、Frame等一系列场景化分析任务类型,帮助开发者有针对性的采集并展示更多更详细的数据,这些数据将会还原对应场景下的应用运行状况。
②[数据区]:负责性能数据的可视化呈现。包含工具控制栏、时间轴、泳道区域、详情区域,通过不同泳道展示,直观展示调优详情。
会话区
DevEco Profiler左侧为会话区,可以分为三个部分:
① 调优目标选择区域:选择设备及要分析的应用和进程。
选定被调优的设备、应用包及应用进程作为后续调优会话的分析对象。依次点击设备、应用、进程列表完成选择。选择完成后,若目标正在运行,将自动开启实时监控进行指标的观测。
② 会话列表区域:列出当前已创建的调优分析会话。
单击列表中的会话后,界面右侧数据区将显示其数据内容。选择设备应用和进程后,此处默认显示“Realtime Monitor”任务。
会话区将记录当前所有的会话。每一个会话都会包含:会话的名称(图例中的"Launch")、会话当前状态(图例中的"Recorded")、会话对应的录制时长信息(图例中的"11s 402ms")。会话支持拖拽方式调整顺序。
录制/删除会话:通过鼠标悬停在名称后方的信息图标上,会话所要观测的调优对象的基本信息将会以Tooltip的形式展示。点击会话的右侧的按钮,开启/停止会话录制,此时工具开始抓取性能数据,开发者可以操作应用复现性能劣化场景;点击将删除该会话。
说明
- 会话区存在两种会话类型:活跃会话和历史会话。活跃会话可在此区域内直接看到,历史会话需要点击界面下方View Successful Sessions前往查看。开发者主动选择新的调优目标后,活跃会话会清空,相关会话进入历史会话。
- 仅成功录制或导入的session可长期存留在任务列表中;录制失败或未启动录制的session,在设备/应用切换时自动从任务列表中清除。
- 会话录制完成出现图标,表示数据处于解析状态,请耐心等待解析完成。
数据导出:待数据解析完成后,会话便会进入数据展示状态,将数据可视化的展示到右侧的数据区中。此时可以点击会话面板中出现的数据导出按钮,将录制到的数据导出到本地进行保存,借助这个能力,开发者可以方便的在团队内共享录制到的性能数据,也可以防止采集到的性能数据丢失。
③ 场景化模板选择区域:新建会话的入口,DevEco Profiler提供[Launch]、[ArkUI]、[Frame]、[Concurrency]、[ArkWeb]、[Network]、[Time]、[Allocation]、[Snapshot]、[CPU]等场景化分析模板,提供对不同性能问题场景的数据分析方案。
选中任意模板图标,点击下方Create Session按钮,即可创建出一个全新的会话。
数据导入:在③ 场景化模板选择区域,点击Open File按钮,即可选择数据进行导入。当前支持.insight,.htrace, .ftrace,.heapsnapshot,.sys,.perfdata,.nas(包含Native Allocation数据的.htrace文件)文件的导入。
数据区
在数据区域,DevEco Profiler提供了对性能数据的可视化呈现结果。由于每个场景化模板所提供的可视化能力各不相同,本章节会主要就所有模板均通用的能力展开介绍。
整个数据区可以分为五个区域:
① 工具控制栏:提供标记、收藏、离线符号导入、泳道过滤等辅助功能的管理以及会话状态和时间轴的控制能力。
② 时间轴:提供横向时间轴,用于显示数据时间戳。
③ 标记栏:用于放置标记,能够帮助开发者标记时间点或时间段。
④ 泳道区:泳道图区域。每个场景化模板都会预置一系列泳道单元(例如上图的“Frame”便是一个泳道单元)。泳道单元是整个DevEco Profiler工具内,数据组织的最小独立单元,用于剖析应用某一特定维度的运行数据,每个场景化模板均是由一系列泳道单元组成,每个泳道单元都会呈现某一维度的性能数据。开发者可以查看数据随时间变化的特征,发现数据异常的时间段,支持框选时间段后在详情面板查看对应的细节。
说明
- 每个场景化模板的泳道单元,遵循Top-Down分析原则,越接近顶部的泳道单元,所观测的性能维度越抽象,越顶层;越底部的泳道单元观测的性能维度则越接近于系统底层,建议按照自顶而下的顺序去分析泳道单元呈现的数据内容。
- 同一个泳道单元中,泳道区中主要展示时间维度的性能变化,帮助开发者首先定位出有问题的时间段;进而通过详情区查看该时段各维度的详细数据,分析具体影响性能的参数或属性。
⑤ 详情区:展示详细的数据细节。开发者在泳道区域选择数据之后,以各类表格的形式呈现该时间段内各项详细数据。More面板将对左侧详情区中选中数据进行补充描述。
基本操作
开启/关闭会话控制
在数据区,首先可以开启和结束会话的录制,点击工具栏的首个按钮即可,如下图所示分别对应开启录制、结束录制功能,第三个状态则代表录制完成。与在会话区域录制的功能效果一致。
时间轴控制
DevEco Profiler工具提供了各种丰富的时间轴操作功能:
拖动泳道区域下方的滑条(快捷键为A/D键或使用Shift+鼠标滚轮),开发者可以调整时间轴所示的时间范围;拖动泳道右侧滑条(或者滑动鼠标滚轮),可以调整泳道单元上下滚动。
说明
使用W/A/S/D等纯键盘的快捷键操作,仅在已激活的泳道区域生效。泳道区域中存在亮蓝色的选中边框即为激活状态。
查看详情面板
当开发者在泳道区域观察到可疑数据后,便可以通过框选或者点选的方式,将相关详细数据展示到详情面板中。泳道中条块状的数据支持点选查看,在泳道区域鼠标点击拖动再释放完成框选。可以在框选的同时按住Alt键,完成框选后时间轴尺度将会自动适应,整个框选时段会充满整个泳道区域,方便聚焦观察被选择的时段。
由于不同的泳道单元会展示不同维度的数据,因此详情面板展示的数据是来自于泳道区域中被选择的泳道单元。被选中的泳道单元会呈现蓝色,与其他泳道单元有明显差异。此外,当开发者直接选中泳道单元,而未进行框选或点选时,详情面板中会展示整个泳道单元的完整详细数据(效果等同于完整框选该泳道单元)。
添加/编辑标记
为了便于开发者记录分析出的关键时间点,DevEco Profiler工具提供了标记功能供开发者使用。
DevEco Profiler支持两种时间标记:
开发者可以在时间轴下方的标记区域点击放置单个标记,也可以在框选时间段后,点击旗子按钮放置该时间段的标记,如下图所示。
支持使用“ctrl+, ”向前选中单个标记,“ctrl+. ”向后选中单个标记;“ctrl+[ ”向前选中时间段的标记,“ctrl+]”向后选中时间段时间标记。
标记放置完成后,可以通过双击标记按钮,在弹出的标记属性框中修改标记的描述和颜色信息,或者删除标记。
此外,工具还提供了查看不同标记之间时间差的能力,只需要先选中一个标记,再鼠标悬浮在其他标记点上,便可在面板右下角
后看到被悬浮的标记点和被选择的标记点的时间差。借助这个能力,开发者能够快速获知一些特定时刻的时间差,这对于分析时间敏感的性能问题尤其有用。
收藏泳道单元
在使用工具分析,可能会遇到泳道单元过多,导致想分析的泳道单元间隔过远、分析低效的情况,使用收藏功能,可以帮助开发者将关注的泳道单元提拉到泳道区域的顶端。将鼠标悬停在想要收藏的泳道单元之上,出现收藏图标,点击该按钮即可完成收藏。
再次点击该按钮则取消收藏。此外,由于顶部区域空间有限,工具还提供了压缩泳道的能力,点击泳道中图标,可以将收藏的泳道单元进行折叠。
如果泳道展示不完整,当鼠标悬浮到泳道标题区,会提示该泳道的泳道信息。
如果收藏的是子泳道,当鼠标悬浮到收藏的子泳道标题区,会提示该泳道的父泳道信息。
展开/折叠子泳道
工具提供了两种方式展开/折叠子泳道:
1、点击父泳道左边小三角符号。
2、双击父泳道表头区展开泳道。
全局搜索
为了帮助开发者迅速查找关心的性能数据,DevEco Profiler工具提供了全局搜索功能。
-
在搜索框中,开发者可以点击选择想要搜索的泳道单元,再输入相应的搜索内容,回车即可获取结果。
-
在输入框输入内容前或搜索到结果后,可点击Cc按钮,设置输入的关键字是否忽略大小写,默认为忽略大小写。
离线符号解析
为便于开发者分析Native的函数热点,工具提供了符号导入的能力,开发者可以点击工具控制栏的按钮,选择带有调试信息的so库导入,之后工具会利用此信息,将采集到的函数偏移信息转换为对应的源码符号(包括系统so库,用户自编译的so库,三方库)。
说明
- 离线导入携带符号表信息的so库,需要严格保证与release版本的so库保持同一优化等级(如-O1, -O2, -O3等)。可以在CMakeLists.txt文件中查看或配置编译优化等级。
- 离线导入携带符号表信息的so库,需要尽可能与release版本的so库编译选项保持一致,防止so库起始地址不一致,影响解析正确性。
源码跳转
找到问题源码是调优过程中最为关键的一环。针对详情面板中所展示的函数栈帧信息(如下图所示),双击栈帧结点,工具便会在编辑器中打开相关源码文件,并定位到对应行号。此功能正常使用的前提是用于抓取性能数据的应用,是在DevEco Studio所在的开发环境中编译,且相关源文件位置并未改变。
最后呢
很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。
而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造的《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点
如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。
针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细鸿蒙(OpenHarmony )手册(共计1236页)与鸿蒙(OpenHarmony )开发入门视频,帮助大家在技术的道路上更进一步。
- 《鸿蒙 (OpenHarmony)开发学习视频》
- 《鸿蒙生态应用开发V2.0白皮书》
- 《鸿蒙 (OpenHarmony)开发基础到实战手册》
- OpenHarmony北向、南向开发环境搭建
- 《鸿蒙开发基础》
- 《鸿蒙开发进阶》
- 《鸿蒙开发实战》
总结
鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发。
并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用。那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行! 自↓↓↓拿