和您一起终身学习,这里是程序员Android
本篇文章主要介绍 Android
开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:
一、SWT 手机重启问题简介
二、SWT 手机重启问题处理流程
三、SWT 手机重启问题的原因
四、SWT 手机重启问题分析流程
五、SWT 手机重启问题分析举例
六、Android O以上导 Log 注意事项
一、 SWT 手机重启问题简介
SWT(Software Watch Dog ) 主要用来监控SystemServer
等重要线程/Service
的运行情况。如果发现其阻塞超过 60s ,看门狗进程就会把系统重启,进而保证系统可以恢复到正常状态。
判断阻塞的方法有如下两种。
1.利用 Services 注册monitor 去Check
主要是: AMS、 Foreground Thread
2. 发送handler 到重要的Loop 线程来Check 是否阻塞。
主要是: Main Thread、UI Thread、IO Thread、Display Thread、WMS 、Other Services。
3.SWT 判断阻塞的方法
二、 SWT 手机重启问题处理流程
SWT 处理流程:
1.每半分钟30s
check 一次system_server 进程
检查系统是否卡住,如果卡住,dump
一次system_server
的backtrace
2.一分钟卡住后kill,并重新计数
如果卡住,第二次dump
,并kill
掉 system_server
进程 ,否则重新计时。
3.SWT 处理大致流程如下
三、 SWT 手机重启问题的原因
导致 SWT
重启原因的原因有很多种。
1.主要导致的原因如下:
四、 SWT 手机重启问题分析流程
首先搜索关键 watchdog,查看是否有重启发生。
五、SWT 手机重启问题分析举例
1.分析 trace ,确认线程关系
线程被 Block 搜索关键字 held by
2.线程被 Waiting 结合代码分析。
3.线程死锁
确认Block的线程是否有闭环的死锁关系。
4.Binder的Server 端卡住
线程状态 Native,并且callstack中含有一对
IPCThreadState::waitForResponse
IPCThreadState::talkWithDriver
的明显特征。
5.SurfaceFlinger 卡住导致重启
搜索关键字
I watchdog ,
查看是否有 surfaceflinger hang,默认卡住40s
,就会重启。
6.Native 方法执行时间过长导致重启
线程状态 Native,查看是否有
PowerManagerService.nativeSetAutoSuspend
7.Zygote Fork 进程时卡住
线程状态Native,查看是否有
Process.zygoteSendArgsAndGetResult
8.Dump 时间过长
Dump
超过60s 可能会引起手机重启。
搜索关键字 dumpStackTraces 或 dumpStackTraces process
9.前面有ANR 发生
10.前面有fatal JE NE KE 等Exception发生
11.自动化测试脚本有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
至此,本篇已结束。转载网络的文章,小编觉得很优秀,欢迎点击阅读原文,支持原创作者,如有侵权,恳请联系小编删除,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!