安卓系统调试与优化:(一)bootchart 的配置和使用

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 本文介绍了如何在安卓系统中配置和使用bootchart工具来分析系统启动时间,包括安装工具、设备端启用bootchart、PC端解析数据及分析结果的详细步骤。

bootchart 一般用于系统启动时间的分析,可为调试人员快速地提供一副体现CPU、IO、进程启动情况的,以时间序列展开的图表。

Android 目前已将bootchart集成到源码中,只需要在系统运行时设定其标志位即可采集到启动信息,非常方便,下面就介绍其使用方法。

1. 基础步骤

(1)安装必要工具

(2)在设备端使能bootchart,抓取数据

(3)在PC端解析bootchart数据,绘制成图

(4)分析bootchart.png

2. 安装工具

在grab-bootchart.sh中会调用到pybootchartgui,所以避免不开,需要安装:

  • 在ubuntu 18.04 上,找不到bootchart,经过测试,安装下面这个即可
sudo apt-get install pybootchartgui
  • 在ubuntu 16.04 上,可安装下面两个工具
sudo apt-get install bootchart
sudo apt-get install pybootchartgui
  • 置于ubuntu 20.04上,以上两个工具均为找到安装方法,知道的同学楼下留言区分享一下

3. 设备端:使能bootchart标志位

adb connect 192.168.103.23
adb root
adb shell 'touch /data/bootchart/enabled'

4. PC端:方法1. 使用grab-bootchart.sh在线解析

注意:使用grab-bootchart.sh前,需要先建立好adb连接,这个工具会自动从adb连接的设备上拉去之前生成的bootchart数据,自动生成bootchart.png文件

szhou@bcsrv_02:~/aosp$ adb devices
List of devices attached
192.168.103.23:5555     device

szhou@bcsrv_02:~/aosp$ system/core/init/grab-bootchart.sh
parsing '/tmp/android-bootchart/bootchart.tgz'
parsing 'header'
parsing 'proc_stat.log'
parsing 'proc_ps.log'
warning: no parent for pid '2' with ppid '0'
parsing 'proc_diskstats.log'
merged 0 logger processes
pruned 142 process, 0 exploders, 19 threads, and 0 runs
False
bootchart written to 'bootchart.png'
system/core/init/grab-bootchart.sh: 21: system/core/init/grab-bootchart.sh: gnome-open: not found
Clean up /tmp/android-bootchart/ and ./bootchart.png when done
szhou@bcsrv_02:~/aosp$

5. PC端:方法2. 使用工具手动解析

(1)设备端压缩bootchart文件

console:/data/bootchart # ls 
enabled header proc_diskstats.log proc_ps.log proc_stat.log 
console:/data/bootchart # tar -czf bootchart.tgz *
console:/data/bootchart # ls 
bootchart.tgz enabled header proc_diskstats.log proc_ps.log proc_stat.log 
console:/data/bootchart #

(2)PC端解析bootchart文件

zhou@yanfa-zs-502143:~$ adb connect 192.168.103.23
* daemon not running; starting now at tcp:5037
* daemon started successfully connected to 192.168.103.23:5555 

szhou@yanfa-zs-502143:~$ adb root 
adbd is already running as root 

szhou@yanfa-zs-502143:~$ adb connect 192.168.103.23 
already connected to 192.168.103.23:5555 

szhou@yanfa-zs-502143:~$ adb pull /data/bootchart/bootchart.tgz .
/data/bootchart/bootchart.tgz: 1 file pulled. 8.3 MB/s (617106 bytes in 0.071s) 

szhou@yanfa-zs-502143:~$ adb shell sync 
szhou@yanfa-zs-502143:~$ bootchart bootchart.tgz parsing 'bootchart.tgz'
parsing 'enabled'
parsing 'header'
parsing 'proc_diskstats.log'
parsing 'proc_ps.log'
warning: no parent for pid '2' with ppid '0'
parsing 'proc_stat.log'
merged 0 logger processes pruned 142 process, 0 exploders, 19 threads, and 0 runs False bootchart written to 'bootchart.png'
szhou@yanfa-zs-502143:~$

