现象是开机后在桌面左右滑动一定概率重启。一开始以为是内存不足引起的,后面找到复现路径后发现不是。
log关键字是:WATCHDOG KILLING SYSTEM PROCESS ,GOODBYE。
11-05 15:04:24.596303 1361 1498 W Watchdog: *** WATCHDOG KILLING SYSTEM PROCESS: Blocked in monitor com.android.server.Watchdog$BinderThreadMonitor on monitor thread (watchdog.monitor) for 69s, Blocked in handler on on main thread (main) for 69s, Blocked in handler on on ui thread (android.ui) for 69s, Blocked in handler on on display thread (android.display) for 69s, Blocked in handler on on ActivityManager (ActivityManager) for 69s
路径是mtklog的mobilelog\APLog_2024_1105_150536__14\boot__normal\sys_log_2024_1105_150154.curf
11-05 15:04:11.599922 1361 1498 E Watchdog: **SWT happen **Blocked in monitor com.android.server.Watchdog$BinderThreadMonitor on monitor thread (watchdog.monitor) for 69s, Blocked in handler on on main thread (main) for 69s, Blocked in handler on on ui thread (android.ui) for 69s, Blocked in handler on on display thread (android.display) for 69s, Blocked in handler on on ActivityManager (ActivityManager) for 69s
...
11-05 15:04:20.603955 1361 4655 I DropBoxManagerService: add tag=system_server_watchdog isTagEnabled=true flags=0x6
11-05 15:04:24.596303 1361 1498 W Watchdog: *** WATCHDOG KILLING SYSTEM PROCESS: Blocked in monitor com.android.server.Watchdog$BinderThreadMonitor on monitor thread (watchdog.monitor) for 69s, Blocked in handler on on main thread (main) for 69s, Blocked in handler on on ui thread (android.ui) for 69s, Blocked in handler on on display thread (android.display) for 69s, Blocked in handler on on ActivityManager (ActivityManager) for 69s
11-05 15:04:24.597845 1361 1498 W Watchdog: watchdog.monitor annotated stack trace:
11-05 15:04:24.598084 1361 1498 W Watchdog: at android.os.Binder.blockUntilThreadAvailable(Native Method)
11-05 15:04:24.598202 1361 1498 W Watchdog: at com.android.server.Watchdog$BinderThreadMonitor.monitor(Watchdog.java:421)
11-05 15:04:24.598242 1361 1498 W Watchdog: at com.android.server.Watchdog$HandlerChecker.run(Watchdog.java:371)
11-05 15:04:24.598317 1361 1498 W Watchdog: at android.os.Handler.handleCallback(Handler.java:958)
11-05 15:04:24.598349 1361 1498 W Watchdog: at android.os.Handler.dispatchMessage(Handler.java:99)
11-05 15:04:24.598379 1361 1498 W Watchdog: at android.os.Looper.loopOnce(Looper.java:205)
11-05 15:04:24.598407 1361 1498 W Watchdog: at android.os.Looper.loop(Looper.java:294)
11-05 15:04:24.598437 1361 1498 W Watchdog: at android.os.HandlerThread.run(HandlerThread.java:67)
11-05 15:04:24.598468 1361 1498 W Watchdog: at com.android.server.ServiceThread.run(ServiceThread.java:46)
11-05 15:04:24.599611 1361 1498 W Watchdog: main annotated stack trace:
11-05 15:04:24.599759 1361 1498 W Watchdog: at com.android.server.alarm.AlarmManagerService$AlarmHandler.handleMessage(AlarmManagerService.java:5219)
11-05 15:04:24.600007 1361 1498 W Watchdog: - waiting to lock <0x09322624> (a java.lang.Object)
11-05 15:04:24.600096 1361 1498 W Watchdog: at android.os.Handler.dispatchMessage(Handler.java:106)
11-05 15:04:24.600133 1361 1498 W Watchdog: at android.os.Looper.loopOnce(Looper.java:205)
11-05 15:04:24.600241 1361 1498 W Watchdog: at android.os.Looper.loop(Looper.java:294)
11-05 15:04:24.600296 1361 1498 W Watchdog: at com.android.server.SystemServer.run(SystemServer.java:984)
11-05 15:04:24.600340 1361 1498 W Watchdog: at com.android.server.SystemServer.main(SystemServer.java:671)
11-05 15:04:24.600378 1361 1498 W Watchdog: at java.lang.reflect.Method.invoke(Native Method)
11-05 15:04:24.600434 1361 1498 W Watchdog: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:573)
11-05 15:04:24.600472 1361 1498 W Watchdog: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1036)
11-05 15:04:24.602385 1361 1498 W Watchdog: android.ui annotated stack trace:
11-05 15:04:24.602557 1361 1498 W Watchdog: at com.android.server.am.ActivityManagerService.broadcastIntentWithFeature(ActivityManagerService.java:15466)
11-05 15:04:24.602768 1361 1498 W Watchdog: - waiting to lock <0x04b11b67> (a com.android.server.am.ActivityManagerService)
11-05 15:04:24.602819 1361 1498 W Watchdog: at android.app.ContextImpl.sendBroadcast(ContextImpl.java:1224)
11-05 15:04:24.602886 1361 1498 W Watchdog: at com.android.server.wm.DisplayPolicy$1.onSwipeFromRight(DisplayPolicy.java:476)
11-05 15:04:24.603060 1361 1498 W Watchdog: - locked <0x007d8090> (a com.android.server.wm.WindowManagerGlobalLock)
11-05 15:04:24.603172 1361 1498 W Watchdog: at com.android.server.wm.SystemGesturesPointerEventListener.onPointerEvent(SystemGesturesPointerEventListener.java:220)
11-05 15:04:24.603240 1361 1498 W Watchdog: at com.android.server.wm.PointerEventDispatcher.onInputEvent(PointerEventDispatcher.java:53)
11-05 15:04:24.603296 1361 1498 W Watchdog: at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:267)
11-05 15:04:24.603342 1361 1498 W Watchdog: at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
11-05 15:04:24.603437 1361 1498 W Watchdog: at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:247)
11-05 15:04:24.603494 1361 1498 W Watchdog: at android.view.InputEventReceiver.onBatchedInputEventPending(InputEventReceiver.java:191)
11-05 15:04:24.603538 1361 1498 W Watchdog: at android.os.MessageQueue.nativePollOnce(Native Method)
11-05 15:04:24.603581 1361 1498 W Watchdog: at android.os.MessageQueue.next(MessageQueue.java:335)
11-05 15:04:24.603621 1361 1498 W Watchdog: at android.os.Looper.loopOnce(Looper.java:162)
11-05 15:04:24.603661 1361 1498 W Watchdog: at android.os.Looper.loop(Looper.java:294)
11-05 15:04:24.603700 1361 1498 W Watchdog: at android.os.HandlerThread.run(HandlerThread.java:67)
11-05 15:04:24.603775 1361 1498 W Watchdog: at com.android.server.ServiceThread.run(ServiceThread.java:46)
11-05 15:04:24.603819 1361 1498 W Watchdog: at com.android.server.UiThread.run(UiThread.java:45)
11-05 15:04:24.605580 1361 1498 W Watchdog: android.display annotated stack trace:
11-05 15:04:24.605715 1361 1498 W Watchdog: at com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:5715)
11-05 15:04:24.605902 1361 1498 W Watchdog: - waiting to lock <0x007d8090> (a com.android.server.wm.WindowManagerGlobalLock)
11-05 15:04:24.605978 1361 1498 W Watchdog: at android.os.Handler.dispatchMessage(Handler.java:106)
11-05 15:04:24.606021 1361 1498 W Watchdog: at android.os.Looper.loopOnce(Looper.java:205)
11-05 15:04:24.606055 1361 1498 W Watchdog: at android.os.Looper.loop(Looper.java:294)
11-05 15:04:24.606084 1361 1498 W Watchdog: at android.os.HandlerThread.run(HandlerThread.java:67)
11-05 15:04:24.606126 1361 1498 W Watchdog: at com.android.server.ServiceThread.run(ServiceThread.java:46)
11-05 15:04:24.606880 1361 1498 W Watchdog: ActivityManager annotated stack trace:
11-05 15:04:24.607012 1361 1498 W Watchdog: at com.android.server.am.BroadcastQueueModernImpl.lambda$new$0(BroadcastQueueModernImpl.java:296)
11-05 15:04:24.607163 1361 1498 W Watchdog: - waiting to lock <0x04b11b67> (a com.android.server.am.ActivityManagerService)
11-05 15:04:24.607242 1361 1498 W Watchdog: at com.android.server.am.BroadcastQueueModernImpl.$r8$lambda$EZvetGiyPFSQ7Dv6AGCYMZgLrJo(BroadcastQueueModernImpl.java:0)
11-05 15:04:24.607325 1361 1498 W Watchdog: at com.android.server.am.BroadcastQueueModernImpl$$ExternalSyntheticLambda7.handleMessage(R8$$SyntheticClass:0)
11-05 15:04:24.607375 1361 1498 W Watchdog: at android.os.Handler.dispatchMessage(Handler.java:102)
11-05 15:04:24.607417 1361 1498 W Watchdog: at android.os.Looper.loopOnce(Looper.java:205)
11-05 15:04:24.607455 1361 1498 W Watchdog: at android.os.Looper.loop(Looper.java:294)
11-05 15:04:24.607494 1361 1498 W Watchdog: at android.os.HandlerThread.run(HandlerThread.java:67)
11-05 15:04:24.607534 1361 1498 W Watchdog: at com.android.server.ServiceThread.run(ServiceThread.java:46)
11-05 15:04:24.607586 1361 1498 W Watchdog: *** GOODBYE!
11-05 15:04:24.807435 1745 1745 D android.hardware.wifi@1.0-service-lazy: Dead callback removed from list
可以看到watchdog 打印了GOODBYE。
通过分析,追踪到了DisplayPolicy.java中的修改。这里曾经被同事修改过,发送广播写到了synchronized里面,导致了死锁。
//frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java
@Override
public void onSwipeFromBottom() {
synchronized (mLock) {
requestTransientBars(mBottomGestureHost,
getControllableInsets(mBottomGestureHost).bottom > 0);
+ mContext.sendBroadcast(new Intent(SHOW_NAVIGATIONBAR));
}
}
解决方法是把发送广播的代码移到锁外面来,通过减小锁粒度,解决死锁问题,防止因ANR导致的系统进程被WatchDog杀死,从而避免设备自动重启。
如果需要获取bugreport 和dropbox 日志,可以执行
adb bugreport
adb pull /data/user_de/0/com.android.shell/files/bugreports
adb shell dumpsys dropbox --print >>log.log
ANR日志分析可参考这篇:【Android】如何分析 ANR 日志
参考链接:
Watchdog机制以及问题分析
Android 经验总结之ANR&SWT
【Android】如何分析 ANR 日志
Android 死锁解题案例 - 【01】













网友评论