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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 本文介绍了如何在安卓系统中配置和使用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. 结束语

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

相关文章
|
16天前
|
移动开发 监控 前端开发
构建高效Android应用:从优化布局到提升性能
【7月更文挑战第60天】在移动开发领域,一个流畅且响应迅速的应用程序是用户留存的关键。针对Android平台,开发者面临的挑战包括多样化的设备兼容性和性能优化。本文将深入探讨如何通过改进布局设计、内存管理和多线程处理来构建高效的Android应用。我们将剖析布局优化的细节,并讨论最新的Android性能提升策略,以帮助开发者创建更快速、更流畅的用户体验。
43 10
|
25天前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
43 0
|
2天前
|
Java Android开发 UED
安卓应用开发中的内存管理优化技巧
在安卓开发的广阔天地里,内存管理是一块让开发者既爱又恨的领域。它如同一位严苛的考官,时刻考验着开发者的智慧与耐心。然而,只要我们掌握了正确的优化技巧,就能够驯服这位考官,让我们的应用在性能和用户体验上更上一层楼。本文将带你走进内存管理的迷宫,用通俗易懂的语言解读那些看似复杂的优化策略,让你的开发之路更加顺畅。
10 2
|
3天前
|
Java Android开发 开发者
安卓应用开发中的线程管理优化技巧
【9月更文挑战第10天】在安卓开发的海洋里,线程管理犹如航行的风帆,掌握好它,能让应用乘风破浪,反之则可能遭遇性能的暗礁。本文将通过浅显易懂的语言和生动的比喻,带你探索如何优雅地处理安卓中的线程问题,从基础的线程创建到高级的线程池运用,让你的应用运行更加流畅。
|
16天前
|
Android开发
Android 配置蓝牙遥控器键值
本文详细介绍了Android系统中配置蓝牙遥控器键值的步骤,包括查看设备号、配置键位映射文件(kl文件)、部署kl文件以及调试过程,确保蓝牙遥控器的按键能正确映射到Android系统对应的按键功能。
28 1
|
17天前
|
搜索推荐 Android开发
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
本文分享了不同价位电脑配置对于编译AOSP安卓系统源代码的影响,提供了从6000元到更高价位的电脑配置实例,并比较了它们的编译时间,以供学习AOSP源代码时电脑配置选择的参考。
35 0
学习AOSP安卓系统源代码,需要什么样的电脑?不同配置的电脑,其编译时间有多大差距?
|
1月前
|
XML 安全 Android开发
Flutter配置Android和IOS允许http访问
Flutter配置Android和IOS允许http访问
35 3
|
1月前
|
调度 Android开发 开发者
【颠覆传统!】Kotlin协程魔法:解锁Android应用极速体验,带你领略多线程优化的无限魅力!
【8月更文挑战第12天】多线程对现代Android应用至关重要,能显著提升性能与体验。本文探讨Kotlin中的高效多线程实践。首先,理解主线程(UI线程)的角色,避免阻塞它。Kotlin协程作为轻量级线程,简化异步编程。示例展示了如何使用`kotlinx.coroutines`库创建协程,执行后台任务而不影响UI。此外,通过协程与Retrofit结合,实现了网络数据的异步加载,并安全地更新UI。协程不仅提高代码可读性,还能确保程序高效运行,不阻塞主线程,是构建高性能Android应用的关键。
37 4
|
13天前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
66 0
|
14天前
|
存储 缓存 前端开发
安卓开发中的自定义控件实现及优化策略
【8月更文挑战第31天】在安卓应用的界面设计中,自定义控件是提升用户体验和实现特定功能的关键。本文将引导你理解自定义控件的核心概念,并逐步展示如何创建一个简单的自定义控件,同时分享一些性能优化的技巧。无论你是初学者还是有一定经验的开发者,这篇文章都会让你对自定义控件有更深的认识和应用。