全面了解CPU Profiler:解读CPU性能分析工具的核心功能与用法

news2025/1/16 17:03:45

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。

目录

  • 一、导读
  • 二、概览
  • 三、使用
    • 3.1 通过调用系统API
    • 3.2 通过Android Studio
      • 3.2.1 轨迹界面说明
      • 3.2.2 Android Studio 抓取 App 启动的 trace 信息
  • 四、trace文件分析
    • 4.1 使用调用图表检查跟踪数据
    • 4.2 Flame Chart
    • 4.3 Top Down
    • 4.4 Bottom Up
    • 4.5 Events
  • 五、优缺点
  • 六、推荐阅读

在这里插入图片描述

一、导读

我们继续总结学习Android基础知识,温故知新。
工欲善其事必先利其器,我们要做性能优化,首先要掌握好相关工具。

二、概览

Traceview 是一个用于分析应用程序性能的工具,用来分析函数调用过程。

CPU Profiler 是 集成在Android Studio 3.2版本之后的Android Profiler工具当中,实时记录展示 App cpu消耗,用来替代Traceview。

都可以记录应用程序在运行过程中的各个方法(函数)执行时间以及方法之间的调用关系。通过Traceview,开发者可以了解应用程序中哪些方法占用了较多的时间,从而找到性能瓶颈并进行优化。

还可以以图形方式显示方法的调用树,使开发者能够更直观地分析代码的执行流程。

常用于卡顿优化、启动优化、内存优化等。

这里我们要了解一下traceview 跟 cpu profile的区别,我们在新版的android studio中已经没有单独的traceview了,就是换成cpu profile,一样的。

开发者网站

三、使用

我们可以有两种方式来抓取相关信息。

3.1 通过调用系统API

开始:
Debug.startMethodTracingSampling(new File("ddd"), 0, 5000);
这样的话,我们就开始通过traceview来使用


结束:
Debug.stopMethodTracing();
当调用该方法后,就会生产一个文件,

当文件生成后,存放位置 sd卡/Android/data/包名/files 目录下

startMethodTracingSampling 是有几个重载的方法的,我们看下源码

 /**
  * 
  * tracePath – 文件名,或者传入具体的路径
  * bufferSize – 文件大小,默认8MB.
  * intervalUs – The amount of time between each sample in microseconds.
  */
 startMethodTracingSampling(String tracePath, int bufferSize, int intervalUs) {
    VMDebug.startMethodTracing(fixTracePath(tracePath), bufferSize, 0, true, intervalUs);
}

3.2 通过Android Studio

如下图所示,依次点击profile - cpu ,然后会跳转到 cpu界面,然后就可以进行录制了。

在这里插入图片描述
在这里插入图片描述

通过图2,我们可以看到这里有四个选项,我们分别介绍: 官网

  • Callstack Sample (Sample C/C++ Functions)
    捕获应用的原生线程的采样跟踪数据。在内部,此配置使用 simpleperf 跟踪应用的原生代码。

  • System Trace (Trace System Calls:)
    捕获非常翔实的细节,以便您检查应用与系统资源的交互情况。您可以检查线程状态的确切时间和持续时间、直观地查看所有内核的CPU瓶颈在何处,并添加需分析的自定义跟踪事件。

  • Java/Kotlin Method Trace (Trace Java Methods)

    在运行时检测应用,从而在每个方法调用开始和结束时记录一个时间戳。系统会收集并比较这些时间戳,以生成方法跟踪数据,包括时间信息和 CPU 使用率。

    请注意,与检测每个方法相关的开销会影响运行时性能,并且可能会影响分析数据;对于生命周期相对较短的方法,这一点更为明显。此外,如果应用在短时间内执行大量方法,则分析器可能很快就会超出其文件大小限制,因而不能再记录更多跟踪数据。

  • Java/Kotlin Method Sample (Sample Java Methods )
    在应用的 Java 代码执行期间,频繁捕获应用的调用堆栈。分析器会比较捕获的数据集,以推导与应用的 Java 代码执行有关的时间和资源使用信息。

    基于采样的跟踪存在一个固有的问题,那就是如果应用在捕获调用堆栈后进入一个方法并在下次捕获前退出该方法,分析器将不会记录该方法调用。如果您想要跟踪生命周期如此短的方法,应使用插桩跟踪。

111

点击record开始记录,当应用交互,然后在完成时点击 Stop。性能分析器会自动在轨迹窗格中显示其跟踪信息,如下图所示。

