一文教你轻松搞定ANR异常捕获与分析方法

简介: 选择一款有超强捕获能力的专业产品,对于开发者定位和修复稳定性问题至关重要。友盟+U-APM SDK集成了UC 内核团队强大的技术及友盟+超强的错误捕获能力,通过数万次捕获实践中积累了丰富经验,在产品、性能和研发能力上都极大保障了开发者定位和修复稳定性问题的超强效率。

1. ANR 产生原理

关于 ANR 的触发原因,Android 官方开发者文档中 “What Triggers ANR?” 有介绍,如下:

Generally, the system displays an ANR if an application cannot respond to user input. For example, if an application blocks on some I/O operation (frequently a network access) on the UI thread so the system can't process incoming user input events. Or perhaps the app spends too much time building an elaborate in-memory structure or computing the next move in a game on the UI thread. It's always important to make sure these computations are efficient, but even the most efficient code still takes time to run......

即,常见的有如下两种情况会产生 ANR:

输入事件(例如按键或屏幕轻触事件等)在 5 秒内没有响应;

BroadcastReceiver 在 10 秒内没有执行完成。

结合 Android 相关源码分析可知,输入事件的 ANR 检测是基于输入事件本身驱动的,系统要求在 App进程中处理完成每个输入事件后,通知系统进程事件处理完毕,以此判断 App是否无响应。

要产生 ANR,至少得有两个输入事件,场景如下:

第一个输入事件产生,系统将其发送给用户当前操作的 App;

系统收到第二个事件,发现当前距第一个输入事件发送时间超过 0.5s 仍未处理完毕,则设置一个定时器,5s 后触发;

5s 之后,若系统发现第一个输入事件仍然没有回应时,则触发 ANR,激活 App 中的 Signal Cather 线程生成 traces.txt,然后弹出 ANR 对话框,告知用户 App 无响应。

也就是说,要产生 ANR,第一个输入事件必需在 5.5s 以上没有被处理完成并反馈回系统;并且要有第二个输入事件产生。如果没有第二个输入事件,即便第一个输入事件执行了 60s 或更长时间,也是不会产生 ANR 的。

2. ANR 日志生成原理

系统的 system_server 进程在检测到 App 出现 ANR 后,会向出现 ANR 的进程发送 SIGQUIT (signal 3) 信号。正常情况下,系统的 libart.so 会收到该信号,并调用 Java 虚拟机的 dump 方法生成 traces。

以友盟+的 U-APM 应用性能监控平台为例,集成SDK 后,SDK 会拦截 SIGQUIT。在出现 ANR 时,libcrashsdk.so 会优先收到信号,并生成 traces 和 ANR 日志。在 SDK 处理完信号后,会将信号继续传递给系统的 libart.so,让系统生成 ANR traces.txt。

如下图,红色线为 U-APM SDK 处理 ANR 信号和生成 ANR 日志的流程,紫色线为系统生成 ANR traces.txt 的流程。

图片1.png

U-APM SDK ANR 捕获原理

其中,SDK 生成 traces 时,使用的是 libart.so 中的 dump 方法,生成的内容与系统原生的基本一致。并且,U-APM SDK 在调用 dump 方法时进行了优化,dump 速度较系统生成原生 traces 的速度显著提升,有效地避免了可能因生成 traces 时间过长,而被 system_server 使用 SIGKILL (signal 9) 再次强杀。

在获取所有线程的 traces 信息后,生成完整的 ANR 日志,还会提供获取触发 ANR 的原因、手机中 TOP 进程 CPU 使用率、ANR 进程中 TOP 线程 CPU 使用率、CPU 各核心处理时间分布情况、磁盘 IO 操作等待时长等重要信息。

目前,SDK 生成的 ANR 日志信息,基本包含系统生成的 ANR 日志的所有内容,甚至还包含一些系统日志中没有的内容,以及 App增加的自身的业务相关信息,对分析、定位和解决 ANR 问题,提供了更加强有力的支撑。

3、日志分析

如开发者接入了SDK,ANR 日志将自动启用,出现 ANR 时,会先于系统生成 ANR 日志。日志的主要内容介绍如下:

1). ANR 日志结构

使用日志分析插件,我们可以清晰地看到 生成的 ANR 日志包含的内容以及重点信息,如下:

图片2.png

ANR 日志结构

除了生成的日志以 Section 分为多个部分,其中,包含重要信息的 Section 会使用红色标出,特别重要的信息还会加粗。另外,每个 Section 有快捷键可直接跳转到相应位置。

2). ANR 概要

概要信息如下:

图片3.png

ANR 概要信息

这部分内容主要从系统获取,其包含了 ANR 的进程名、ANR 产生的时间、ANR 的原因、ANR 前后几秒内系统 TOP 进程的 CPU 使用率等。其中,通过 ANR 原因可以得知是输入事件处理超时,还是 BroadcastReceiver 等其它消息处理时间过长;通过 CPU 使用率则可以得知是哪个进程占用 CPU 资源过多。

