ANR 分析流程

ANR 分析流程

一、基本流程

1.确定anr发生的时间(通过event_log搜索“am_anr”或打印trace时间点判断)

2.查看CPU占用情况(通过adblog搜索"ANR in",搜索total关键字,查看CPU的整体使用情况)

3.查看Trace文件,分析主线程等是否存在明显的阻塞与sleep

步骤一

ANR 分析流程
如果log很全的情况下在确定了anr的时间点后,找到应用的进程,在log中直接主进程号,可以快速的定位问题大致发生的时间节点
ANR 分析流程
如图定位到问题进程号为5231 ,此时过滤主进程,结合anr发生的时间点,则可以定位到问题发生的代码大致在组件初始化附近

步骤二

ANR 分析流程
ANR 分析流程
CPU已接近100% ,其中 kswapd已达40% Total里面kernel已达50% ,,说明低内存严重,kswapd一般不会超过25%。 这么高说明内存碎片多,或者kernel不断的在回收
ANR 分析流程
从log中可以看到,地区系统遇到了低内存的情况,在进行回收,这种情况查看应用自身的占比是否偏高,若无偏高,一般不是应用自身的问题

CPU分析中各个字段的含义如下:

字段 含义
user CPU在用户态的运行时间,不包括nice值为负数的进程运行的时间
nice CPU在用户态,nice值为负数的进程运行的时间
system CPU在内核态运行的时间
idle CPU空闲时间,不包括iowait时间
iowait CPU等待I/O操作的时间
irq CPU硬中断的时间
softirq CPU软中断的时间
步骤三

ANR 分析流程
主线程阻塞,阻塞原因为等待线程号为13的线程释放锁
ANR 分析流程
线程13号的getExternalCacheDir方法持有了锁,一直未释放导致,问题已定位,可以根据具体原因去处理遇到的问题