android anr 问题梳理

虽然出现的anr各种各样,但还是将常用的分析流程写下来

1 先总体分析(看cpu,内存,io) 


1,1 如果cpu过高,需要kenel日志查看各个核的情况,排除qnx异常占用问题,也有可能是大小核,cpu升降频导致的,但这个需要perfetto才能分析。
1.2 如果是内存过高,需要查看各个app的pss,rss 甚至ion占用情况来定位具体的泄漏情况
    如果没有,也可以

    1.2.1:通过binder kenel(binder节点文件打印出来)和上层 log 排除掉 binder泄漏导致的内存问题(搜binder关键字即可)毕竟binder泄漏是最常见的问题。

     1.2.2:还可以搜索 "GC freed" 来查看对应的app是否频繁gc,一般内存紧张会触发大量的gc,进而导致低内存 anr也是一个常见的场景。
1.3 如果io占用过高,可以查看主线程或子线程释放有大量io操作,或开启了大量的子线程,或其他app io占用过高也会导致当前app anr 。

2 trace 文件打印堆栈正常的,没什么问题(比如常见的nativepollonce)要怎么分析


  2.1 查看event log,查看该时间点有没有频繁的binder调用,如果同一个app频繁的binder调用systemserver某些加锁的接口(比如binderDied)
  也是会引起binder队列排队等待导致当前app无法得到systemserver的相应引起anr的情况
  2.2 查看event log,查看当前时间点的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值