当前位置:网站首页>ANR 原理及实践
ANR 原理及实践
2022-07-07 02:28:00 【Little xian】
Broadcast ANR 设计原理
- 只在有序广播中才会有ANR的监控
- AMS负责分发有序广播,并在分发的时候设置超时监控报警,如果广播接收者在超时时间范围内处理掉消息并和AMS通信取消本次超时监控则不会发生ANR,反之未取消则判定ANR。
- AMS是用过Binder机制和APP进程通信,当接受到广播数据,会封装数据再sendMessage到主线程消息队列,主线程处理Msg,最终调用receiver.onReceive方法。(当主线程消息队列前面有耗时任务,或者其他进程有耗时任务,影响了当前事件的调度,而不是本身事件耗时过长,也会引发ANR)
Service ANR 设计原理
Input ANR 设计原理
ANR Dump流程
- 过滤掉特殊场景(正在dump,正在关机,正在crash,正在被系统kill)
- 查找需要Dump的进程,主要包括ANR进程的父进程,SystemServer进程,高CPU的(最多5个)进程
- 发送SIGQUIT信号给需要Dump的进程
- 各进程SignalCatcher线程收集当前虚拟机信息,内存信息,class信息,GC信息,再挂起所有线程,获取线程的堆栈信息
- 最后通过管道发送给SystemServer,追加写入到Trace文件中
应用检测ANR
- watchdog
- 监听SIGNALQUIT信号,确定自己进程ANR时候,Java端获取堆栈信息,或者反射调用虚拟机内部Dump线程的堆栈接口,获取数据输出到自己的目录下。
实现参考Xcrash:https://github.com/iqiyi/xCrash/blob/master/README.zh-CN.md
获取ANR Info
- 通过ActivityManagerService.getProcessesInErrorState,遍历mLruProcesses,并根据进程目前的异常状态如crash或者anr类型,返回具体的ProcessErrorStateInfo
ANR出现前消息队列中耗时情况
- 当前 Trace 堆栈所在业务耗时严重;
- 当前 Trace 堆栈所在业务耗时并不严重,但是历史调度有一个严重耗时;
- 当前 Trace 堆栈所在业务耗时并不严重,但是历史调度有多个消息耗时;
- 当前 Trace 堆栈所在业务耗时并不严重,但是历史调度存在巨量重复消息(业务频繁发送消息);
- 当前 Trace 堆栈业务逻辑并不耗时,但是其他线程存在严重资源抢占,如 IO,Mem,CPU;
- 当前 Trace 堆栈业务逻辑并不耗时,但是其他进程存在严重资源抢占,如 IO,Mem,CPU;
ANR日志语义分析
Load: 2.62 / 2.55 / 2.25
表示:1、5、15 分钟内正在使用和等待使用CPU 的活动进程的平均数CPU usage from 0ms to 1987ms later (2020-03-10 08:31:55.169 to 2020-03-10 08:32:17.156)
表明:负载信息抓取在ANR发生之后的0~1987ms。同时也指明了ANR的时间点:2020-03-10 08:31:55.169
如果是 CPU usage xxx awake 表示是ANR之前的系统负载信息41% 2080/system_server: 28% user + 12% kernel / faults: 76445 minor 180 major 26% 9378/com.xiaomi.store: 20% user + 6.8% kernel / faults: 68408 minor 68 major
表示:各个进程占用的CPU的详细情况66% TOTAL: 20% user + 15% kernel + 28% iowait + 0.7% irq + 0.7% softirq
表示:各进程合计占用CPU的信息
ANR 关键字
a. user:用户态,kernel:内核态
b. faults:内存缺页,minor——轻微的,major——重度,需要从磁盘拿数据
c. iowait:IO使用(等待)占比
d. irq:硬中断,softirq:软中断
e. utm: user space time,stm: kernel space time
参考:
边栏推荐
- 常用函数detect_image/predict
- Unity C# 函数笔记
- MySQL installation
- docker-compose启动redis集群
- Which foreign language periodicals are famous in geology?
- DB2获取表信息异常:Caused by: com.ibm.db2.jcc.am.SqlException: [jcc][t4][1065][12306][4.25.13]
- 使用net core优势/为什么使用
- Basic DOS commands
- POI导出Excel:设置字体、颜色、行高自适应、列宽自适应、锁住单元格、合并单元格...
- RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED when calling `cublasCreate(handle)`问题解决
猜你喜欢
Abnova循环肿瘤DNA丨全血分离,基因组DNA萃取分析
POI导出Excel:设置字体、颜色、行高自适应、列宽自适应、锁住单元格、合并单元格...
Force deduction 62 different paths (the number of all paths from the upper left to the lower right of the matrix) (dynamic planning)
Unable to debug screen program with serial port
直击2022ECDC萤石云开发者大会:携手千百行业加速智能升级
LM11丨重构K线构建择时交易策略
[GNN] graphic gnn:a gender Introduction (including video)
Abnova 体外转录 mRNA工作流程和加帽方法介绍
屏幕程序用串口无法调试情况
哈趣投影黑馬之姿,僅用半年强勢突圍千元投影儀市場!
随机推荐
c语言(结构体)定义一个User结构体,含以下字段:
学术报告系列(六) - Autonomous Driving on the journey to full autonomy
Jmeter 5.5版本发布说明
Postgresql源码(60)事务系统总结
UIC (configuration UI Engineering) public file library adds 7 industry materials
Wechat applet hides the progress bar component of the video tag
ESXI挂载移动(机械)硬盘详细教程
[start from scratch] detailed process of deploying yolov5 in win10 system (CPU, no GPU)
LM小型可编程控制器软件(基于CoDeSys)笔记二十三:伺服电机运行(步进电机)相对坐标转换为绝对坐标
「运维有小邓」符合GDPR的合规要求
JVM 全面深入
Implementation of VGA protocol based on FPGA
【OpenCV】形态学滤波(2):开运算、形态学梯度、顶帽、黑帽
Redhat5 installing vmware tools under virtual machine
MySQL (x)
当前发布的SKU(销售规格)信息中包含疑似与宝贝无关的字
剑指offer-高质量的代码
C language (structure) defines a user structure with the following fields:
港科大&MSRA新研究:关于图像到图像转换,Fine-tuning is all you need
ViewModelProvider.of 过时方法解决