SWT 手机重启问题分析

极力推荐Android 开发大总结文章:欢迎收藏
程序员Android 力荐 ,Android 开发者需要的必备技能

 

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

1.SWT 手机重启问题 (阻塞60s 系统重启)简介
2.SWT 手机重启问题处理流程
3.SWT 手机重启问题的原因
4.SWT 手机重启问题分析流程
5.SWT 手机重启问题分析举例

欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息

微信公众号:ProgramAndroid

我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。

1. SWT 手机重启问题 (阻塞60s 系统重启)简介

SWT(Software Watchdog ) 主要用来监控SystemServer 重要线程/Service 的运行情况。
如果判断阻塞 60s ,就会把系统重启,来保证系统恢复正常状态。

判断阻塞的方法

  • 利用Services 注册monitor 去Check

主要是: AMS、 Foreground Thread

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

主要是: Main ThreadUI ThreadIO ThreadDisplay ThreadWMS 、Other Services

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

SWT 判断阻塞的方法

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

SWT 处理流程:
半分钟
检查系统是否卡住,如果卡住,dump 一次system_server 的backtrace

一分钟
如果卡住,第二次dump,并kill掉 system_server ,重新计时。

SWT 处理大致流程如下:

SWT 处理流程

3. SWT 手机重启问题的原因

导致 SWT 重启原因如下:

检查SWT 原因分类

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

搜索关键 watchdog

SWT 流程分析

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

确认线程关系

线程被 Block 搜索关键字held by

确认线程关系

线程被 Waiting 结合代码分析。

确认线程关系

线程死锁

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

线程死锁

线程死锁

Binder的Server 端卡住

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

Bind的Server端卡住

Bind的Server端卡住

SurfaceFlinger 卡住导致重启

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

SurfaceFlinger 卡住

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

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

Native 方法执行时间过长

Zygote Fork 进程时卡住

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

Zygote Fork 进程时卡住

 

Dump 时间过长

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

Dump 时间过长

前面有ANR 发生

前面有ANR 发生

前面有fatal JE NE KE 等Exception发生

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

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

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

既然都看到这里,领两个红包在走吧!
以下两个红包每天都可以领取

1.支付宝搜索 522398497,或扫码支付宝红包海报。

支付宝扫一扫,每天领取大红包

2.微信红包,微信扫一扫即可领取红包

 

微信扫一扫,每天领取微信红包

小礼物走一走,来简书关注我

posted @ 2018-05-03 12:09  程序员Android的博客  阅读(87)  评论(0编辑  收藏  举报