ANR分析

ANR類型

ANR一般有三種類型:

  1. KeyDispatchTimeout(5 seconds) --主要類型按鍵或觸摸事件在特定時間內無響應

  2. BroadcastTimeout(10 seconds) --BroadcastReceiver在特定時間內無法處理完成

  3. 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 主線程號和進程號是一致的 通過過濾進程號和主線程號來查找相應日誌
    參考資料一

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