SWT 重启问题分析指南

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

1、SWT 手机重启问题简介
2、SWT 手机重启问题处理流程
3、SWT 手机重启问题的缘由
4、SWT 手机重启问题分析流程
5、SWT 手机重启问题分析举例
6、Android O以上导 Log 注意事项

1、 SWT 手机重启问题简介

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

判断阻塞的方法微信

  • 1.利用 Services 注册monitor 去Check

主要是: AMSForeground Threadoop

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

主要是: Main ThreadUI ThreadIO ThreadDisplay ThreadWMSOther Services测试

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

SWT 判断阻塞的方法

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

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

2.一分钟卡住后kill,并从新计数
若是卡住,第二次dump,并killsystem_server进程 ,不然从新计时。3d

3.SWT 处理大体流程以下:code

SWT 处理流程

3、 SWT 手机重启问题的缘由

致使 SWT 重启缘由的缘由有不少种。server

主要致使的缘由以下:

检查SWT 缘由分类

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

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

SWT 流程分析

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

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

线程被 Block 搜索关键字 held by

确认线程关系

线程被 Waiting 结合代码分析。

确认线程关系

2.线程死锁

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

线程死锁

线程死锁

3.Binder的Server 端卡住

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

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

Bind的Server端卡住

Bind的Server端卡住

4.SurfaceFlinger 卡住致使重启

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

SurfaceFlinger 卡住

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

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

Native 方法执行时间过长

6.Zygote Fork 进程时卡住

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

Zygote Fork 进程时卡住

7.Dump 时间过长

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

dumpStackTraces process

Dump 时间过长

前面有ANR 发生

前面有ANR 发生

前面有fatal JE NE KE 等Exception发生

自动化测试脚本有call dumpsys 去dump 系统信息

6、 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

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

微信关注公众号:  程序员Android,领福利

相关文章
相关标签/搜索