自学内容网 自学内容网

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

一、Perfetto内存分析

1.1Prefetto内存分析优势

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

1.1.1Perfetto内存分析操作

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

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

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-CSDN博客

Perfetto详细解析-CSDN博客

应用卡顿优化_perfetto gpu-CSDN博客

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

2.1.3开发过程中的性能管控

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


原文地址:https://blog.csdn.net/Cmatrix204/article/details/142465209

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!