SWT 重啓問題分析指南

本篇文章主要介紹 Android 開發中的部分知識點,經過閱讀本篇文章,您將收穫如下內容:程序員

1、SWT 手機重啓問題簡介
2、SWT 手機重啓問題處理流程
3、SWT 手機重啓問題的緣由
4、SWT 手機重啓問題分析流程
5、SWT 手機重啓問題分析舉例
6、Android O以上導 Log 注意事項

1、 SWT 手機重啓問題簡介

SWT(Software Watch Dog ) 主要用來監控SystemServer重要線程/Service 的運行狀況。若是發現其阻塞超過 60s ,看門狗進程就會把系統重啓,進而保證系統能夠恢復到正常狀態。緩存

判斷阻塞的方法微信

  • 1.利用 Services 註冊monitor 去Check

主要是: AMSForeground Threadoop

    1. 發送handler 到重要的Loop 線程來Check 是否阻塞。

主要是: Main ThreadUI ThreadIO ThreadDisplay ThreadWMSOther Services測試

SWT 判斷阻塞的方法 圖文描述以下:spa

SWT 判斷阻塞的方法

2、 SWT 手機重啓問題處理流程

SWT 處理流程:
1.每半分鐘check 一次system_server 進程
檢查系統是否卡住,若是卡住,dump 一次system_serverbacktrace線程

2.一分鐘卡住後kill,並從新計數
若是卡住,第二次dump,並killsystem_server進程 ,不然從新計時。3d

3.SWT 處理大體流程以下:code

SWT 處理流程

3、 SWT 手機重啓問題的緣由

致使 SWT 重啓緣由的緣由有不少種。server

主要致使的緣由以下:

檢查SWT 緣由分類

4、 SWT 手機重啓問題分析流程

首先搜索關鍵 watchdog,查看是否有重啓發生。

SWT 流程分析

5、SWT 手機重啓問題分析舉例

1.分析 trace ,確認線程關係

線程被 Block 搜索關鍵字 held by

確認線程關係

線程被 Waiting 結合代碼分析。

確認線程關係

2.線程死鎖

確認Block的線程是否有閉環的死鎖關係。

線程死鎖

線程死鎖

3.Binder的Server 端卡住

線程狀態 Native,而且callstack中含有一對

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

Bind的Server端卡住

Bind的Server端卡住

4.SurfaceFlinger 卡住致使重啓

搜索關鍵字 I watchdog ,
查看是否有 surfaceflinger hang,默認卡住40s,就會重啓。

SurfaceFlinger 卡住

5.Native 方法執行時間過長致使重啓

線程狀態 Native,查看是否有
PowerManagerService.nativeSetAutoSuspend

Native 方法執行時間過長

6.Zygote Fork 進程時卡住

線程狀態Native,查看是否有
Process.zygoteSendArgsAndGetResult

Zygote Fork 進程時卡住

7.Dump 時間過長

Dump 超過60s 可能會引發手機重啓。
搜索關鍵字
dumpStackTraces

dumpStackTraces process

Dump 時間過長

前面有ANR 發生

前面有ANR 發生

前面有fatal JE NE KE 等Exception發生

自動化測試腳本有call dumpsys 去dump 系統信息

6、 Android O以上導 Log 注意事項

Android O 以上的 mtklogdb 不在同一個目錄,須要執行如下adb命令 導Log.

//1. 導 MTK log 
adb pull /sdcard/mtklog
//2. 導 AEE log,若是沒有,請執行第3步
 adb pull /data/aee_exp
//3.導 data 下MTK緩存 的aee log
 adb pull /data/vendor/mtklog/aee_exp

至此,本篇已結束,若有不對的地方,歡迎您的建議與指正。同時期待您的關注,感謝您的閱讀,謝謝!

微信關注公衆號:  程序員Android,領福利

相關文章
相關標籤/搜索