分析HarmonyOS应用/服务的CPU活动性能

news/2024/7/21 9:39:09 标签: harmonyos, 华为, 鸿蒙, 鸿蒙系统, Open Harmony

CPU Profiler 性能分析是用来分析CPU性能瓶颈的工具,可以实时查看应用/服务的CPU使用率和线程活动,也可以查看记录的方法跟踪数据、方法采样数据和系统跟踪数据的详情。基于CPU性能分析,您可以了解在一段时间内执行了哪些方法,以及每个方法在其执行期间消耗的CPU资源,可以有针对性的优化应用/服务的CPU使用率,提供更快、更顺畅的用户体验,以及延长设备电池续航时间。

录制CPU活动数据

录制HarmonyOS应用或服务的CPU活动数据,需要将待分析的应用或服务运行起来,当前仅支持本地真机。

NOTE
录制JS的CPU活动数据,应用/服务只能以Debug模式运行。

1.在DevEco Studio菜单栏上单击View > Tool Windows > Profiler,或者在DevEco Studio底部工具栏单击Profiler按钮,打开Profiler分析器。在Profiler分析器的SESSIONS窗口,单击+按钮,在弹出下拉列表中先选择设备,然后选择待分析的进程。在这里插入图片描述
2.在实时变化视图,单击CPU区域,进入CPU详情页面。在这里插入图片描述
3.在CPU详情页面选择CPU数据的录制模式,然后单击Record,开始录制CPU活动数据。

开始录制后,会在SESSIONS窗口的当前会话下生成应用/服务的数据记录。CPU数据的录制模式分为以下几种:

  • 对Java 方法采样(Sample Java Methods):在应用/服务的Java代码执行期间,定期捕获应用/服务的调用堆栈。分析器会比较捕获的数据集,以推导与应用/服务的 Java 代码执行有关的时间和资源使用信息。
  • 跟踪Java 方法(Trace JavaMethods):在运行时检测应用/服务,在每个方法调用开始和结束时记录一个时间戳。系统会收集并比较这些时间戳,以生成方法跟踪数据,包括时间信息和CPU使用率。
  • 跟踪JS 方法(Trace JSMethods):在运行时检测应用/服务,在每个方法调用开始和结束时记录一个时间戳。系统会收集并比较这些时间戳,以生成方法跟踪数据,包括时间信息和CPU使用率。
  • 跟踪系统调用(Trace SystemCalls):捕获应用/服务运行的细节,以便您检查应用/服务与系统资源的交互情况。您可以检查线程状态的确切时间和持续时间、直观地查看所有内核的CPU瓶颈在何处,并添加需分析的自定义跟踪事件。

除了使用以上几种数据录制模式外,还可以单击模式选择下拉列表中的Edit Configurations自定义数据录制模式。在这里插入图片描述
4.单击CPU详情页面的上部或下部的Stop结束当前录制。CPU录制完成后,可以在SESSIONS窗口选中该数据记录,单击右键或导出按钮将数据记录导出,方便分享和以后的查看在这里插入图片描述

查看CPU跟踪数据

CPU活动数据录制后,可以在SESSIONS窗口单击要查看的数据记录,或单击+按钮,在下拉列表中选择Load from file,导入数据记录文件。在这里插入图片描述
1:单击数据记录,可查看数据详情。

2:CPU在录制时间内的使用情况。

3:IO资源占用情况。

4:Interaction:在应用/服务的生命周期内,用户与应用/服务互动的事件。

5:Threads:线程活动状态,可以查看线程是处于运行状态还是休眠状态,选择具体的线程,可以在右侧的Analysis窗口查看线程的详细信息。

6:Analysis窗口,选择All threads可以看到全部线程的信息。选择具体的某个线程,可以查看该线程或方法调用的详细数据。

7:Time reference菜单,选择以下选项之一,以确定如何测量每次调用的时间信息(仅跟踪 Java 方法中支持):

  • Wall clock time:该时间信息表示进程从开始运行到结束,时钟实际走过的时间。
  • Thread time:该时间信息表示实际经过的时间减去线程没有占用CPU资源的那部分时间。对于任何给定的调用,其线程时间始终小于或等于其Wall clocktime。使用线程时间可以让您更好地了解线程的实际CPU 使用率中有多少是给定方法或函数占用的。