在这里插入图片描述

3.2.1 轨迹界面说明

我们先对上图的每个区域做一下解释:

  1. 选定范围:确定需在轨迹窗格中检查所记录时间的哪一部分。当您首次记录轨迹时,CPU 性能分析器会自动在 CPU 时间轴上选择记录的完整长度。如需仅检查已记录的时间范围中的一部分的跟踪数据,请拖动突出显示区域的边缘。

  2. “Interaction”部分:沿着时间轴显示用户互动和应用生命周期事件。

  3. “Threads”部分:沿时间轴针对每一个线程显示线程状态活动(例如运行、休眠等)和调用图表(在 System Trace 中则为轨迹事件图表)。
    使用鼠标和键盘快捷键在时间轴上导航。
    双击线程名称,或在选中线程时按 Enter 键以展开或折叠线程。
    选择某个线程即可在“Analysis”窗格中查看更多信息。 按住 Shift 或 Ctrl(Mac 上为 Command)可选择多个线程。
    选择方法调用(或 System Trace 中的轨迹事件),以在“Analysis”窗格中查看更多信息。

  4. “Analysis”窗格:就是标记 4 的那一片的整个区域,显示您选择的时间范围和线程/方法调用的跟踪数据。在此窗格中,您可以选择如何查看每个堆栈轨迹(使用“Analysis”标签页 ,下面第 5 个 ),以及如何测量执行时间(使用“Time reference”下拉菜单下面第 6 个)。

  5. “Analysis”标签页:选择如何显示跟踪数据详细信息。如需详细了解各个选项,请参阅检查跟踪数据。

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

wall clock time : 程序执行时间,包括调用其他方法的时间
thread time: cpu执行时间

  1. 搜索框,可按函数、方法、类或软件包名称过滤跟踪数据。

3.2.2 Android Studio 抓取 App 启动的 trace 信息

如果我们要在应用一启动就记录CPU活动,需要单独配置一下:

  1. 依次选择 Run > Edit Configurations

在这里插入图片描述

  1. 选择 Profiling - 勾选 Start this recording on startup - 选 callstack sample(跟踪 Java 方法)- apply -ok

在这里插入图片描述

四、trace文件分析

不管通过那种方式,我们得到trace文件后,直接拖到 android studio里面打开即可。
CPU 性能分析器中的轨迹视图提供了多种方法查看来自所记录的轨迹的信息。

  1. 对于方法轨迹和函数轨迹,您可以直接在 Threads 时间轴中查看 Call Chart,并从 Analysis 窗格中查看 Flame Chart、Top Down、Bottom Up 和 Events 标签页。

  2. 对于调用堆栈帧,您可以查看代码中已执行的部分及其调用原因。

  3. 对于系统轨迹,您可以直接在 Threads 时间轴中查看 Trace Events,并从 Analysis 窗格中查看 Flame Chart、Top Down、Bottom Up 和 Events 标签页。

提示:检查 Threads 时间轴时,您可以使用以下快捷方式:

  • 放大:按 W 或在按住 Ctrl 键的同时滚动鼠标滚轮(在 Mac 上,按住 Command 键)。
  • 缩小:按 S 或在按住 Ctrl 键的同时向后滚动鼠标滚轮(在 Mac 上,按住 Command 键)。
  • 向左平移:按 A 键或在按住空格键的同时向右拖动鼠标。
  • 向右平移:按 D 键或在按住空格键的同时向左拖动鼠标。
  • 展开或收起线程:双击线程名称,或在选中线程时按 Enter 键。

4.1 使用调用图表检查跟踪数据

举个例子,一个调用图表示例,展示了方法 D 的 Self 时间、Children 时间和 Total 时间。
在这里插入图片描述

4.2 Flame Chart

Flame Chart 标签页提供一个倒置的调用图表,用来汇总完全相同的调用堆栈
将具有相同调用方顺序的完全相同的方法或函数收集起来,并在火焰图中将它们表示为一个较长的横条。
这样更方便您查看哪些方法或函数消耗的时间最多。不过,这也意味着,横轴不代表时间轴,而是表示执行每个方法或函数所需的相对时间。

4.3 Top Down

用于显示方法等调用列表。

如图 所示,在 Top Down 标签页中展开方法 A 的节点会显示它的被调用方,即方法 B 和 D。在此之后,展开方法 D 的节点会显示它的被调用方,即方法 B 和 C,依此类推。

