ANR類型
ANR一般有三種類型:
-
KeyDispatchTimeout(5 seconds) --主要類型按鍵或觸摸事件在特定時間內無響應
-
BroadcastTimeout(10 seconds) --BroadcastReceiver在特定時間內無法處理完成
-
ServiceTimeout(20 seconds) --小概率類型 Service在特定的時間內無法處理完成
獲取trace文件
- adbpull data/anr/traces.txt ./mytraces.txt
基本信息解析(Log信息)
從LOG可以看出ANR的類型,CPU的使用情況,如果CPU使用量接近100%,說明當前設備很忙,有可能是CPU飢餓導致了ANR
如果CPU使用量很少,說明主線程被BLOCK了
如果IOwait很高,說明ANR有可能是主線程在進行I/O操作造成的
其他進程間接引起,例如:
當前應用進程進行進程間通信請求其他進程,其他進程的操作長時間沒有反饋;
其他進程的CPU佔用率高,使得當前應用進程無法搶佔到CPU時間片;
-
仔細查看ANR的成因(iowait?block?memoryleak?)
-
01-15 16:49:02.433 E/ActivityManager( 2466): Load: 0.6 / 0.61 / 0.42
翻譯:5分鐘,10分鐘,15分鐘內的平均負載分別爲:0.6 , 0.61 , 0.42 -
04-01 13:12:14.123 I/Process( 220): Sending signal. PID: 21404 SIG:3—發生ANR的時間和生成trace.txt的時間
-
04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 4361ms to 699ms ago ----CPU在ANR發生前的使用情況;備註:這個ago,是發生前一段時間的使用情況,不是當前時間點的使用情況;
-
CPUusage from 3697ms to 4223ms later:-- ANR後CPU的使用量
04-01 13:12:11.572 I/InputDispatcher( 220): Application is not responding:Window{2b263310com.android.email/com.android.email.activity.SplitScreenActivitypaused=false}. 5009.8ms since event, 5009.5ms since waitstarted 04-0113:12:11.572 I/WindowManager( 220): Input event dispatching timedout sending tocom.android.email/com.android.email.activity.SplitScreenActivity 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 -----ANR的類型 04-0113:12:15.872 E/ActivityManager( 220): Load: 8.68 / 8.37 / 8.53 --CPU的負載情況 04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 4361ms to 699ms ago ----**CPU在ANR發生前的使用情況;備註:這個ago,是發生前一段時間的使用情況**,不是當前時間點的使用情況; 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----注意這行:注意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
-
cpu佔用195%並不算高,在多核中每個核最大佔用率都是100%(八核佔用率是800%)
12-17 06:02:19.286 1566 1583 E ActivityManager: 195% 6142/com.immomo.momo: 195% user + 0% kernel
-
查看系統日誌system.txt 主線程號和進程號是一致的 通過過濾進程號和主線程號來查找相應日誌
參考資料一