1 CPU分析的核心概念与重要性

CPU活动分析(CPU Profiling)是性能优化的核心手段,它通过测量代码执行时间,帮助开发者定位性能瓶颈。应用的响应速度直接影响用户体验,过长的加载时间或卡顿会导致用户流失

1.1 为什么CPU分析至关重要

在不同性能维度的敏感度中,CPU性能直接影响:

  • 应用启动速度和响应时间

  • 界面渲染效率和帧率稳定性

  • 设备能耗表现和电池寿命

  • 分布式操作的协同效率

2 前端领域的CPU分析实践

在Web前端环境中,CPU分析主要关注JavaScript执行效率、渲染性能以及资源加载策略。

2.1 浏览器渲染流程与CPU消耗

浏览器渲染过程可以简化为以下流程

每个阶段都会消耗CPU资源,其中布局绘制是最耗时的操作

2.2 前端CPU分析工具

前端开发者主要使用以下工具进行CPU分析:

工具平台工具名称主要特点
WebChrome DevTools提供Network、Performance、Main等泳道分析,擅长分析资源加载、JS执行、渲染性能
AndroidAndroid Profiler集成于Android Studio,可监控CPU、内存、网络实时状态,支持方法级CPU跟踪
HarmonyOSDevEco Profiler鸿蒙自带,提供Time、Allocation、Network等分析模板

3.2 DevEco Profiler的CPU分析能力

DevEco Profiler是鸿蒙开发的性能分析神器,其Time分析模板可以1:

  • 录制应用运行时的CPU占用和函数调用栈

  • 可视化展示:以火焰图(Flame Chart)或列表形式展示函数耗时,直观看到"最重"的调用栈

  • 精准定位:支持跳转到高耗时对应的源码位置,极大简化了排查流程

DevEco Profiler支持多种分析泳道1:

  • User Trace:用户自定义打点泳道,基于时间轴展示当前时段内用户使用hiTraceMeter接口自定义的打点任务的具体运行情况

  • ArkTS Callstack:方舟运行时函数调用泳道,基于时间轴展示CPU使用率和虚拟机的执行状态,以及当前调用栈名称和调用类型

  • Callstack:ArkTS和Native混合函数调用泳道。基于时间轴展示各线程的CPU使用率,以及在一段时间内的混合调用栈

  • Energy:展示应用能耗的构成,结合应用生命周期,识别潜在能耗问题

3 鸿蒙应用CPU性能分析实践

3.3.1 创建Time分析任务

在DevEco Profiler中创建Time任务并录制相关数据,操作方法如下1:

  1. 安装应用时在模块级build-profile.json5文件中,增加strip字段并赋值为false(保留符号表信息)

  2. 创建Time任务并录制相关数据

  3. 在会话区选择Open File,可以导入历史数据进行分析

3.3.2 分析CPU性能数据

在"ArkTS Callstack"泳道和"ArkTS Callstack"子泳道上长按鼠标左键并拖拽,框选要分析的时间段后1:

  • Details区域会显示所选时间段内的函数栈耗时分布情况

  • Heaviest Stack区域会展示出"Details"区域选择节点所处的耗时最长的完整调用栈

  • 函数栈耗时分布有三种展现方式:Call Tree方式、火焰图形式、冰锥图形式

开发者可使用DevEco Profiler的CPU场景调优分析,在应用或元服务运行时,实时显示CPU使用率和线程的运行状态,了解指定时间段内的CPU资源消耗情况,查看系统的关键打点(例如图形系统打点、应用服务框架打点等),进行更具针对性的优化。