3). 系统资源使用情况

可记录在出现 ANR 前一段时间内,CPU 平均使用率、CPU 各核心使用率及其耗时分布,ANR 进程中 TOP 线程的执行耗时及比例、出现页错误的次数,磁盘 IO 操作等待时长及次数等内容。如下:

图片4.png


系统资源使用情况

当 IO 繁忙导致 ANR 时,io wait time 和 CPU 时间分布中的 iowait 比例会比较突出;通过 CPU 时间分布中的 user 和 system 占比,则可以知道是用户态代码执行耗时过长,还是 Linux 内核的系统调用耗时太久。

4). ANR traces

traces 信息是 ANR 日志中最关键的内容。如U-APM生成的 traces 信息包含了出现 ANR 时主线程的 native 调用栈和所有线程的 java 调用栈。通常死锁问题通过调用栈中的信息可以很容易发现。

图片5.png

ANR traces

U-APM SDK 的 traces 由 fork 的子进程生成,不会因 Java 虚拟机出现 BUG 导致生成 traces 时又出现 native 崩溃,也不会因 dump 时卡死阻塞整个 ANR 日志的生成。

5). Logcat

以U-APM为例,会在 ANR 时抓取 Android logcat。APM SDK 能绕开部分 ROM 增加的权限控制,拿到当前 App ANR 前相关的 log 信息。当前进程以及当前错误线程输出的 log 会被重点标出,error 和 warning 也会以显目的颜色标出。

图片6.png

logcat

6). 内存等其它信息

通过ANR日志可以分析出一系列的内存信息,如:

系统的 RAM 总内存、剩余可用内存;

当前进程占用的虚拟内存、物理内存;

Java 占用的总内存和可用内存;

Native 占用的内存和可用内存等。

另外,ANR 日志同 Java 和 Native 崩溃日志一样,支持业务自定义日志内容扩展,如:

崩溃前增加简短的自定义头信息;

崩溃前注册外部文件,崩溃时其内容将被带入日志;

崩溃前缓存业务相关的最近若干条操作或信息;

崩溃时通过回调返回业务最新内容等。

4、ANR监控工具

选择一款有超强捕获能力的专业产品,对于开发者定位和修复稳定性问题至关重要。友盟+U-APM SDK集成了UC 内核团队强大的技术及友盟+超强的错误捕获能力,通过数万次捕获实践中积累了丰富经验,在产品、性能和研发能力上都极大保障了开发者定位和修复稳定性问题的超强效率。

作者:友盟全域数据

原文链接

本文为阿里云原创内容,未经允许不得转载

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514497.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DTCC 2020 | 阿里云梁高中:DAS之基于Workload的全局自动优化实践

简介: 第十一届中国数据库技术大会(DTCC2020),在北京隆重召开。在12.23日性能优化与SQL审计专场上,邀请了阿里巴巴数据库技术团队高级技术专家梁高中为大家介绍DAS之基于Workload的全局自动优化实践。 SQL自动优化是阿…

更便捷:阿里云DCDN离线日志转存全新升级

简介: 1月6日,阿里云CDN年度产品升级发布会中,阿里云CDN产品专家邓建伟宣布DCDN离线日志转存全新升级,并对离线日志转存方案的价值、应用及使用进行了详细解读。 1月6日,阿里云CDN年度产品升级发布会中,阿里…

20 行代码:Serverless 架构下用 Python 轻松搞定图像分类和预测

简介: 本文将会通过一个有趣的 Python 库,快速将图像分类的功能搭建在云函数上,并且和 API 网关结合,对外提供 API 功能,实现一个 Serverless 架构的“图像分类 API”。 前言 图像分类是人工智能领域的一个热门话题。…

夯实数字化转型算能基石 构建洛阳银行核心云

作者 | 李清溪 洛阳银行信息技术部副总经理 当前,以移动互联网、云计算、大数据、区块链等技术为代表的新一轮科技革新正全面渗透到经济社会各行业各领域。在推动数字经济与实体经济融合发展的同时,也不断改变和重塑着银行业的发展模式和经营理念。 根…

DTCC 2020 | 阿里云程实:云原生时代的数据库管理

简介: 随着云原生技术的不断发展,数据库也逐渐进入了云原生时代。在云原生时代,如何高效、安全且稳定地管理云上与云下的数据库成为摆在企业面前的一大难题。在第十一届中国数据库技术大会(DTCC2020)上,阿里…

针对数据库连接池到DRDS连接探活的优化

简介: 针对数据库连接池到DRDS连接探活的优化 1. 问题背景 近期在给某专有云客户进⾏云产品应⽤性能优化分析时,发现了⼀个有趣的关于DRDS使⽤层⾯的问题,这⾥给⼤家分享⼀下。 使⽤过DRDS产品的同学都知道在DRDS中,未分库分表的…

