<!-- lixianjing added -->
531 views| 2010-12-11| 李先静| Android| |
转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静 <xianjimli@gmail.com>
现在的CPU基本上都带有WatchDog功能,这种硬件的WatchDog可以在系统死掉(死锁或者程序跑飞)后重启系统,让系统回到可以工作的状态。WatchDog不能防止系统死掉,但是它能够起死回生,从而提高系统的可用性。
硬件级的WatchDog也有它的局限性,它只能在系统范围内生效,不能针对单个进程,某个进程死掉了,WatchDog未必知道。对于像Linux这类久经考验的操作系统来说,整个系统死掉概率非常低,所以此时硬件级的WatchDog意义反而不大。
Android 平台实现了一个软件的WatchDog来监护SystemServer。SystemServer无疑是Android平台中最重要的进程了,里面运行了整个平台中绝大多数的服务。在这个进程中运行着近50个线程,任何一个线程死掉都可能导致整个系统死掉。SystemServer退出反而问题不大,因为 init进程会重新启动它,但是它死锁就麻烦了,因为整个系统就没法动了。
在 SystemServer里运行的服务中,最重要的几个服务应该数ActivityManager、WindowManager和 PowerManager。软件的WatchDog主要就是确保这几个服务发生死锁之后,退出SystemServer进程,让init进程重启它,让系统回到可用状态。
每个被监护的Service必须实现Watchdog.Monitor接口,这个接口只要实现一个函数monitor,这个函数实现非常简单,就拿ActivityManager来说吧:
public void monitor() {
synchronized (this) { }
}
它去锁一下对象,什么也不做,然后就返回。如果对象没有死锁,这个过程就会很顺利。如果对象死锁了,这个函数就会挂在这里。
当然实现Watchdog.Monitor接口还不够,还要把它注册到WatchDog服务中,在初始化时加这样一行代码就行了:
Watchdog.getInstance().addMonitor(this);
最后我们看看WatchDog服务的实现。WatchDog服务包括两个方面:
1.定期调用被监护对象的monitor函数,这是在主线程中完成的。如果被监护对象死锁,则会阻塞在这里。
final int size = mMonitors.size();
for (int i = 0 ; i < size ; i++) {
mCurrentMonitor = mMonitors.get(i);
mCurrentMonitor.monitor();
}
2.检测是否发生死锁,这是在Watchdog线程中运行的。如果发生死锁而且没有被调试,则退出SystemServer,init进程就会重启SystemServer进程。
// Only kill the process if the debugger is not attached.
if (!Debug.isDebuggerConnected()) {
Slog.w(TAG, "*** WATCHDOG KILLING SYSTEM PROCESS: " + name);
Process.killProcess(Process.myPid());
System.exit(10);
} else {
Slog.w(TAG, "Debugger connected: Watchdog is *not* killing the system process");
}
最近我们碰到一个问题,SystemServer不断重启:原来wifi模块死锁了,此时重启SystemServer,但是重启之后马上又死锁了,结果成了一个死循环。在这种情况下,我想还是在重启系统会好点。
http://www.limodev.cn/blog/archives/1566
分享到:
相关推荐
在Android应用开发中,ANR(Application Not Responding)是一个常见的问题,表示用户界面无响应,这通常是由于主线程被长时间阻塞导致的。`Android-ANR-WatchDog`是一个专门为解决这个问题而设计的开源工具,它能够...
ANR-WatchDog是一款专为Android系统设计的开源项目,其主要目的是监控并处理应用程序无响应(ANR:Application Not Responding)的问题。在Android操作系统中,当一个应用执行主线程上的操作超过5秒钟而未给出响应时...
"watchdog patch"是指针对ACT8864在Android系统中的一个特定补丁,用于优化或修复其在操作系统中的某些功能或问题。 在Android系统中,watchdog是一种硬件或软件机制,用于监控系统的稳定性和安全性。硬件watchdog...
Android SW-watchdog_introduction,比较详细的原理说明介绍,深刻理解sw watchdog以及分析方法。
在"WatchDog"的压缩包文件中,"dist"目录可能包含了编译后的可执行文件,使得用户无需Python环境即可直接运行程序,提高了部署的便利性。当然,为了更好地定制和调试,建议具备Python环境的用户可以直接运行源代码。...
Android中的Watchdog 在Android中,Watchdog是用来监测关键服务是否发生了死锁,如果发生了死锁就kill进程,重启SystemServer Android的Watchdog是在SystemServer中进行初始化的,所以Watchdog是运行在...
第4章分析了Zygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,...
android bug跟踪器中有一个问题条目描述了这种不足,请随时给它加注星标;) 它能做什么它设置了一个“看门狗”计时器,该计时器将检测UI线程何时停止响应。 这样做时,所有线程堆栈跟踪(主优先)都会引发错误。 它...
第4章分析了Z ygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,...
在Android系统中,当遇到异常导致kernel重启的情况时,开发者和故障排查工程师需要对问题进行深入分析以找出问题根源。本文将围绕“Android系统重启问题的归类”这一主题,详细探讨不同类型的重启原因以及如何收集和...
第4章分析了Z ygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,...
"WatchDog AVR" 是一个基于AVR M128单片机的看门狗程序,主要目的是为了在单片机系统运行过程中提供一种故障恢复机制。看门狗定时器(Watchdog Timer)是嵌入式系统中常用的一种硬件或软件功能,它用于监控程序的...
通过对`init`、`zygote`、`system-server`以及`watchdog`的分析,我们可以看出这些组件在Android系统中扮演着极其重要的角色。`init`作为系统的入口,负责启动必要的服务和进程;`zygote`则通过高效的进程创建机制...
10. **Nand flash相关技术**:这部分可能涉及Nand flash的读写操作,错误检测和校正,以及如何在Android系统中管理Nand闪存。 通过以上内容的学习,开发者可以具备在ARM平台上移植和开发Android系统及驱动的能力,...
在 Log 中发现 System Process 被 Watchdog 杀掉,这种情况一般是 System Process 卡死所导致。通过分析系统 Dump 出的\data\anr\目录下的 Trace 文件,发现多处线程 waiting to lock 某个 object 导致死锁,根据这...