Perfetto-Android开发分析神器(性能、内存、线程调度)

一、Perfetto内存分析

1.1Prefetto内存分析优势

        Prefetto相比其他的sysmem、sysinfo或者追踪堆栈的方式进行内存相关问题的追踪具有更强的可视化以及调用层级更加详细的优势,很多时候能精确到某一个结构体,更加便于在内存泄漏环境下的问题定位。

1.1.1Perfetto内存分析操作

        设置脚本抓取对应场景下的perfetto文件,直接拖拽使用开源的perfetto网站打开,通过点击图示的菱形内存块,会详细出现内存的层级调用,一般会显示到最后的一个调用或者结构体。对比不同时刻的内存,可以看到第一个大块有内存一直上升,结合其中的栈堆,分析并解决即可。有时很小泄露,不容易看出,可以反复很多次操作应用后,对比前后数据

perfetto更多详细信息可以参考以下链接Android性能优化--Perfetto分析native内存泄露_perfetto native内存-优快云博客

1.2其他方式的内存泄漏处理

1.1.2.1sysmeminfo查看内存泄漏

        以下是dump sysmeminfo相关信息拿到的堆栈使用情

况,这种方式可以通过结束相关场景后的信息看到是否有内存泄漏,但是对于定位泄漏点来说并不直观。

1.1.2.2 alloc堆栈调用追内存泄漏

       以下是通过在alloc调用上打tag进行内存泄漏问题分析的结果,是可以定位到内存泄漏的库或者函数调用接口,但是实际使用过程会发现手机卡的要死,并不能很好的抓取出来有限的分析html文件,需要极大的耐心。

二、Perfetto 性能分析(线程调度、CPU占用)

2.1Perfetto线程状态分析

    Perfetto 会用不同的颜色来标识不同的线程状态, 在每个方法上面都会有对应的线程状态来标识目前线程所处的状态,通过查看线程状态我们可以知道目前的瓶颈是什么

2.1.1Sleep线程异常互斥问题分析

      我们在实际解决问题时,经常会写一下互斥锁确保一下调用的时序问题,但是又往往会因为这些锁导致线程互斥,引发一系列的问题。以下是用perftto进行sleep线程的具体解决方案,可以只观的看出线程的唤醒状态或者等待机制。

2.1.2Runnable线程等待问题分析

        以下三个图可以直观的反应出用perfetto分析性能问题时,Runnable线程被挂起的原因,图一可以看出线程的等待时间,图二、图三可以看到此时CPU调用率,是否跑在了一个CPU核上,或者哪个线程占用了大量资源,分析出具体问题再进行针对性的处理优化。

Android性能分析工具-Perfetto基本使用_android perfetto-优快云博客

Perfetto详细解析-优快云博客

应用卡顿优化_perfetto gpu-优快云博客

性能分析相关问题可查看以上链接

2.1.3开发过程中的性能管控

       个人认为Perfetto性能分析过程中最好用的是自带的CPU占用扇形图表,不管在开发过程中还是后期的优化,都可以直观分析出不同线程占用的CPU比例,甚至可以量化成多少M,对于优化量级以及实际的负载有很直观的数据表现

<think>好的,我现在需要帮助用户了解如何在Android平台上使用Perfetto来监控CPU使用率和负载。首先,我需要回忆一下Perfetto的基本知识,它是什么,以及它在Android系统中的作用。Perfetto是Google开发的一个性能分析工具,用于跟踪和分析系统及应用的性能数据,包括CPU、内存、电池等。 接下来,用户的问题具体是关于CPU负载和使用率的统计。我需要确定Perfetto如何收集这些数据。记得Perfetto可以通过配置文件(trace config)来定义需要收集的数据类型和参数。可能需要指导用户如何创建这样的配置文件,特别是针对CPU的部分。 然后,我需要考虑用户可能的操作步骤:如何启用开发者选项和USB调试,如何安装Perfetto,如何启动跟踪,以及如何分析结果。这些步骤需要详细但清晰,适合不同水平的用户。例如,启用USB调试可能对新手来说需要指导,而生成配置文件可能需要提供示例代码。 另外,用户可能需要了解如何解析生成的数据。Perfetto的跟踪文件可以在Perfetto UI中进行分析,这里需要说明如何上传文件,查看CPU频率、核心使用情况、线程调度等信息。可能还需要提到一些高级分析技巧,比如筛选特定进程或线程,查看上下文切换次数等。 同时,要考虑到用户可能遇到的常见问题,比如权限不足、设备不兼容、数据解读困难等。因此,在回答中可能需要包含一些注意事项,比如需要root权限的部分,或者推荐在特定Android版本上使用。 还需要参考提供的引用内容,但看起来这些引用主要关于内存分析、ActivityTaskManagerService和systrace工具。虽然用户的问题是关于Perfetto和CPU的,但可能需要确认是否有相关内容可以借鉴。例如,引用[3]提到了systrace,而Perfetto实际上是systrace的升级版,因此可以提到两者的关系,但重点放在Perfetto上。 最后,生成相关问题时要确保问题与主题相关,能够帮助用户进一步探索。例如,如何自动化监控、与其他工具的比较、优化CPU使用率的方法等。 现在,我需要将以上思考整理成一个结构化的回答,分步骤说明如何使用Perfetto监控CPU,并确保涵盖配置、数据收集、分析以及注意事项。同时,提供相关问题供用户深入探讨。</think>以下是如何使用PerfettoAndroid平台上统计CPU负载和使用率的完整指南: ### 一、环境准备 1. 开启开发者选项:进入手机设置 > 关于手机 > 连续点击"版本号"7次 2. 启用USB调试:开发者选项中打开"USB调试"和"USB安装" 3. 安装Perfetto工具链: ```bash adb install -r path/to/perfetto.apk ``` ### 二、配置跟踪参数 创建`cpu_trace.cfg`配置文件: ```json buffers: { size_kb: 10240 fill_policy: DISCARD } data_sources: { config { name: "linux.ftrace" ftrace_config { ftrace_events: "sched/sched_switch" ftrace_events: "power/cpu_frequency" ftrace_events: "cpu/cpu_idle" } } } duration_ms: 10000 # 跟踪时长10秒 ``` ### 三、启动跟踪会话 通过ADB执行命令: ```bash adb shell perfetto --txt -c /data/local/tmp/cpu_trace.cfg -o /data/local/tmp/trace.pftrace ``` ### 四、数据分析流程 1. 导出跟踪文件: ```bash adb pull /data/local/tmp/trace.pftrace ``` 2. 使用Perfetto可视化分析- 访问[Perfetto UI](https://ui.perfetto.dev) - 点击"Open trace file"上传.pftrace文件 3. 关键指标查看: - CPU频率曲线:筛选`power/cpu_frequency`事件 - 核心利用率:查看`sched/sched_switch`统计 - 线程调度细节:使用"Slice details"面板 ### 五、高级配置技巧 统计各进程CPU使用率: ```json data_sources: { config { name: "linux.process_stats" target_buffer: 0 process_stats_config { scan_all_processes_on_start: true proc_stats_poll_ms: 1000 # 采样间隔 } } } ``` ### 六、注意事项 1. Android 9+ 系统原生集成Perfetto,低版本需要手动部署 2. 完整CPU负载分析建议跟踪时长≥30秒 3. 需要`android.permission.DUMP`权限[^2] 4. 核心休眠状态可通过`cpu_idle`事件追踪
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值