<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SWT 重啟案例分析(一)

          共 10844字,需瀏覽 22分鐘

           ·

          2020-10-17 02:43

          和你一起終身學(xué)習(xí),這里是程序員Android

          經(jīng)典好文推薦,通過閱讀本文,您將收獲以下知識點:

          一、MTK AEE Log分析工具
          二、AEE Log分析流程
          三、system_server 卡死案例分析及解決

          本文主要針對?Exception Type: system_server_watchdog?,?system_server卡死找出的分析以及解決方案。

          一、MTK AEE Log分析工具

          MTK AEE Log?獲取方式:

          關(guān)注微信公眾號:?程序員Android
          回復(fù)?aee?即可獲取解析重啟db log的工具。

          二、AEE Log分析流程

          1. 使用AEE 工具解析?dbg?文件。

          使用解析db.fatal.02.SWT.dbg

          AEE Log 解析出來的文件

          2.分析解析出來的exp_main等文件

          exp_main?文件會記錄發(fā)生重啟時候的?log?打印信息。

          部分重啟異常 Log信息如下:

          $** *** *** *** *** *** *** *** Fatal *** *** *** *** *** *** *** **$
          Build Info: 'alps-mp-o1.mp7:alps-mp-o1.mp7:mt6765:S01,ACE/AS0618/AS0618:8.1.0/O11019/1548123508:user/release-keys'
          Flavor Info: 'None'
          Exception Log Time:[Thu Mar 14 14:00:03 CST 2019] [38684.729626]

          Exception Class: SWT
          Exception Type: system_server_watchdog

          Current Executing Process:
          system_server


          Trigger time:[2019-03-14 14:00:03.711844] pid:1029

          Backtrace:
          Process: system_server
          Subject: Blocked in handler on ActivityManager (ActivityManager)
          Build: ACE/AS0618/AS0618:8.1.0/O11019/1548123508:user/release-keys

          3.exp_main 文件解析

          從開頭的Log總體信息概覽,我們可以看到 發(fā)生重啟的時間、類型,觸發(fā)重啟的進程以及PID、系統(tǒng)Blocked 的地方

          結(jié)合exp_main以及?trace分析重啟 Log
          Log分析如下:

          // 1.重啟觸發(fā)時間,以及PID
          Trigger time:[2019-03-14 14:00:03.711844] pid:1029
          // 2.Blocked 的進程
          Backtrace:
          Process: system_server
          Subject: Blocked in handler on ActivityManager (ActivityManager)
          // 3.根據(jù)PID 查看Trace信息
          ----- pid 1029 at 2019-03-14 13:59:58 -----
          Cmd line: system_server

          ... ...
          // 4.根據(jù)Backtrace 查看Blocked的信息
          "ActivityManager" prio=5 tid=11 Blocked

          ... ...
          // 5.tid=11 等待 tid=106的線程釋放資源鎖
          - waiting to lock <0x090691f3> (a android.util.ArrayMap) held by thread 106
          ... ...

          // 6.查看tid = 106 持鎖情況
          "backup" prio=5 tid=106 Waiting
          ... ...

          at java.lang.Object.wait(Native method)
          - waiting on <0x06a44c62> (a com.android.server.am.ContentProviderRecord)
          // 7.死鎖卡住的地方
          at com.android.server.am.ActivityManagerService.getContentProviderImpl(ActivityManagerService.java:12127)
          - locked <0x06a44c62> (a com.android.server.am.ContentProviderRecord)

          ... ...

          "Binder:1029_8" prio=5 tid=107 Blocked
          // 8.log中 tid=107 被 106 Blocked 進一步問題的加重
          at com.android.server.notification.RankingHelper.getRecord(RankingHelper.java:258)
          - waiting to lock <0x090691f3> (a android.util.ArrayMap) held by thread 106

          $** *** *** *** *** *** *** *** Fatal *** *** *** *** *** *** *** **$

          Log 分析大致過程截圖

          完整 log 請在公眾號上獲取

          三、system_server 卡死案例分析及解決

          通過?Log?找到卡死原因后,解決此問題。
          需要修改ActivityManagerService類。

          1.修改代碼路徑如下:alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

          2.解決思路

          避免?provider?長時間持鎖觸發(fā)MTK?60s?的SWT?重啟機制,設(shè)置超時時間,超過時間就要釋放資源鎖,避免發(fā)生此問題。

          3.diff 修改方案如下:

          --- a/[alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=d5e2e1411f3698a829e997d402c7482ec277fa8c;hb=d5e2e1411f3698a829e997d402c7482ec277fa8c)

          +++ b/[alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=03208f78a2bf3167b4f0790019326e3939cc5444;hb=03208f78a2bf3167b4f0790019326e3939cc5444)

          @@ [-545,7](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=d5e2e1411f3698a829e997d402c7482ec277fa8c;hb=d5e2e1411f3698a829e997d402c7482ec277fa8c#l545) [+545,9](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=03208f78a2bf3167b4f0790019326e3939cc5444;hb=03208f78a2bf3167b4f0790019326e3939cc5444#l545) @@ public class ActivityManagerService extends IActivityManager.Stub

          // How long we wait for an attached process to publish its content providers

          // before we decide it must be hung.

          static final int CONTENT_PROVIDER_PUBLISH_TIMEOUT = 10*1000;

          -

          + // How long we wait for provider to be notify before we decide it may be hung.

          + static final int CONTENT_PROVIDER_WAIT_TIMEOUT = 20*1000;

          +

          // How long we wait for a launched process to attach to the activity manager

          // before we decide it's never going to come up for real, when the process was

          // started with a wrapper for instrumentation (such as Valgrind) because it

          @@ [-1745,6](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=d5e2e1411f3698a829e997d402c7482ec277fa8c;hb=d5e2e1411f3698a829e997d402c7482ec277fa8c#l1745) [+1747,7](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=03208f78a2bf3167b4f0790019326e3939cc5444;hb=03208f78a2bf3167b4f0790019326e3939cc5444#l1747) @@ public class ActivityManagerService extends IActivityManager.Stub

          static final int PUSH_TEMP_WHITELIST_UI_MSG = 68;

          static final int SERVICE_FOREGROUND_CRASH_MSG = 69;

          static final int DISPATCH_OOM_ADJ_OBSERVER_MSG = 70;

          + static final int CONTENT_PROVIDER_WAIT_TIMEOUT_MSG = 71;

          static final int START_USER_SWITCH_FG_MSG = 712;

          static final int NOTIFY_VR_KEYGUARD_MSG = 74;

          @@ [-2108,6](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=d5e2e1411f3698a829e997d402c7482ec277fa8c;hb=d5e2e1411f3698a829e997d402c7482ec277fa8c#l2108) [+2111,12](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=03208f78a2bf3167b4f0790019326e3939cc5444;hb=03208f78a2bf3167b4f0790019326e3939cc5444#l2111) @@ public class ActivityManagerService extends IActivityManager.Stub

          synchronized (ActivityManagerService.this) {

          mActivityStarter.doPendingActivityLaunchesLocked(true);

          }

          + } break;

          + case CONTENT_PROVIDER_WAIT_TIMEOUT_MSG: {

          + ContentProviderRecord cpr = (ContentProviderRecord)msg.obj;

          + synchronized (ActivityManagerService.this) {

          + processContentProviderWaitTimedOutLocked(cpr);

          + }

          } break;

          case KILL_APPLICATION_MSG: {

          synchronized (ActivityManagerService.this) {

          @@ [-7029,7](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=d5e2e1411f3698a829e997d402c7482ec277fa8c;hb=d5e2e1411f3698a829e997d402c7482ec277fa8c#l7029) [+7038,31](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=03208f78a2bf3167b4f0790019326e3939cc5444;hb=03208f78a2bf3167b4f0790019326e3939cc5444#l7038) @@ public class ActivityManagerService extends IActivityManager.Stub

          cleanupAppInLaunchingProvidersLocked(app, true);

          removeProcessLocked(app, false, true, "timeout publishing content providers");

          }

          +

          + @GuardedBy("this")

          + private final void processContentProviderWaitTimedOutLocked(ContentProviderRecord cpr) {

          + try {

          + if (mLaunchingProviders.contains(cpr)) {

          + if (DEBUG_MU) Slog.v(TAG_MU,

          + "Remove from mLaunchingProviders, " + cpr

          + + " launchingApp=" + cpr.launchingApp);

          + mLaunchingProviders.remove(cpr);

          + }

          + if (DEBUG_MU) Slog.v(TAG_MU,

          + "RemoveMessages CONTENT_PROVIDER_WAIT_TIMEOUT_MSG, " + cpr

          + + " launchingApp=" + cpr.launchingApp);

          + mHandler.removeMessages(CONTENT_PROVIDER_WAIT_TIMEOUT_MSG, cpr);

          + synchronized (cpr) {

          + cpr.notifyAll();

          + cpr.launchingApp = null;

          + }

          + } catch (Exception e) {

          + if (DEBUG_MU) Slog.v(TAG_MU,

          + "processContentProviderWaitTimedOutLocked exception, " + e);

          + }

          + }

          +

          private final void processStartTimedOutLocked(ProcessRecord app) {

          final int pid = app.pid;

          boolean gone = false;

          @@ [-12124,11](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=d5e2e1411f3698a829e997d402c7482ec277fa8c;hb=d5e2e1411f3698a829e997d402c7482ec277fa8c#l12124) [+12157,33](http://192.168.11.104/gitweb/?p=alps-mp-o1.mp1-V1.git;a=blob;f=alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java;h=03208f78a2bf3167b4f0790019326e3939cc5444;hb=03208f78a2bf3167b4f0790019326e3939cc5444#l12157) @@ public class ActivityManagerService extends IActivityManager.Stub

          if (conn != null) {

          conn.waiting = true;

          }

          + // add 20s wait timeout,avoid

          + if (!mHandler.hasMessages(CONTENT_PROVIDER_WAIT_TIMEOUT_MSG, cpr)) {

          + if (DEBUG_MU) Slog.v(TAG_MU,

          + "SendMessageDelayed CONTENT_PROVIDER_WAIT_TIMEOUT_MSG, " + cpr

          + + " launchingApp=" + cpr.launchingApp);

          + Message msg = mHandler.obtainMessage(CONTENT_PROVIDER_WAIT_TIMEOUT_MSG);

          + msg.obj = cpr;

          + mHandler.sendMessageDelayed(msg, CONTENT_PROVIDER_WAIT_TIMEOUT);

          + } else {

          + if (DEBUG_MU) Slog.v(TAG_MU,

          + "There is another waiting to start provider " + cpr

          + + " launchingApp=" + cpr.launchingApp

          + + ", not send CONTENT_PROVIDER_WAIT_TIMEOUT_MSG again");

          + }

          +

          cpr.wait();

          } catch (InterruptedException ex) {

          } finally {

          if (conn != null) {

          conn.waiting = false;

          + }

          + // remove wait time out message

          + if (mHandler.hasMessages(CONTENT_PROVIDER_WAIT_TIMEOUT_MSG, cpr)) {

          + if (DEBUG_MU) Slog.v(TAG_MU,

          + "After wait removeMessages CONTENT_PROVIDER_WAIT_TIMEOUT_MSG, "

          + + cpr + " launchingApp=" + cpr.launchingApp);

          + mHandler.removeMessages(CONTENT_PROVIDER_WAIT_TIMEOUT_MSG, cpr);

          }

          }

          }

          至此,本篇已結(jié)束。轉(zhuǎn)載網(wǎng)絡(luò)的文章,小編覺得很優(yōu)秀,歡迎點擊閱讀原文,支持原創(chuàng)作者,如有侵權(quán),懇請聯(lián)系小編刪除。同時感謝您的閱讀,期待您的關(guān)注。

          瀏覽 69
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日逼免费观看 | 亚洲黄色成人在线 | 大香蕉欧美视频 | 一级黄色电影A片 | 日本久久精品一区 |