6. 解析bootchart PNG的数据

  • 如下图分为几个部分,首先是一个头部信息,在最后部分可以看到启动时间为time:00:18:42,即启动到boot.completed=1所使用的时间,我们直到开机动画的结束也是以这个标志位为准,可以抓到如下打印:

    • console:/ $ [   18.282519] ----- Boot animation finish -----
      : [   18.287149] [AT][AN][finish boot]
      
  • 其次三部分图表,CPU、Disk、进程列表,时间轴从左到右,每一小格子为1秒

  • 有时候我们需要注意进程列表中,CPU执行时间有停止、跨越一段时间、继续执行的进程,这个进程也许是因为等待某些资源,导致执行被挂起

image-20210907112005699

7. 结束语

最近开始需要使用到性能分析工具,打算再出一个系列的文章,欢迎交流~

相关文章
|
4月前
|
移动开发 监控 前端开发
构建高效Android应用:从优化布局到提升性能
【7月更文挑战第60天】在移动开发领域,一个流畅且响应迅速的应用程序是用户留存的关键。针对Android平台,开发者面临的挑战包括多样化的设备兼容性和性能优化。本文将深入探讨如何通过改进布局设计、内存管理和多线程处理来构建高效的Android应用。我们将剖析布局优化的细节,并讨论最新的Android性能提升策略,以帮助开发者创建更快速、更流畅的用户体验。
72 10
|
1月前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
49 8
|
3月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
73 20
Android经典面试题之图片Bitmap怎么做优化
|
2月前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin多线程优化策略
【10月更文挑战第11天】本文探讨了如何在Kotlin中实现高效的多线程方案,特别是在Android应用开发中。通过介绍Kotlin协程的基础知识、异步数据加载的实际案例,以及合理使用不同调度器的方法,帮助开发者提升应用性能和用户体验。
64 4
|
1月前
|
安全 Android开发 iOS开发
深入探索iOS与Android系统的差异性及优化策略
在当今数字化时代,移动操作系统的竞争尤为激烈,其中iOS和Android作为市场上的两大巨头,各自拥有庞大的用户基础和独特的技术特点。本文旨在通过对比分析iOS与Android的核心差异,探讨各自的优势与局限,并提出针对性的优化策略,以期为用户提供更优质的使用体验和为开发者提供有价值的参考。
|
2月前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
2月前
|
Java Android开发 Windows
玩转安卓之配置gradle-8.2.1
为安卓开发配置Gradle 8.2.1,包括下载和解压Gradle、配置环境变量、修改配置文件以增加国内镜像,以及在Android Studio中配置Gradle和JDK的过程。
110 0
玩转安卓之配置gradle-8.2.1
|
3月前
|
Java Android开发 UED
安卓应用开发中的内存管理优化技巧
在安卓开发的广阔天地里,内存管理是一块让开发者既爱又恨的领域。它如同一位严苛的考官,时刻考验着开发者的智慧与耐心。然而,只要我们掌握了正确的优化技巧,就能够驯服这位考官,让我们的应用在性能和用户体验上更上一层楼。本文将带你走进内存管理的迷宫,用通俗易懂的语言解读那些看似复杂的优化策略,让你的开发之路更加顺畅。
76 2
|
3月前
|
Java Android开发 开发者
安卓应用开发中的线程管理优化技巧
【9月更文挑战第10天】在安卓开发的海洋里,线程管理犹如航行的风帆,掌握好它,能让应用乘风破浪,反之则可能遭遇性能的暗礁。本文将通过浅显易懂的语言和生动的比喻,带你探索如何优雅地处理安卓中的线程问题,从基础的线程创建到高级的线程池运用,让你的应用运行更加流畅。
|
4月前
|
Android开发
Android 配置蓝牙遥控器键值
本文详细介绍了Android系统中配置蓝牙遥控器键值的步骤,包括查看设备号、配置键位映射文件(kl文件)、部署kl文件以及调试过程,确保蓝牙遥控器的按键能正确映射到Android系统对应的按键功能。
245 1