一、 SWT 手機重啟問題簡介
SWT(Software Watch Dog )主要用來監控SystemServer等重要線程/Service的運行情況。如果發現其阻塞超過60s,看門狗進程就會把系統重啟,進而保證系統可以恢復到正常狀態。
判斷阻塞的方法有如下兩種。
1.利用 Services 注冊monitor 去Check
2. 發送handler 到重要的Loop 線程來Check 是否阻塞。
主要是:Main Thread、UI Thread、IO Thread、Display Thread、WMS、Other Services。
3.SWT 判斷阻塞的方法
SWT 判斷阻塞的方法
二、 SWT 手機重啟問題處理流程
SWT 處理流程:
1.每半分鐘30scheck 一次system_server 進程
檢查系統是否卡住,如果卡住,dump一次system_server的backtrace
2.一分鐘卡住后kill,并重新計數
如果卡住,第二次dump,并kill掉system_server進程 ,否則重新計時。
3.SWT 處理大致流程如下
SWT 處理流程
三、 SWT 手機重啟問題的原因
導致SWT重啟原因的原因有很多種。
1.主要導致的原因如下:
檢查SWT 原因分類
四、 SWT 手機重啟問題分析流程
首先搜索關鍵watchdog,查看是否有重啟發生。
SWT 流程分析
五、SWT 手機重啟問題分析舉例
1.分析 trace ,確認線程關系
線程被Block搜索關鍵字held by
確認線程關系
確認線程關系
3.線程死鎖
確認Block的線程是否有閉環的死鎖關系。
線程死鎖
線程死鎖
4.Binder的Server 端卡住
線程狀態Native,并且callstack中含有一對
IPCThreadState::waitForResponse
IPCThreadState::talkWithDriver
的明顯特征。
Bind的Server端卡住
Bind的Server端卡住
5.SurfaceFlinger 卡住導致重啟
搜索關鍵字I watchdog,
查看是否有surfaceflinger hang,默認卡住40s,就會重啟。
SurfaceFlinger 卡住
6.Native 方法執行時間過長導致重啟
線程狀態Native,查看是否有
PowerManagerService.nativeSetAutoSuspend
Native 方法執行時間過長
7.Zygote Fork 進程時卡住
線程狀態Native,查看是否有
Process.zygoteSendArgsAndGetResult
Zygote Fork 進程時卡住
8.Dump 時間過長
Dump超過60s可能會引起手機重啟。
搜索關鍵字dumpStackTraces或dumpStackTraces process
Dump 時間過長
9.前面有ANR 發生
前面有ANR 發生
前面有ANR 發生
10.前面有fatal JE NE KE 等Exception發生
前面有fatal JE NE KE 等Exception發生
11.自動化測試腳本有call dumpsys 去dump 系統信息
自動化測試腳本有call dumpsys 去dump 系統信息
六、 Android O以上導 Log 注意事項
Android O以上的mtklog和db不在同一個目錄,需要執行以下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
-
手機
+關注
關注
35文章
6886瀏覽量
157739 -
看門狗
+關注
關注
10文章
565瀏覽量
70858 -
線程
+關注
關注
0文章
505瀏覽量
19705 -
SWT
+關注
關注
0文章
4瀏覽量
6631
原文標題:六、 Android O以上導 Log 注意事項
文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論