WatchDog 中靠 HandlerChecker 来完成check 工作,每个 HandlerChecker 伴随一个Handler,即一个独立的 Looper 和 Thread。 WatchDog 在创建的时候指定对 FgThread、MainThread、UIThread、IoThread、DisplayThread、AnimationThread、SurfaceAnimationThread 等thread 的监控,当然后期可以通过接口动态添加到check list(mHandlerC...
比如AMS就首先实现了Watchdog.Monitor接口,然后在它的构造方法里把自己添加到Watchdog中,让Watchdog检测自己是否死锁,代码如下: 代码语言:javascript 复制 publicActivityManagerService(Context systemContext){...Watchdog.getInstance().addMonitor(this);Watchdog.getInstance().addThread(mHandler);} 通过addMonitor()方...
Android 为了保证系统的高可用性,设计了Watchdog用以监视系统的一些关键服务的运行状况,如果关键服务出现了死锁,将重启SystemServer;另外,接收系统内部reboot请求,重启系统。 总结一下:Watchdog就如下两个主要功能: 接收系统内部reboot请求,重启系统; 监控系统关键服务,如果关键服务出现了死锁,将重启SystemServer。 被监控的...
由于我们关键部分都用了synchronized (this) 这个锁来进行锁定,如果我们在monitor()的时候两次每隔30s的检查都未能获取到相应的锁,就表示这个进程死锁,如果死锁将杀死SystemServer进程(Watchdog跑在SystemServer进程中,因此Process.killProcess(Process.myPid()) 这里的myPid()就是SystemServer对应的PID)。 SystemServer ...
Watchdog的中文叫“看门狗”,最早引入Watchdog是在单片机系统中,由于单片机的工作环境容易受到外界磁场的干扰,导致程序“跑飞”,造成整个系统无法正常工作,因此,引入了一个“看门狗”,对单片机的运行状态进行实时监测,针对运行故障做一些保护处理,譬如让系统重启。这种Watchdog属于硬件层面,必须有硬件电路的支持。
Android系统的Watchdog源码路径在此: frameworks/base/services/core/java/com/android/server/Watchdog.java Watchdog的初始化位于SystemServer. /frameworks/base/services/java/com/android/server/SystemServer.java 在SystemServer中会对Watchdog进行初始化。
Watchdog进程监控器的核心功能 Watchdog的主要职责是实时监控systemserver内是否存在耗时操作、死锁及长时间持锁的情况。它通过定期检查具有Handler的线程的状态,迅速识别潜在的问题。如果发现危险信号,Watchdog将果断关闭systemserver进程,迫使系统进行自我修复。这一机制确保了即使在出现异常情况时,系统也能迅速恢复。
Watchdog,初次见到这个词语是在大学的单片机书上, 谈到了看门狗定时器. 在很早以前那个单片机刚发展的时候, 单片机容易受到外界工作影响, 导致自己的程序跑飞, 因此有了看门狗的保护机制, 即:需要每多少时间内都去喂狗, 如果不喂狗, 看门狗将触发重启. 大体原理是, 在系统运行以后启动了看门狗的计数器,看门狗就开始...
Watchdog的核心职责在于定期检测systemserver进程中具有Handler的线程是否存在耗时方法、死锁或长时间持有锁等隐患。一旦发现问题,Watchdog将毫不犹豫地终结systemserver进程,触发zygote进程的连锁反应,最终实现systemserver进程的自动重启,以此恢复系统的稳定运行。
先截取gityuan博客中最后的一段话: watchdog在check过程中出现阻塞1分钟的情况,则会输出: AMS.dumpStackTraces 抓取系统重要进程的当前每个线程的堆栈快照 :输出system_server和3个native进程的traces 该方法会输出两次,第一次在超时30s的地方;第二次在超时1min;WD.dumpKernelStackTraces,输出system_server进程中所有线...