手机重启问题分析指南

640?wx_fmt=gif

640?wx_fmt=other

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

640?wx_fmt=other

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

一、SWT 手机重启问题简介

一、 SWT 手机重启问题简介

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

判断阻塞的方法:

  • 1.利用 Services 注册monitor 去Check

主要是: AMS、 Foreground Thread

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

主要是: Main Thread、UI Thread、IO Thread、Display Thread、WMS 、Other Services。

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

640?wx_fmt=other

SWT 判断阻塞的方法

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

SWT 处理流程:1.每半分钟check 一次system_server 进程:dump 一次system_server 的backtrace

2.一分钟卡住后kill,并重新计数:dump,并kill掉 system_server进程 ,否则重新计时。

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

640?wx_fmt=other

SWT 处理流程

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

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

主要导致的原因如下:

640?wx_fmt=other

检查SWT 原因分类

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

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

640?wx_fmt=other

SWT 流程分析

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

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

线程被 Block 搜索关键字 held by

640?wx_fmt=other

确认线程关系

线程被 Waiting 结合代码分析。

640?wx_fmt=other

确认线程关系

2.线程死锁

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

640?wx_fmt=other

线程死锁

640?wx_fmt=other

线程死锁

3.Binder的Server 端卡住

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

IPCThreadState::waitForResponseIPCThreadState::talkWithDriver

640?wx_fmt=other

Bind的Server端卡住

640?wx_fmt=other

Bind的Server端卡住

4.SurfaceFlinger 卡住导致重启

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

640?wx_fmt=other

SurfaceFlinger 卡住

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

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

640?wx_fmt=other

Native 方法执行时间过长

6.Zygote Fork 进程时卡住

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

640?wx_fmt=other

Zygote Fork 进程时卡住

7.Dump 时间过长

Dump 超过60s 可能会引起手机重启。关键字dumpStackTracesdumpStackTraces process

640?wx_fmt=other

Dump 时间过长

640?wx_fmt=other

前面有ANR 发生

640?wx_fmt=other

前面有ANR 发生

640?wx_fmt=other

前面有fatal JE NE KE 等Exception发生

640?wx_fmt=other

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

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

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

640?wx_fmt=jpeg

640?wx_fmt=jpeg

长按识别二维码,领福利

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

如有侵权,请联系小编,小编对此深感抱歉,届时小编会删除文章,立即停止侵权行为,请您多多包涵

为您每个 “在看”  而怦然心动640?wx_fmt=gif

posted @ 2019-06-09 10:00  程序员Android的博客  阅读(287)  评论(0编辑  收藏  举报