<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 手機(jī)重啟問題分析指南

          共 2276字,需瀏覽 5分鐘

           ·

          2020-10-14 18:14

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

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

          一、SWT 手機(jī)重啟問題簡介
          二、SWT 手機(jī)重啟問題處理流程
          三、SWT 手機(jī)重啟問題的原因
          四、SWT 手機(jī)重啟問題分析流程
          五、SWT 手機(jī)重啟問題分析舉例
          六、Android O以上導(dǎo) Log 注意事項(xiàng)

          一、 SWT 手機(jī)重啟問題簡介

          SWT(Software Watch Dog ) 主要用來監(jiān)控SystemServer重要線程/Service 的運(yùn)行情況。如果發(fā)現(xiàn)其阻塞超過 60s ,看門狗進(jìn)程就會(huì)把系統(tǒng)重啟,進(jìn)而保證系統(tǒng)可以恢復(fù)到正常狀態(tài)。

          判斷阻塞的方法有如下兩種。

          1.利用 Services 注冊monitor 去Check

          主要是: AMS、 Foreground Thread

          2. 發(fā)送handler 到重要的Loop 線程來Check 是否阻塞。

          主要是: Main ThreadUI Thread、IO Thread、Display Thread、WMS 、Other Services。

          3.SWT 判斷阻塞的方法

          SWT 判斷阻塞的方法

          二、 SWT 手機(jī)重啟問題處理流程

          SWT 處理流程:

          1.每半分鐘30scheck 一次system_server 進(jìn)程

          檢查系統(tǒng)是否卡住,如果卡住,dump 一次system_server 的backtrace

          2.一分鐘卡住后kill,并重新計(jì)數(shù)

          如果卡住,第二次dump,并kill掉 system_server進(jìn)程 ,否則重新計(jì)時(shí)。

          3.SWT 處理大致流程如下

          SWT 處理流程

          三、 SWT 手機(jī)重啟問題的原因

          導(dǎo)致 SWT重啟原因的原因有很多種。

          1.主要導(dǎo)致的原因如下:

          檢查SWT 原因分類

          四、 SWT 手機(jī)重啟問題分析流程

          首先搜索關(guān)鍵 watchdog,查看是否有重啟發(fā)生。

          SWT 流程分析

          五、SWT 手機(jī)重啟問題分析舉例

          1.分析 trace ,確認(rèn)線程關(guān)系

          線程被 Block 搜索關(guān)鍵字 held by

          確認(rèn)線程關(guān)系

          2.線程被 Waiting 結(jié)合代碼分析。

          確認(rèn)線程關(guān)系

          3.線程死鎖

          確認(rèn)Block的線程是否有閉環(huán)的死鎖關(guān)系。

          線程死鎖

          線程死鎖

          4.Binder的Server 端卡住

          線程狀態(tài) Native,并且callstack中含有一對

          IPCThreadState::waitForResponse
          IPCThreadState::talkWithDriver
          的明顯特征。

          Bind的Server端卡住

          Bind的Server端卡住

          5.SurfaceFlinger 卡住導(dǎo)致重啟

          搜索關(guān)鍵字 I watchdog ,
          查看是否有 surfaceflinger hang,默認(rèn)卡住40s,就會(huì)重啟。

          SurfaceFlinger 卡住

          6.Native 方法執(zhí)行時(shí)間過長導(dǎo)致重啟

          線程狀態(tài) Native,查看是否有
          PowerManagerService.nativeSetAutoSuspend

          Native 方法執(zhí)行時(shí)間過長

          7.Zygote Fork 進(jìn)程時(shí)卡住

          線程狀態(tài)Native,查看是否有
          Process.zygoteSendArgsAndGetResult

          Zygote Fork 進(jìn)程時(shí)卡住

          8.Dump 時(shí)間過長

          Dump 超過60s 可能會(huì)引起手機(jī)重啟。
          搜索關(guān)鍵字 dumpStackTraces 或 dumpStackTraces process

          Dump 時(shí)間過長

          9.前面有ANR 發(fā)生

          前面有ANR 發(fā)生

          前面有ANR 發(fā)生

          10.前面有fatal JE NE KE 等Exception發(fā)生

          前面有fatal JE NE KE 等Exception發(fā)生

          11.自動(dòng)化測試腳本有call dumpsys 去dump 系統(tǒng)信息

          自動(dòng)化測試腳本有call dumpsys 去dump 系統(tǒng)信息

          六、 Android O以上導(dǎo) Log 注意事項(xiàng)

          Android O 以上的 mtklog 和db 不在同一個(gè)目錄,需要執(zhí)行以下adb命令 導(dǎo)Log.

          //1. 導(dǎo) MTK log
          adb pull /sdcard/mtklog
          //2. 導(dǎo) AEE log,如果沒有,請執(zhí)行第3步
          adb pull /data/aee_exp
          //3.導(dǎo) data 下MTK緩存 的aee log
          adb pull /data/vendor/mtklog/aee_exp

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

          瀏覽 42
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  永久免费看黄网址 | 午夜无码在线 | 午夜操穴 | 后入美女网站 | 国产视频久久 |