练气第六天

问:ANR怎么分析?

ANR问题,这其实是一个非常综合性的问题,因为anr会涉及CPU负载,内存空间大小,线程锁,GC回收,这里面每个点,都是非常考验我们基本功的。

分析ANR问题,需要综合上述所有信息,抽丝剥茧,一步一步找原因,看看到底是什么原因导致ANR?

一般anr是怎么产生的呢?有以下几点会产生anr

1、主线程有耗时操作,在规定时间内没有完成任务,被ams或者wms检测到超时,则提示anr ==这就是CPU问题

2、主线程被block,主线程执行任务,但是资源被锁了,这就涉及线程锁

3、系统或进程内存不够,由于内存不足,所以需要频繁gc,或者lmk,导致任务无法完成,这涉及gc,内存

4、CPU资源被抢占。由于线程优先级太低,一直抢不到CPU资源,导致任务一直无法被执行,最后anr

 

总之一句话,就是相关任务没有按时完成,没有完成的理由很多,到最后都会被系统考核,发anr警告。

分析anr常用关键字

anr_in

low_memory

slow_operation

基于上述观点,分析anr问题,那就认真看对应日志,

从anr进程的主线程栈信息开始,先看当时发生anr问题是,主线程处于什么状态,

然后对比CPU信息,查看当前CPU负载,

查看内存信息,分析内存使用情况,综合代码业务,判断是属于上面那种情况?

对症下药,如果太耗时,也使用多线程方案,如果被锁了,也解锁,如果内存不够,也优化内存。

真相只有一个,认真分析,一定可以找到真正原因。