极力推荐文章:欢迎收藏
Android 干货分享
阅读五分钟,每日十点,和您一起终身学习,这里是程序员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
- 发送handler 到重要的Loop 线程来Check 是否阻塞。
主要是: Main Thread、UI Thread、IO Thread、Display Thread、WMS 、Other Services。
SWT 判断阻塞的方法 图文描述如下:
二、 SWT 手机重启问题处理流程
SWT 处理流程:
1.每半分钟check 一次system_server 进程:
检查系统是否卡住,如果卡住,dump
一次system_server
的backtrace
2.一分钟卡住后kill,并重新计数:
如果卡住,第二次dump
,并kill
掉 system_server
进程 ,否则重新计时。
3.SWT 处理大致流程如下:
三、 SWT 手机重启问题的原因
导致 SWT
重启原因的原因有很多种。
主要导致的原因如下:
四、 SWT 手机重启问题分析流程
首先搜索关键 watchdog,查看是否有重启发生。
五、SWT 手机重启问题分析举例
1.分析 trace ,确认线程关系
线程被 Block 搜索关键字 held by
线程被 Waiting 结合代码分析。
2.线程死锁
确认Block的线程是否有闭环的死锁关系。
3.Binder的Server 端卡住
线程状态 Native,并且callstack中含有一对
IPCThreadState::waitForResponse
IPCThreadState::talkWithDriver
的明显特征。
4.SurfaceFlinger 卡住导致重启
搜索关键字
I watchdog ,
查看是否有 surfaceflinger hang,默认卡住40s
,就会重启。
5.Native 方法执行时间过长导致重启
线程状态 Native,查看是否有
PowerManagerService.nativeSetAutoSuspend
6.Zygote Fork 进程时卡住
线程状态Native,查看是否有
Process.zygoteSendArgsAndGetResult
7.Dump 时间过长
Dump
超过60s 可能会引起手机重启。
搜索关键字
dumpStackTraces
或
dumpStackTraces process
六、 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
至此,本篇已结束,如有不对的地方,欢迎您的建议与指正。同时期待您的关注,感谢您的阅读,谢谢!