Android 線程死鎖導致的ANR問題分析

最近遇到一個系統引起的ANR問題,遇到的時候特別懵,首先我取出了日誌文件,由於網上分析ANR的例子比較少,無法找到參考,所以只能硬上了

在/data/anr/目錄下的trace文件

ANR文件

下面是本次分析所用到的trace文件

首先需要分析ANR發生在哪個進程

在這裏插入圖片描述

通過圖可以分析出ANR發生在系統進程,接着往下看

在這裏插入圖片描述

我看到這樣的情況

在這裏插入圖片描述

初步不可以確定可能是線程死鎖導致ANR,繼續往下面

在這裏插入圖片描述

我看到 0x155143c3 被線程tid=43持有,並出現等待情況,那麼接下來我通過tid=43去看看這個線程有沒有被其他線程鎖住

在這裏插入圖片描述

通過搜索我找到上面內容
說明線程43正在等待線程68的喚醒,那麼繼續找線程68

在這裏插入圖片描述

找到上面這個圖,問題已經初步明朗了

系統 com.android.server.power.PowerManagerService.setScreenBrightnessOverrideFromWindowManagerInternal
這個方法有一個同步方法,正在等待線程28的處理,然後我們繼續來看線程28

在這裏插入圖片描述

從這裏來看最後的原因已經可以確認了,下面我用一個圖來標識分析的問題在這裏插入圖片描述

從圖片來看,很明顯是由於出現線程相互等待造成的死鎖問題,原因找到,剩下的就是去找代碼的問題就好了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章