用友BIP|YonBuilder+APICloud 双平台,“1+1>N”的低代码战略

作者 | 宋慧 出品 | CSDN云计算 头图 | 付费下载于视觉中国 作为企业IT信息化中最热的话题,低代码被广泛关注和讨论。国内低代码赛道的厂商众多,传统表格控件厂商、互联网巨头、创业公司,各具优势,在市场攻城拔寨。而国外&#x…

人生苦短,开发用云-如何优雅完成程序员的侠客梦

简介: Coding的魅力如此之强,引无数程序员竞折腰,在今年由CSDN举办的1024程序员节上,中国初代程序员大宗师求伯君说,当年看到有人在用WPS,可开心了,因为有很多人用。然后,也会去找看是谁破解的&…

DTCC 2020 | 阿里云王涛:阿里巴巴电商数据库上云实践

简介: 第十一届中国数据库技术大会(DTCC2020),在北京隆重召开。大会以“架构革新 高效可控”为主题,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨。在数据库智能运维专场上…

SRE技术保障平台-盯屏中心TAC: 混合云一站式告警运维平台

简介: SRE技术保障平台-盯屏中心TAC: 混合云一站式告警运维平台 1.目标定位 1.1背景 告警管控平台种类繁多告警出现后未及时发现处理最终导致故障产生专有云监控能力拉起依赖版本升级,操作复杂,迭代慢异常问题和故障的感知力不如…

安全攻击层出不穷,绿盟科技“智慧安全 3.0”安全防护再升级

随着网络空间和物理空间的边界不断融合,威胁攻击也层出不穷:5月9日,美国最大的燃油管道运营商、东部地区油气输送主要动脉 Colonial Pipeline 公司遭受黑客攻击和勒索,被迫暂停运营,直接导致了美国17个州和华盛顿特区进…

技术干货 | “选图预览并上传”的场景如何解?全网最全方案汇总来了

简介: 你真的知道如何“上传”一张照片吗? 选择本地相册图片或者拍照,然后预览并且上传是移动应用中一个典型的使用场景,比如常见的身份证信息上传等。 不少客户都反馈有类似的场景,并且在使用上都或多或少的遇到一些…

Serverless 在 SaaS 领域的最佳实践

简介: 随着互联网人口红利逐渐减弱,基于流量的增长已经放缓,互联网行业迫切需要找到一片足以承载自身持续增长的新蓝海,产业互联网正是这一宏大背景下的新趋势。我们看到互联网浪潮正在席卷传统行业,云计算、大数据、人…

5G进入爬坡期,这个关键因素,决定了它的成败……

作者: 小枣君来源: 鲜枣课堂前言2021年上半年,国内5G推进取得了不错的进展。根据工信部最新的数据统计,截止6月底,国内5G基站数量达到96.1万,即将突破百万大关。而国内5G终端连接数,也相比年初猛…

如何降低微服务测试成本?我的经验之谈

简介: 本文为大家介绍微服务治理测试:基于服务契约信息,降低云上微服务测试成本。如果您的团队具备较强的微服务治理测试能力,那么希望我们在微服务治理测试方面的实践和背后的思考,可以为您提供一些参考。 前言 随着…

C语言偏科,C

即使目前的汽车工业发展飞速,类似智联系统、自动驾驶等“黑科技”层出不穷。但不少消费者却仍将关注点放在车辆的基础性能上,譬如它们的安全系数。的确,对于一台行驶在路上的代步工具而言,再多花哨的功能也只能是锦上添花&#xf…

分布式全链路灰度发布的探索与实践

简介: 在分布式系统中,由于分布式全链路灰度发布因其链路复杂、技术门槛高、落地难度高逐渐成为金融科技实现全链路灰度发布的难点所在。工行在分布式系统建设方面一直走在同业前列,积极探索分布式全链路灰度发布,致力于解决分布式…

漫画:什么是 HTTPS 协议?

作者:小灰来源:程序员小灰什么是HTTP协议?HTTP协议全称Hyper Text Transfer Protocol,翻译过来就是超文本传输协议,位于TCP/IP四层模型当中的应用层。HTTP协议通过请求/响应的方式,在客户端和服务端之间进行…

DTCC 2020 | 阿里云张鑫:阿里云云原生异地多活解决方案

简介: 异地多活,顾名思义就是分布在异地多个站点同时对外提供服务,与传统灾备最主要的区别是“多活”里所有站点都是同时在对外提供服务的。在业务不断复杂化和容灾要求不断严格化的今天,如何实现云原生的异地多活解决方案&#x…

政企边缘安全,如何助您提升企业的“免疫力“?

简介: 在数字化进程中,政企会面临诸多在线化的挑战,一方面要求业务能够在线开放,同时也要求服务是稳定流畅可靠的,此外还要保证安全合规,这对业务开发及运营者提出了极高要求。1月6日,阿里云CDN…