8:过滤器,按函数、方法、类或软件包名称过滤跟踪数据。在Flame chart 标签页中,会突出显示包含符合搜索查询条件的调用、软件包或类的调用堆栈。在Top down 和Bottom up标签页中,这些调用堆栈优先于其他跟踪结果。还可以通过勾选搜索字段旁边的相应方框来启用以下选项:

Regex:搜索中包含正则表达式。

Match case:搜索区分大小写。

对于方法跟踪数据,可以直接在Threads时间轴中查看Call Chart,也可以从Analysis窗口查看Flame Chart、Top Down 和 Bottom Up标签页。对于系统调用跟踪数据,可以在Threads时间轴查看Trace Events,也可以从Analysis窗口查看 Flame Chart、Top Down 和 Bottom Up 标签页。

使用 Call Chart 检查跟踪数据

Call Chart直接在Threads 时间轴中查看 ,将鼠标指针悬停在某个方法上,以图形方式来呈现方法跟踪数据或函数跟踪数据。对系统API 的调用显示为橙色,对应用/服务自有方法的调用显示为绿色,对第三方API(包括Java 语言API)的调用显示为蓝色。在这里插入图片描述

使用Flame Chart检查跟踪数据

Flame Chart标签页提供一个倒置的调用图表,用来汇总完全相同的调用堆栈。将鼠标指针悬停在某个方法上,可以查看哪些方法或函数消耗的时间最多。在这里插入图片描述
使用Top Down检查跟踪数据

Top Down标签显示一个调用列表,在该列表中展开方法或函数节点会显示它的被调用方。与Flame chart标签页类似,“Top Down”树也汇总了具有相同调用堆栈的完全相同的方法的跟踪信息。也就是说,Flame chart标签页提供了Top down标签页的图形表示方式。

Top Down 标签提供以下信息来帮助说明在每个调用上所花的CPU时间(时间也可表示为在选定范围内占线程总时间的百分比):

Self:方法或函数调用在执行自己的代码(而非被调用方的代码)上所花的时间。

Children:方法或函数调用在执行它的被调用方(而非自己的代码)上所花的时间。

Total:方法的Self 时间和Children 时间的总和。这表示应用/服务在执行调用时所用的总时间。在这里插入图片描述

使用Bottom Up检查跟踪数据

Bottom Up 标签页显示一个调用列表,在该列表中展开函数或方法的节点会显示它的调用方。Bottom Up 标签页用于按照占用的CPU时间由多到少(或由少到多)的顺序对方法或函数排序。您可以检查每个节点以确定哪些调用方在调用这些方法或函数上所花的CPU时间最多。与“Top Down”树相比,“Bottom Up”树中每个方法或函数的时间信息参照的是每个树顶部的方法(顶部节点)。CPU时间也可表示为在该记录期间占线程总时间的百分比。下表说明了如何解读顶部节点及其调用方(子节点)的时间信息。
在这里插入图片描述
在这里插入图片描述

使用Trace Events查看系统事件

检查系统跟踪数据时,您可以在Threads 时间轴中检查Trace Events,以查看每个线程上所发生事件的详细信息。将鼠标指针悬停在某个事件上,可查看该事件的名称以及在每种状态下所花费的时间。单击事件可在Analysis 窗格中查看详情。

CPU cores 窗格显示每个核心上安排的线程ability。将鼠标指针悬停在某个线程ability上,可查看该核心在该特定时间在哪个线程上运行。
在这里插入图片描述

要想成为一名合格的鸿蒙高级开发工程师,以上知识点是必须要掌握的,除此之外,还需要掌握一些鸿蒙应用开发相关的一些技术

为了节省大家一些查找的时间,这边联合几位行业大佬,为大家准备了一份《鸿蒙全栈技术 实战项目驱动式教学》的学习导图,从入门到进阶再到南北向开发实战的一整套完整体系,想要学习了解更多鸿蒙开发的相关知识可以借鉴:一小时快速认识HarmonyOSicon-default.png?t=N7T8https://docs.qq.com/doc/DZVVZR2lzcnJZSFlO
在这里插入图片描述