查看各CPU使用情况

  1. 创建CPU分析任务并录制相关数据,操作方法可参考性能问题定位:深度录制,或在会话区选择Open File,导入历史数据。

    CPU分析任务支持在录制前单击

    指定要录制的泳道。

  2. “CPU Core”泳道显示当前选择调优应用或元服务的CPU的使用率。

    可在“CPU Core”右侧的下拉列表中选择显示内容:

    • Slice and Frequency:每个子泳道包含时间片和频率两部分,时间片显示占用该CPU核心的进程、线程。
    • Usage and Frequency:每个子泳道包含CPU核心使用率和频率两部分。

    框选主泳道,可对所选时间段内的CPU使用情况进行汇总统计,可查询多时间片的进程维度统计信息、线程维度状态统计信息、线程状态统计信息,以及所有时间片的数据统计信息。

  3. 将其展开,子泳道显示各CPU核心调度信息、各CPU核心频率信息以及各CPU核心使用率信息。

    说明

    将鼠标悬浮在某时间片上时,能够置灰非同进程时间片,通过此方法可以确定时间片的关联性。

  4. 指定时间片,查看统计信息。

    • 单击某个运行状态的时间片,可查询这个时间片的基本运行信息及调度时延信息。

    • 框选多个时间片,则可查询多时间片的进程维度统计信息以及所有时间片的数据统计信息。

    • 开启"View Integrated Scheduling Chain"后,点击CPU时间片泳道的节点可以查看某一个CPU运行线程的完整唤醒调度链。

说明

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

查询进程详情

进程泳道显示进程对各CPU核心的占用情况。展开进程泳道,显示进程下的线程列表以及线程的运行状态。

  • 单击运行状态的时间片,显示线程在该片段的运行详情,包括起始时间、持续时长、运行状态、频率、线程优先级、所属进程、所属线程、上一运行状态、下一运行状态、唤醒线程,支持跳转到上个或者下个线程运行状态,支持跳转到唤醒线程状态等。

  • 框选Thread泳道中多个运行状态的时间片,可查看此时间段内的不同运行状态的线程的统计信息,包括总耗时时长、最大耗时、最小耗时、平均耗时、处于当前状态的线程数量以及线程中的中载重载数据统计。

    说明

    中载重载数据每100ms做一次统计,24ms < Running时长 ≤ 48ms 记为中载,Running时长大于48ms记为重载。

  • 框选应用进程Process主泳道,可查看此时间段内该进程下的线程并行度统计信息。并行度数据每100ms做一次统计,可以查看100ms内运行的总线程数量、各线程数并行的总时间和并行度。点选某一行,可以查看对应线程编号和运行时间段。

    说明

    并行度(Parallelism)取值范围是[1, cpu核数],数值越小代表并行度越低。

查看Trace详情

当存在Trace任务时,可在对应的线程泳道查看到当前线程已触发的Trace任务层叠图。选择待查询的Trace。

  • 点选泳道中的Trace片段,可查看单个Trace详情,包括名称、所属进程、所属线程、起始时间、持续时长、深度等。

    说明

    • 如果用户对线程进行了自定义打点,在此处亦可查看到对应的User Trace打点信息。
    • 从所在线程名称可分辨当前Trace的类型,系统Trace对应的线程名称为“线程名+线程号”,User Trace对应的线程名称为“打点任务名”。

  • 框选多个Trace片段,可查看到Trace统计信息列表,包括Trace名称、此类Trace的总耗时、单个Trace的平均耗时、以及该时间段内该类Trace的触发次数等

结论

CPU活动分析是保障应用性能的关键实践。从前端浏览器到鸿蒙操作系统,开发者需要掌握不同平台的工具链和分析方法。鸿蒙系统提供了更为深入的CPU分析能力,特别是分布式场景下的性能调优工具。

有效的CPU性能优化需要遵循以下原则:

  1. 测量优先:基于数据而非直觉进行优化

  2. 全链路分析:从前端到原生层的完整调用栈分析

  3. 分布式考量:考虑多设备协同时的性能特性

  4. 持续监控:建立性能基线和持续监控机制

通过充分利用DevEco Profiler、SmartPerf-Host等工具,开发者可以精准定位CPU性能瓶颈,打造高性能的鸿蒙应用体验



华为开发者学堂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94791.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94791.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94791.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十大经典 Java 算法解析与应用

在 Java 开发的世界里&#xff0c;算法就如同构建大厦的基石&#xff0c;它们支撑着各种复杂应用的高效运行。无论是处理海量数据的排序&#xff0c;还是在庞大结构中精准查找信息&#xff0c;合适的算法都能大幅提升程序的性能。接下来&#xff0c;我们将深入解析十大经典的 J…