在这里插入图片描述

Top Down 标签提供一些信息来显示每个调用所花的 CPU 时间:
在这里插入图片描述

  • Self:方法或函数调用在执行自己的代码(而非被调用方的代码)上所花的时间,如图 1 中的方法 D 所示。
  • Children:方法或函数调用在执行它的被调用方(而非自己的代码)上所花的时间,如图 1 中的方法 D 所示。
  • Total:方法的 Self 时间和 Children 时间的总和。这表示应用在执行调用时所用的总时间,如图 1 中的方法 D 所示。

4.4 Bottom Up

Bottom Up 标签页用于按照占用的 CPU 时间由多到少(或由少到多)的顺序对方法或函数排序。您可以检查每个节点以确定哪些调用方在调用这些方法或函数上所花的 CPU 时间最多。

4.5 Events

“Events”表格列出了当前所选线程中的所有调用。

五、优缺点

运行时开销严重,整个代码运行都变得非常慢,因为traceview会抓取所有线程的所有函数的数据。
所有有可能带偏我们的优化方向。
比如有个方法xyz(),本身不耗时,但是加上traceview后,我们在文件里面发现它的耗时变长了,我们可能会错误的认为这个方法很耗时,然后花费精力在这个上面。

六、推荐阅读

Java 专栏

SQL 专栏

数据结构与算法

Android学习专栏

ddd

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

填补5G物联一张网,美格智能快速推进RedCap商用落地

自5G R17版本标准冻结以来,RedCap一直引人注目。2023年更是5G RedCap突破性发展的一年,从首款5G RedCap调制解调器及射频系统——骁龙X35发布,到国内四大运营商发布RedCap技术白皮书,芯片厂商、模组厂商、运营商及终端企业都在积极…

MySQL索引题分析

前言:该篇随笔通过一些案例,对索引相关的题进行分析。 0.准备 #1.创建test表(测试表)。 drop table if exists test; create table test( id int primary key auto_increment, c1 varchar(10), c2 varchar(10), c3 varchar(10), …

KCC@南京开源读书会-开源大咖云聚南京等你来

KCC,全称 KAIYUANSHE City Community(中文:开源社城市社区)是由开源社发起,旨在让开源社区在每个城市落地生根的地域性开源组织。自2023年2月份发起以来,我们已经在南京、上海、深圳、北京、硅谷、新加坡、…

用思维导图带你解读电子商务数据分析基本指标,产品、运营者必看

随着时代的发展,越来越多的人参与到电商之中。电商即电子商务,是依托现代信息网络技术,以商品交换为中心的新型商务贸易活动。电商可并不简单,做好电商又有哪些关键呢?别急,再此之前,需要先了解…

SunnyUI美化winform

SunnyUI美化winform 一.效果展示二.SunnyUI是什么?三.如何使用SunnyUI?3.1 将文件夹放入Debug目录下3.2 在项目文件中添加SunnyUI库3.3 添加SunnyUI.dll文件 四.使用SunnyUI库美化4.1 打开Demo程序copy 五.结语 一.效果展示 二.SunnyUI是什么? Sunny其…

【雕爷学编程】Arduino动手做(181)---Maixduino AI开发板8

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

Vue [Day1]

学习视频&#xff1a; 【2023新版Vue2Vue3基础入门到实战项目全套教程&#xff0c;自学前端vue就选黑马程序员&#xff0c;一套全通关&#xff01;】 初识VUE Vue2官网 https://v2.cn.vuejs.org Vue3官网 https://cn.vuejs.org <!DOCTYPE html> <html lang"en&…

遥感、GIS、GPS在土壤空间数据分析、适应性评价、制图、土壤普查中怎样应用?

摸清我国当前土壤质量与完善土壤类型&#xff0c;可以为守住耕地红线、保护生态环境、优化农业生产布局、推进农业高质量发展奠定坚实基础&#xff0c;为此&#xff0c;2022年初国务院印发了《关于开展第三次全国土壤普查的通知》&#xff0c;决定自2022年起开展第三次全国土壤…

无涯教程-Lua - Modules(模块)

模块就像可以使用 require 加载的库&#xff0c;并且具有包含Table的单个全局名称&#xff0c;该模块可以包含许多函数和变量。 Lua 模块 其中一些模块示例如下。 -- Assuming we have a module printFormatter -- Also printFormatter has a funtion simpleFormat(arg) -- …

