Android 重启

由于只是私下写的,并没有具体的log pattern或者代码,主要是思路

1.重启类型:

System Server Java Crash

System Server Native Crash

SWT(Watchdog)

Surfacefinger died --可能他依赖的东西死掉,或者本身发生fd leak之类

2.重启流程log

//网上引用的log,可能具体项目有变化,思路一样,重启代码是在SystemServer.java
01-01 12:56:30.427526   881   881 D AndroidRuntime: >>>>>> START com.android.internal.os.ZygoteInit uid 0 <<<<<<

01-01 12:56:30.427702   881   881 I boot_progress_start: 26858   //zygote start pid881表示zygote
01-01 12:56:33.985307   881   881 I boot_progress_preload_start: 30415
01-01 12:56:36.903491   882   882 I boot_progress_preload_end: 33333
01-01 12:56:36.965987  1386  1386 I boot_progress_system_run: 33396 //system_server(pid 1386)启动 
01-01 12:56:37.478227  1386  1386 I boot_progress_pms_start: 33908
01-01 12:56:37.571837  1386  1386 I boot_progress_pms_system_scan_start: 34002
01-01 12:57:24.897414  1386  1386 I boot_progress_pms_data_scan_start: 81327
01-01 12:57:24.920992  1386  1386 I boot_progress_pms_scan_end: 81351
01-01 12:57:26.433115  1386  1386 I boot_progress_pms_ready: 82863
01-01 12:xx:xx.xxxxxx  1386  1386 I boot_progress_enable_screen //boot_progress_enable_screen表示重启完成

boot_progress_start 系统进入用户空间,标志着kernel启动完成,本例中可以看出kernel启动耗时30s左右
boot_progress_preload_start Zygote启动
boot_progress_preload_end Zygote结束
boot_progress_system_run SystemServer ready,开始启动Android系统服务,如PMS,APMS等
boot_progress_pms_start PMS开始扫描安装的应用
boot_progress_pms_system_scan_start PMS先行扫描/system目录下的安装包
boot_progress_pms_data_scan_start PMS扫描/data目录下的安装包
boot_progress_pms_scan_end PMS扫描结束
boot_progress_pms_ready PMS就绪
boot_progress_ams_ready AMS就绪
boot_progress_enable_screen AMS启动完成后开始激活屏幕,从此以后屏幕才能响应用户的触摸,它在WindowManagerService发出退出开机动画的时间节点之前,而真正退出开机动画还会花费少许时间,具体依赖animation zip 包中的desc.txt。wm_boot_animation_done才是用户感知到的动画结束时间节点
sf_stop_bootanim SF设置service.bootanim.exit属性值为1,标志系统要结束开机动画了,可以用来跟踪开机动画结尾部分消耗的时间
wm_boot_animation_done 开机动画结束,这一步用户能直观感受到开机结束

用于:1.确认是不是有重启,在event log搜索"boot_progress_",有上述log就表示有重启,在确认是不是异常重启
2.可以查看重启失败卡在什么位置,就看上述流程段在那里,然后在通过pid tid搜索block log的原因(一般block在开机log原因包含1.重启流程失败2.卡在OOBE)


3.System hung分析流程

1.确认时间搓
2.查看systemserver是不是活的,可以pid查看
3.死了就是什么原因死的,活的继续
4.看是不是watchdog线程也block,导致不能重启hung
5.system_server binder是否用尽
6.是不是按键驱动有问题,导致按了没反应,
7.事件到达了framework(流程notify dispatch finish),但是block在framework端
8.是否有系统问题(cpu  memory)
9.查看有没有异常log,比如很多通知,很多startService之类的log
(leakage类型:cursor leakage,window leakage, activity leakage,process leakage ,fd leakage,service leakage,receiver leakage)

备注:

//假如System_server中Block在此log表示,system_server 32binder沾满,没有可用binder
at android.os.Binder.blockUntilThreadAvailable(Native method)



猜你喜欢

转载自blog.csdn.net/wd229047557/article/details/79510532