从感知机到大模型:神经网络的全景解析与实践指南

从感知机到大模型&#xff1a;神经网络的全景解析与实践指南在当今 AI 时代&#xff0c;我们身边的每一个智能应用 —— 从手机里的人脸识别、语音助手&#xff0c;到聊天机器人 ChatGPT、图像生成工具 MidJourney&#xff0c;再到自动驾驶的环境感知系统 —— 背后都离不开一个…

核心篇(下):Transformer 架构详解(程序员视角・实战版)

在上一篇 NLP 预处理文章中&#xff0c;你已经掌握了 “文本→向量” 的转化流程&#xff0c;解决了 DashScope Tokenizer 的调用问题。但此时你可能会问&#xff1a;“这些向量输入模型后&#xff0c;大模型是如何理解长文本语义的&#xff1f;比如‘小明告诉小红&#xff0c;…

FreeRTOS学习笔记(四):任务执行与切换

第一部分&#xff1a;FreeRTOS 任务是如何执行的&#xff1f; FreeRTOS 是一个抢占式的实时操作系统内核。其任务执行遵循一个核心原则&#xff1a;调度器&#xff08;Scheduler&#xff09;总是选择当前处于“就绪态”&#xff08;Ready&#xff09;的最高优先级任务来运行。 …

区块链技术探索与应用:从密码学奇迹到产业变革引擎

&#x1f31f; Hello&#xff0c;我是蒋星熠Jaxonic&#xff01; &#x1f308; 在浩瀚无垠的技术宇宙中&#xff0c;我是一名执着的星际旅人&#xff0c;用代码绘制探索的轨迹。 &#x1f680; 每一个算法都是我点燃的推进器&#xff0c;每一行代码都是我航行的星图。 &#x…

如何监控和调优JVM的内存使用情况?

监控和调优 JVM 内存使用是保障 Java 应用稳定性和性能的核心手段&#xff0c;需要结合监控工具、关键指标分析和针对性调优策略。以下是具体的实施方法&#xff1a;一、JVM 内存监控&#xff1a;工具与核心指标监控的目标是掌握内存使用趋势、GC 行为、线程状态等&#xff0c;…

把用户输进来的明文密码做一层 MD5 哈希

这一行干的就是&#xff1a;把用户输进来的明文密码先做一层 MD5 哈希&#xff0c;再把得到的 32 位十六进制字符串存到变量 password 里。 逐段拆开&#xff1a;password.getBytes() 把字符串转成字节数组&#xff0c;MD5 算法只能对字节/字节数组做运算。DigestUtils.md5Dige…

jeecg-boot3.7.0对接钉钉登录(OAuth2.0)

当前的jeecg-boot 是3.7.0前端问题&#xff1a;1.前端的路由vue-router的版本需要固定死。要不然会报page_not_found router the same.这种奇奇怪怪的问题。 就是把package.json的“^”&#xff0c;这个符号&#xff0c;删掉。&#xff08;或者全局搜索&#xff0c;这个page no…

【C#】获取不重复的编码(递增,非GUID)

获取不重复的编码&#xff1a;从原始实现到高效优化本文针对软件开发中“为新对象分配唯一编码”的常见需求&#xff0c;以C#通信设备管理场景为例&#xff0c;从原始代码分析入手&#xff0c;逐步讲解基于LINQ和哈希集合的优化方案&#xff0c;帮助开发者理解不同场景下的最佳…

腾讯云人脸库技术架构深度解析

腾讯云人脸库技术架构深度解析人脸库是现代人脸识别系统的核心组件&#xff0c;负责海量人脸特征的高效存储、检索和管理。腾讯云在人脸库设计上采用了多项创新技术&#xff0c;本文将深入探讨其技术实现细节。一、人脸库核心架构腾讯云人脸库采用分层架构设计&#xff1a;应用…

