如何分析Android SystemServer Watchdog重启问题
时间:10-02
整理:3721RD
点击:
[DESCRIPTION]
如何分析android SystEMServer Watchdog重启问题?
[SOLUTION]
1. Watchdog目的是监控系统几个比较主要的service,如果超过一定时间没有反应,认为系统出错,会强制重
启Android.
2. Watchdog原理:
/php?mod=tag&id=6090" target="_blank" class="relatedlink">Frameworks/base/services/java/com/android/server/Watchdog.java
a) 首先SystemServer中的watchdog线程会向android.server.ServerThread线程发送一个
MONITOR message,同时将mCompleted标志位置为false.

b) 之后Watchdog线程Sleep 60秒(不包含系统睡眠的时间),如果mCompleted标志位不为true,则认为
发生watchdog超时,之后Android就会重启.
c) ServerThread收到这个消息后会依次执行之前每个Service Object的monitor()函数,当执行完后
会将mCompleted标志位置为true.

3. 具体分析方法:
a) 首先从eventlog中以watchdog为关键字搜索,记录下这个时刻。

b) 然后分析所有Service Object的monitor()为何在这个时刻之前1分钟内没有做完。
c) 后面具体的分析方法和ANR一样(不清楚的可以参考鄙司ANR FAQ或MOL视频):
ANR是某个AP的主线程在一段时间内没有做完某件事情。
Android Watchdog是SystemServer进程的ServerThread线程在一段时间内没有做完某件事情。
