
极力推荐文章:欢迎收藏
Android 干货分享

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
一、SWT 手机重启问题简介
二、SWT 手机重启问题处理流程
三、SWT 手机重启问题的原因
四、SWT 手机重启问题分析流程
五、SWT 手机重启问题分析举例
六、Android O以上导 Log 注意事项
SWT(Software Watch Dog ) 主要用来监控SystemServer等重要线程/Service 的运行情况。如果发现其阻塞超过 60s ,看门狗进程就会把系统重启,进而保证系统可以恢复到正常状态。
判断阻塞的方法:
主要是: AMS、 Foreground Thread
主要是: Main Thread、UI Thread、IO Thread、Display Thread、WMS 、Other Services。
SWT 判断阻塞的方法 图文描述如下:

SWT 处理流程:
1.每半分钟check 一次system_server 进程:
检查系统是否卡住,如果卡住,dump 一次system_server 的backtrace
2.一分钟卡住后kill,并重新计数:
如果卡住,第二次dump,并kill掉 system_server进程 ,否则重新计时。
3.SWT 处理大致流程如下:

导致 SWT重启原因的原因有很多种。
主要导致的原因如下:

首先搜索关键 watchdog,查看是否有重启发生。

线程被 Block 搜索关键字 held by

线程被 Waiting 结合代码分析。

确认Block的线程是否有闭环的死锁关系。


线程状态 Native,并且callstack中含有一对
IPCThreadState::waitForResponse
IPCThreadState::talkWithDriver
的明显特征。


搜索关键字 I watchdog ,
查看是否有 surfaceflinger hang,默认卡住40s,就会重启。

线程状态 Native,查看是否有
PowerManagerService.nativeSetAutoSuspend

线程状态Native,查看是否有
Process.zygoteSendArgsAndGetResult

Dump 超过60s 可能会引起手机重启。
搜索关键字
dumpStackTraces
或
dumpStackTraces process





Android O 以上的 mtklog 和db 不在同一个目录,需要执行以下adb命令 导Log.
//1. 导 MTK log
adb pull /sdcard/mtklog
//2. 导 AEE log,如果没有,请执行第3步
adb pull /data/aee_exp
//3.导 data 下MTK缓存 的aee log
adb pull /data/vendor/mtklog/aee_exp
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

原文:https://www.cnblogs.com/wangjie1990/p/11326910.html