Transformer图解指南:Attention机制动画演示

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;H卡级别算力&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生专属优惠。 Self-Attention矩阵运算 位置编码可视化 读者收获&#xff1a;理解大模型基石架构 Attenti…

工业网络安全:保护制造系统和数据

近年来&#xff0c;制造业数字化转型加速推进。自动化生产线、智能工厂和工业物联网设备已深度融入日常运营。这些进步在提升效率的同时&#xff0c;也暴露出新的安全漏洞。因此&#xff0c;工业网络安全已成为全球制造商的首要任务之一。与主要保护办公系统和客户数据库的传统…

【RAGFlow代码详解-9】文档解析和 OCR

系统概述 文档解析和 OCR 系统提供多格式文档支持&#xff0c;并具有基于视觉的分析功能。它由几个关键组件组成&#xff1a; DeepDoc 视觉系统 &#xff1a;用于布局分析、表格检测和 OCR 的高级计算机视觉模型多格式解析器 &#xff1a;支持 PDF、DOCX、Excel、Markdown、HTM…

元宇宙与医疗健康:重构诊疗体验与健康管理模式

1 元宇宙重塑医疗诊疗核心流程1.1 远程诊疗&#xff1a;从 “平面沟通” 到 “沉浸式问诊”元宇宙打破远程诊疗的空间限制&#xff0c;将传统 “视频通话式问诊” 升级为 “沉浸式多维度交互”。在基础问诊环节&#xff0c;医生的数字分身可通过 AR 技术 “进入” 患者家中&…

C6.1:发射极偏置放大器

基极偏置放大器的Q点不稳定&#xff0c;但是学习后了解了放大器的基本运行逻辑&#xff0c;发射极偏置放大器则是适合大规模应用&#xff0c;VDB和TSEB都具有稳定的Q点。讲发射极偏置&#xff0c;首先要讲旁路电容&#xff0c;前文的耦合电容和旁路电容类似&#xff0c;都是直流…

lanczos算法中的基向量V的存储流程

我的问题是&#xff1a;这里提到的&#xff0c;为什么会增加V的列向量&#xff1f;V是怎么储存的呢&#xff1f; 这个问题触及了Lanczos算法实现的核心细节。 &#x1f9e0; 为什么会增加V的列向量&#xff1f; 因为Lanczos算法是一个迭代过程&#xff0c;它从一个初始向量开始…

Linux操作系统——TCP服务端并发模型

TCP&#xff1a;建立连接&#xff0c;一对一要实现多任务并发&#xff0c;就引出了并发模型一、多进程与多线程1.在相同资源情况下&#xff0c;进程资源开销大&#xff0c;但其安全性高2.线程相对于进程资源开销小&#xff0c;且并发量比进程大①多进程并发基础代码#include &l…

Ubuntu 22.04 插入光驱后磁盘满启动故障clean, ...files, ...blocks

硬件环境 设备型号&#xff1a;机械革命 Yilong15Pro Series GM5HG0A操作系统&#xff1a;Ubuntu 22.04.5 LTS (Jammy Jellyfish)内核版本&#xff1a;6.8.0-65-generic 问题经过 初始症状 连接外置光驱后&#xff0c;系统出现异常&#xff1a; 风扇持续高速运转&#xff0c;噪…

声网RTC稳定连麦、超分清晰,出海直播技术不再难选

我们是面向中东、南亚新兴市场的泛娱乐直播平台&#xff0c;主打 1V1 互动、PK 团战与语音房。首个版本落地时&#xff0c;前端开发最焦虑的不是业务逻辑&#xff0c;而是音视频底层问题 —— 延迟高、卡顿多、合唱不同步致观众秒退&#xff0c;我们每周改底层&#xff0c;单 P…

设计模式:桥接模式(Bridge Pattern)

文章目录一、桥接模式的定义二、为什么需要桥接模式&#xff1f;三、示例代码一、桥接模式的定义 桥接模式是一种结构型设计模式&#xff0c;它的主要作用是将抽象部分与实现部分分离&#xff0c;使它们能够独立变化。换句话说&#xff0c;就是把“抽象”和“实现”放到两个独立…