除了上面整理的思维导图以外,这里还特别整理的一份《鸿蒙 (Harmony OS)开发学习手册》给大家进行参考学习:

一、入门必看

1.应用开发导读(ArkTS)

2.……在这里插入图片描述

二、HarmonyOS 概念

1.系统定义

2.技术架构

3.技术特性

4.系统安全

5…在这里插入图片描述

三、如何快速入门?鸿蒙HarmonyOS分布式项目实战icon-default.png?t=N7T8https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.基本概念

2.构建第一个ArkTS应用

3.构建第一个JS应用

4.……在这里插入图片描述

四、开发基础知识

1.应用基础知识

2.配置文件

3.应用数据管理

4.应用安全管理

5.应用隐私保护

6.三方应用调用管控机制

7.资源分类与访问

8.学习ArkTS语言

9.……在这里插入图片描述

五、基于ArkTS 开发

1.Ability开发

2.UI开发

3.公共事件与通知

4.窗口管理

5.媒体

6.安全

7.网络与链接

8.电话服务

9.数据管理

10.后台任务(Background Task)管理

11.设备管理

12.设备使用信息统计

13.DFX

14.国际化开发

15.折叠屏系列

16.……在这里插入图片描述

更多了解更多鸿蒙开发的相关知识可以参考:鸿蒙4.0源码开发架构分析pdficon-default.png?t=N7T8https://docs.qq.com/doc/DZXB5WmVIVHRwS0pY


http://www.niftyadmin.cn/n/5357914.html

相关文章

WebGL开发GIS系统

WebGL在GIS(地理信息系统)开发中能够提供强大的图形渲染能力,使得在Web浏览器中创建高性能的地理空间应用成为可能。以下是在WebGL中开发GIS系统时的一些建议和关键考虑事项,希望对大家有所帮助。北京木奇移动技术有限公司&#x…

安卓相对布局RelativeLayout

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"150dp"><TextViewandroid…

一个字节内的二进制理解

这篇文章随便写写 一个byte能表示的数的范围是-128到127是可以解释的&#xff0c;首先明确计算机中存储的数字都是0和1&#xff0c;一个byte是8bit&#xff0c;由8个0或1来表示&#xff0c;而在二进制中最高位是符号位&#xff0c;用来表示一个数的正负&#xff0c;因此实际上…

docker安装elasticsearch+kibana

目录 1.安装es 2.安装kibana 3.kibana监控es 1.安装es 拉取镜像 docker pull elasticsearch:7.6.1 创建存放配置文件、数据、插件的各个文件夹 mkdir -p /home/docker/elasticsearch/config mkdir -p /home/docker/elasticsearch/data mkdir -p /home/docker/elasticsearch…

MySQL-常见函数

文章目录 1. 函数的定义及分类2. 数值型函数3. 字符串型函数4. 日期时间函数5. 聚合函数6. 流程函数 1. 函数的定义及分类 MySQL函数是 MySQL 数据库提供的内部函数&#xff0c;这些内部函数可以帮助用户更加方便地处理表中的数据。对 MySQL 常用函数进行简单的分类&#xff0…

在ubuntu22.04中借助docker实现安装、调试ros1.0

一.安装docker 参考&#xff1a;https://www.cnblogs.com/cqpanda/p/16247919.html 使用安装方法1直接安装&#xff0c;没出问题&#xff0c;我就继续了。出问题按方法2安装吧。 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 二.docker中安装ros1.…

SpringMVC校验注解不生效

简介 SpringMVC框架提供了SPI扩展&#xff1a;javax.validation.spi.ValidationProvider&#xff0c;用来实现参数校验功能。Spring使用hibernate-validator作为它的默认实现&#xff0c;我们只需要进行一些简单的注解声明&#xff0c;就可以达到参数校验的功能。但是在实际使…

【Vue】2-11、组件的生命周期

一、生命周期 & 声明周期函数 生命周期&#xff08;Life Cycle&#xff09;是值一个组件从 创建 -> 运行 -> 销毁 的整个阶段&#xff0c;强调的是一个时间段。 生命周期函数是由 Vue 框架提供的内置函数&#xff0c;会伴随着组件的生命周期&#xff0c;自动按次序…