SWT 导致手机重启问题分析
本篇文章主要介绍 Android
开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
1.SWT 手机重启问题 (阻塞
60s
系统重启)简介
2.SWT 手机重启问题处理流程
3.SWT 手机重启问题的原因
4.SWT 手机重启问题分析流程
5.SWT 手机重启问题分析举例
6.Android O 导出重启 Log 注意事项
微信公众号:ProgramAndroid欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
1. SWT 手机重启问题 (阻塞60s 系统重启)简介
SWT(Software Watchdog ) 主要用来监控SystemServer 重要线程/Service 的运行情况。
如果判断阻塞 60s ,就会把系统重启,来保证系统恢复正常状态。
判断阻塞的方法:
- 利用Services 注册monitor 去Check
主要是: AMS、 Foreground Thread
- 发送handler 到重要的Loop 线程来Check 是否阻塞。
主要是: Main Thread、UI Thread、IO Thread、Display Thread、WMS 、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
Dump 时间过长
Dump 超过60s 可能会引起手机重启。
搜索关键字dumpStackTraces 或 dumpStackTraces process
6. Android O 导出重启 Log 注意事项
Android O 中 mtklog
和db
不在同一个目录,提交log 时需要同时导出来:
- adb pull /sdcard/mtklog
- adb pull /data/aee_exp
- adb pull /data/vendor/mtklog/aee_exp
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。期待您的关注,
感谢您的阅读,谢谢!
如有侵权,请联系小编,小编对此深感抱歉,同时小编会立即停止侵权行为。
微信公众号:ProgramAndroid欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
点击阅读原文,获取更多福利