Android内核开发:学会分析系统的启动log

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

本文在这2篇文章的基础上,进一步介绍如何深入地分析系统启动log信息,找出Android启动启动过程中每一个部分所消耗的具体时间节点。


首先,我们给出一张比较全面的Android系统启动图(来自Embeded Android):


wKioL1WBbnDTaqQlAAJ4msbU3f0944.jpg


根据上述Android的启动框图,我们可以顺序地列出Android系统启动中涉及的几个关键步骤:


(1) Linux内核的启动


(2) Init程序启动,并启动各个本地服务(如 healthd, debuggerd等)


(3) Zygote进程启动


(4) Zygote进程初始化工作(preload class/resource)


(5) SystemServer进程启动,并启动各个Java服务(如 ActivityManager, PackageManager等 )


(7) 启动结束的标志点


如果我们能够从启动log信息中找出上述这些关键步骤的时间节点,也就可以很清晰地得到Android系统启动过程中各个模块消耗的时间了,在做系统启动优化时,也就知道该去优化哪些耗时的模块了,同样,在分析系统启动bug的时候,也就知道到底哪里出了问题了。


下面,我们以高通的APQ8064开发板(Android 4.4.2)的启动log信息为例来分析(这些log文件上传到我的Github上了:https://github.com/Jhuster/AOSP/tree/master/logs/APQ8064),其实各个Android系统都有类似的log输出,我们只需重点掌握关键节点的TAG和分析方法。


1.  配置系统的log输出


(1) 在内核log信息中打印出时间信息


在Linux kernel源码树中执行 make menuconfig,勾选下面的选项:


"Kernel hacking" -> "Show timing information on printks"


(2) 将init进程的详细log输出到dmesg文件中


修改/system/core/rootdir/init.rc,把loglevel从3改为7


2.  抓取系统启动的log信息


前面的文章已经介绍过,Android系统启动的log分为Linux内核的log和Android Logger系统的log,


抓取的方法如下:


$ adb shell dmesg > dmesg.txt

$ adb logcat -d -v time -b "main"   >  main.txt

$ adb logcat -d -v time -b "system" >  system.txt

$ adb logcat -d -v time -b "events" >  events.txt


3.  分析log信息


(1) Linux内核的启动


Linux内核启动的log都位于dmesg.txt文件中,从log文件开始直到出现下面这条消息则标志着Linux内核已经完成了启动:


"Freeing init memory"


因此,我们从dmesg.txt文件中即可得到APQ8064开发板的Linux内核启动只用了6.613s,如图所示:


wKioL1WBcBOQBimqAAAouZFmP0c299.jpg


(2) Init程序启动,并启动各个本地服务(如 healthd, debuggerd等)


Init程序的log信息也位于dmesg.txt文件中,我们可以通过检索“init”找到该程序的打印消息。


通过检索“init starting”,我们可以找到init进程启动了哪些本地服务,如:


wKiom1WBbouiU3HlAAeKNfLsVoY385.jpg


(3) Zygote进程启动


zygote进程是在init进程中启动的,因此,我们从上面init进程的输出log中,检索"zygote"就可以找到zygote进程何时启动的,如图所示:


wKioL1WBcGLxLbvZAAAxIazSkdg520.jpg


(4) Zygote进程初始化工作(preload class/resource)


Zygote进程所输出的log信息被放到/dev/log/main文件中了,因此,我们需要检索main.txt得到Zygote的log信息。


由于后续所有的Android应用程序都是从Zygote进程fork出来的,Android系统为了提高应用程序的启动速度,会在Zygote进程初始化过程中加载一些常用的java class和资源文件到进程的内存中,从而共享常用的class和resourse资源。这个过程我们可以通过检索"preload"标签得到这个过程所消耗的时间,如图所示:


wKioL1WBcI2QQ24VAADbZAseC7w046.jpg


(5) SystemServer进程启动,并启动各个Java服务(如 ActivityManager, PackageManager等 )


Zygote完成了初始化工作后就启动SystemServer进程了,SystemServer进程的log信息被放到了/dev/log/system文件中了,因此,我们需要检索system.txt文件得到SystemServer的log信息,如图所示:


wKiom1WBbv6QYTP9AA1W3Tk_JEk001.jpg


(7) 启动结束的标志点


《Android内核开发:如何统计系统启动时间》这篇文章已经详细地介绍了如何找到启动结束的时间,这里选取其中一种方法再复述一遍,就是检索dmesg文件的 "boot_completed" 标志,如图所示,我们知道了整个系统一共耗时29.913s完成启动:


wKiom1WBbyHiG2-XAABTfQTyDMI651.jpg



本文转自 Jhuster 51CTO博客,原文链接:http://blog.51cto.com/ticktick/1662911,如需转载请自行联系原作者

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
3月前
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
355 122
基于docker搭建监控系统&日志收集
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
2月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
250 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
217 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
549 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
6月前
|
监控 API 开发工具
HarmonyOS Next的HiLog日志系统完全指南:从入门到精通
本文深入解析HarmonyOS Next的HiLog日志系统,涵盖日志级别、核心API、隐私保护与高级回调功能,助你从入门到精通掌握这一重要开发工具。
363 1
|
3月前
|
开发工具 Android开发
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
509 11
X Android SDK file not found: adb.安卓开发常见问题-Android SDK 缺少 `adb`(Android Debug Bridge)-优雅草卓伊凡
|
2月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
133 0
|
3月前
|
Java 开发工具 Maven
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
204 6
|
3月前
|
Ubuntu
在Ubuntu系统上设置syslog日志轮替与大小限制
请注意,在修改任何系统级别配置之前,请务必备份相应得原始档案并理解每项变更可能带来得影响。
292 2

热门文章

最新文章