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


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. 结束语

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

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Android系统性能优化对于解决卡顿、提升稳定性和优化续航方面起着重要的作用。 首先,在解决卡顿问题上,开发人员需要关注应用程序的UI线程。为了确保应用程序的流畅运行,可以采用以下优化措施:优化布局文件,减少层级嵌套;使用异步加载图片,避免在主线程中进行网络请求等耗时操作;合理利用缓存机制,避免重复加载数据。此外,还可以针对卡顿问题进行性能分析,通过工具查找耗时操作,并进行相应的优化。 其次,在提高系统稳定性方面,开发人员需要考虑异常崩溃的处理和内存管理。异常崩溃处理可通过捕获并记录崩溃异常来及时解决问题和改进代码。内存管理方面,应避免内存泄漏和过度分配内存,使用系统提供的工具来进行内存管理和优化。 最后,在续航优化上,需要考虑电源管理和资源使用的合理分配。通过使用省电模式、灵活控制后台任务和限制应用程序在后台运行等方式,最大程度地延长设备的电池寿命。另外,合理管理资源,避免过度使用CPU、网络和图形渲染等资源,有助于降低能耗并优化系统续航。 总之,Android系统性能优化是一个综合性的工作,需要开发人员关注卡顿问题、提升稳定性和优化续航方面的问题。通过合理使用工具和采取相应的优化措施,可以实现系统性能的有效提升。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿迷创客

感谢!您的支持是我写作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值