js 获取指定时间+时间戳展示时分秒

开发中遇见了一个客户比较扯淡的需求 明明有可以选择时分秒的操作非不要就要懒省事&#xff0c;必须是一个时间显示成选中的年月日&#xff0c;但是时间格式要给后端传待时分秒的格式&#xff0c;列表展示也要带时分秒。 所以就处理了 let DATE: any new Date(); // 当前日期l…

ctfshow----php特性(89-104)

目录 web89 preg_match函数 、数组 web90 intval()函数、强比较 web91 正则修饰符 web92 intval()函数、弱比较 web93 八进制、小数点 web94 strpos() 函数、小数点 web95 小数点 web96 highlight_file() 下的目录路径 web97 数组 web98 三目运算符 web9…

SFP和1×9光模块的区别对比

随着网络技术的不断发展&#xff0c;光纤通信作为一种高速、高带宽的传输方式&#xff0c;得到了广泛应用。SFP和19光模块是两种常见的低速光模块&#xff0c;它们在性能和应用方面也存在着一些区别。本文易天光通信将对SFP和19光模块进行对比&#xff0c;探讨它们的特点、优势…

共建数据未来,解密CIO的所思、所惑、所愿

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 在当前快速变化的商业环境中&#xff0c;企业首席信息官&#xff08;CIO&#xff09;的角色已经从以往的技术专家转变为战略决策者和创新推动者。随着全球数字化转型步伐的加速&#xff0c;CIO们扮演着至关重要的角色&#…

无人机电力巡检方案在电网安全与维护中的应用

目前&#xff0c;无人机技术已经在各行各业都有广泛的应用&#xff0c;其中之一就是在电力巡检中的应用。无人机电力巡检方案以其高效、安全、精准的特点&#xff0c;为电网安全与维护带来了重大突破和进步。 一、无人机电力巡检方案是高效巡检的利器 传统的电力巡检方式需要人…

ClickHouse使用阿里云服务相关

目录 概念相关问题查看阿里云文档ClickHouse相关Clickhouse分布式表应用修改点 概念 1.阿里云架构 2.节点 节点是逻辑概念&#xff0c;其架构也说明了集群默认包含1个或多个节点&#xff0c;或者说是分片(shard) 节点下包含一个或者多个服务器&#xff0c;具体包含几个&#…

Java限流算法实现与应用(计数器、漏桶、令牌桶、滑动窗口)

文章目录 一、什么是限流算法二、计数器算法1、概述2、Java实现计数器算法3、优缺点4、应用 三、漏桶算法1、概述2、Java实现漏桶算法3、优缺点4、应用 四、令牌桶算法1、概述2、Java实现令牌桶算法3、应用 五、滑动窗口算法1、概述2、Java实现滑动窗口算法3、应用 参考资料 一…

MySQL 重置root 密码

5.7 版本 首先要把服务mysql57 关闭 net stop MySQL57 在安装的mysql57的程序的bin中 运行cmd&#xff08;管理员运行&#xff09; mysqld --defaults-file‘mysql存放数据的位置\my.ini’ --skip-grant-tables 上图 错误 注意&#xff1a;如果遇到mysqld: Can’t change dir…

【FAQ】视频监控EasyCVR修改参数报错“database or disk is full”排查

EasyDarwin开源流媒体视频EasyCVR安防监控平台可提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、云台控制、语音对讲、智能分析等能力。视频监控综合管理平台EasyCVR具备视频汇聚融合能力&#xff0c;平台基于云边端一体化架构&#xff0c;具有强大…

伯俊ERP和金蝶云星空单据接口对接

伯俊ERP和金蝶云星空单据接口对接 对接源平台:金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上&#xff0c;提供了标准的管理模式&#xff1b;通过标准的业务架构&#xff1a;多会计准则、多币别、多地点、多组织、多税制应用框架等&#xff0c;有效支持企业的运…

太魔幻了!计算机就业哀鸿遍野,而高考生疯狂涌向计算机专业

在张雪峰推荐的几大专业里&#xff0c;计算机专业是其中之一。近几年&#xff0c;计算机专业报考热度不减&#xff0c;但就业前景却令人堪忧&#xff0c;互联网裁员接二连三&#xff0c;许多码农找不到工作。 一位网友感叹&#xff1a;一边是计算机就业哀鸿遍野&#xff0c;一…