美文网首页
记一次ANR引起的设备自动重启问题

记一次ANR引起的设备自动重启问题

作者: 梧叶已秋声 | 来源:发表于2025-06-11 11:57 被阅读0次

现象是开机后在桌面左右滑动一定概率重启。一开始以为是内存不足引起的,后面找到复现路径后发现不是。
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】

相关文章

网友评论

      本文标题:记一次ANR引起的设备自动重启问题

      本文链接:https://www.haomeiwen.com/subject/lsdowjtx.html