談ANR如何分析解決ANR 2

2021-06-01 07:29:39 字數 2736 閱讀 1527

04-01 13:12:14.123 i/process(  220): sending signal. pid:    21404 sig: 3---發生anr的時間和生成trace.txt的時間

04-01 13:12:14.123 i/dalvikvm(21404):threadid=4: reacting to

signal 3

……04-0113:12:15.872 e/activitymanager(  220): anr in

com.android.email(com.android.email/.activity.splitscreenactivity)

04-0113:12:15.872 e/activitymanager(  220):

reason:keydispatchingtimedout

04-0113:12:15.872 e/activitymanager(  220): load: 8.68 / 8.37  / 8.53

04-0113:12:15.872 e/activitymanager(  220): cpuusage from   4361ms to 699ms ago ----cpu在anr發生前的使用情況

04-0113:12:15.872 e/activitymanager(  220):    5.5%21404/com.android.email: 1.3% user + 4.1% kernel / faults:

10 minor

04-0113:12:15.872 e/activitymanager(  220):    4.3%220/system_server: 2.7% user + 1.5% kernel / faults: 11

minor 2 major

04-0113:12:15.872 e/activitymanager(  220):     0.9%52/spi_qsd.0: 0% user + 0.9% kernel

04-0113:12:15.872 e/activitymanager(  220):    0.5%65/irq/170-cyttsp-: 0% user + 0.5% kernel

04-0113:12:15.872 e/activitymanager(  220):     0.5%296/com.android.systemui: 0.5% user + 0% kernel

04-0113:12:15.872 e/activitymanager(  220): 100%total: 4.8%  user + 7.6% kernel + 87% iowait

04-0113:12:15.872 e/activitymanager(  220):cpuusage from 3697ms to 4223ms later:--anr後cpu的使用量

04-0113:12:15.872 e/activitymanager(  220):    25%21404/com.android.email: 25% user + 0% kernel / faults: 191  minor

04-0113:12:15.872 e/activitymanager(  220):    16% 21603/__eas(par.hakan: 16% user + 0% kernel

04-0113:12:15.872 e/activitymanager(  220):    7.2% 21406/gc: 7.2% user + 0% kernel

04-0113:12:15.872 e/activitymanager(  220):    1.8% 21409/compiler: 1.8% user + 0% kernel

04-0113:12:15.872 e/activitymanager(  220):   5.5%220/system_server: 0% user + 5.5% kernel / faults: 1 minor

04-0113:12:15.872 e/activitymanager(  220):    5.5% 263/inputdispatcher: 0% user + 5.5% kernel

04-0113:12:15.872 e/activitymanager(  220): 32%total: 28% user  + 3.7% kernel

從log可以看出anr的型別,cpu的使用情況,如果cpu使用量接近100%,說明當前裝置很忙,有可能是cpu飢餓導致了anr

如果cpu使用量很少,說明主線程被block了

如果iowait很高,說明anr有可能是主線程在進行i/o操作造成的

除了看log,解決anr還得需要trace.txt檔案,

如何獲取呢?可以用如下命令獲取

$chmod 777 /data/anr

$rm /data/anr/traces.txt

$ps

$kill -3 pid

adbpull data/anr/traces.txt ./mytraces.txt

從trace.txt檔案,看到最多的是如下的資訊:

-----pid 21404 at 2011-04-01 13:12:14 ----- 

cmdline: com.android.email

九:如何調查並解決anr

1:首先分析log

2: 從trace.txt檔案檢視呼叫stack.

3: 看**

4:仔細檢視anr的成因(iowait?block?memoryleak?)

ANR日誌分析

一 前言 最近發現好多人不會從日誌中找到anr的解決方法,在此分享乙個小技巧。想必anr 應用程式無響應 大家都遇到過,大概有以下情況會發生 1.dispatchtimeout輸入事件分發超時,一般是主線程在5秒之內沒有響應事件。2.broadcasttimeout廣播超時,一般為廣播在10秒內未能...

ANR是什麼?怎樣避免和解決ANR

anr是什麼?怎樣避免和解決anr 並不希望每次都要處理這個對話方塊。因此,在程式裡對響應效能的設計很重要,這樣,系統不會顯示anr給使用者。activity 5秒 broadcast10秒耗時的操作 worker thread 裡面完成,handler message asyntask inten...

Android 分析ANR錯誤

只要一些類似網路連線等耗時的操作開子執行緒去跑,這樣就可以避免這個錯誤了,但是,如果現在專案的確是出現了呢。下面教你怎麼分析anr錯誤。開啟控制台 開始 執行 cmd 輸入adb pull data anr traces.txt d traces.txt,traces.txt 的檔案就會複製到d盤上...