乐趣区

SWT-手机重启问题分析指南

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

阅读五分钟,每日十点,和您一起终身学习,这里是程序员 Android

本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:

一、SWT 手机重启问题简介
二、SWT 手机重启问题处理流程
三、SWT 手机重启问题的原因
四、SWT 手机重启问题分析流程
五、SWT 手机重启问题分析举例
六、Android O 以上导 Log 注意事项

一、SWT 手机重启问题简介

SWT(Software Watch Dog) 主要用来监控 SystemServer重要线程 /Service 的运行情况。如果发现其阻塞超过 60s , 看门狗进程就会把系统重启,进而保证系统可以恢复到正常状态。

判断阻塞的方法

  • 1. 利用 Services 注册 monitor 去 Check

主要是:AMSForeground Thread

    1. 发送 handler 到重要的 Loop 线程来 Check 是否阻塞。

主要是:Main ThreadUI ThreadIO ThreadDisplay ThreadWMSOther Services

SWT 判断阻塞的方法 图文描述如下:

二、SWT 手机重启问题处理流程

SWT 处理流程:
1. 每半分钟 check 一次 system_server 进程
检查系统是否卡住,如果卡住,dump 一次system_serverbacktrace

2. 一分钟卡住后 kill,并重新计数
如果卡住,第二次 dump,并killsystem_server进程,否则重新计时。

3.SWT 处理大致流程如下:

三、SWT 手机重启问题的原因

导致 SWT 重启原因的原因有很多种。

主要导致的原因如下:

四、SWT 手机重启问题分析流程

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

五、SWT 手机重启问题分析举例

1. 分析 trace,确认线程关系

线程被 Block 搜索关键字 held by

线程被 Waiting 结合代码分析。

2. 线程死锁

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

3.Binder 的 Server 端卡住

线程状态 Native,并且 callstack 中含有一对

IPCThreadState::waitForResponse
IPCThreadState::talkWithDriver
的明显特征。

4.SurfaceFlinger 卡住导致重启

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

5.Native 方法执行时间过长导致重启

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

6.Zygote Fork 进程时卡住

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

7.Dump 时间过长

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

dumpStackTraces process

六、Android O 以上导 Log 注意事项

Android O 以上的 mtklogdb 不在同一个目录,需要执行以下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

至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!

退出移动版