应用稳定性优化1:ANR问题全面解析

闪退、崩溃、无响应、重启等是应用稳定性常见的问题现象,稳定性故障大体可归类为ANR/冻屏、Crash/Tombstone、资源泄露三大类。本文通过对三类故障的产生原因、故障现象、触发机制及如何定位等,展开深度解读。

本文将详解ANR类故障,并通过一个Binder阻塞问题案例,演示如何有效定位ANR类故障。

1、ANR问题原因分析

在这里插入图片描述

2、ANR问题定位方法

1)打开system_app_anr@XXXX文件,查看ANR发生进程、进程号、主线程状态,是不是有明显的死锁或者明显binder调用阻塞;
2)如果是死锁,看业务代码即可;
3)如果是binder阻塞,查看binder调用链信息,查找对端进程及其对端进程调用stack,找到阻塞函数,如果system_app_anr@XXXX被截断,可以查看traces.txt文件;
4)如果是nativepollonce,可以查看BlockMonitor日志,是否主线程有比较耗时的操作;CPU占用率情况,iowait情况;最有效的是分析systrace日志;
5)如果system_app_anr@XXXX中没有发生anr的调用stack,一般是三种情况:

ANR进程处于D state,导致无法响应SIG 3信号,从而导致无法打印stack,可以通过sysrq信息确认;
ART处于死锁状态,由于ART本身bug导致无法处理SIG 3操作;
ANR进程获取不了足够的时间无法打印调用stack。

3、Binder阻塞ANR案例分析

3.1 ANR主栈分析

可以明确,这个ANR发生的原因,是Binder阻塞:

图片

此时主线程,阻塞在isCoverOpen函数。

3.2 Binder阻塞分析

查找对应的binder transaction信息,分析binder被阻塞的原因。

(1)确认ANR发生的binder

图片

阻塞的binder是aod发生给systemserver的,但看不到systemserver的Binder线程,故需要看看systemserver的Binder情况。

(2)确认对端binder

分析2618的主栈。

图片

在binder transcation表中可以看到,systemserver进程的16个Binder线程,全部被阻塞在给hwfacerecognize发送消息。

在Android中一个进程最多会使用16个binder线程,systemserver的全部Binder线程都被阻塞,故不能再分配Binder线程处理其他的Binder消息,导致其他进程给systemserver发送Binder消息时是会被阻塞,且没有对端binder线程的。

故问题的焦点,转移到了hwfacerecognize(PID 727)的进程上。

图片

(3)业务代码分析

hwfacerecognize(PID 727)是人脸识别的进程,联合人脸识别模块的分析,发现是727进程出现crash。

图片

稳定性优化需要开发者持续运营和维护,并对稳定性涉及的多项知识领域进行了解,才能更好的设计出稳定性优化方案,进而提升用户使用体验。

转载学习:https://mp.weixin.qq.com/s?__biz=MzIzODM4NTkxNA==&mid=2247493852&idx=1&sn=3e4d0dd17601fd84550073cb00e600e2&chksm=e9388749de4f0e5f5a5c91b0bf05dffa809409b25762a7743c6e34d6498750a4e3be2bbc55c7&scene=21#wechat_redirect

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

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

相关文章

宝塔php站点设置伪静态规则 访问 a.com 时候跳转到 a.com/b.html

要在宝塔 PHP 站点中设置伪静态规则,实现访问a.com时跳转到a.com/b.html,可以按照以下步骤进行操作: 打开宝塔面板并登录到你的服务器管理界面。进入网站设置页面,找到你要设置伪静态规则的 PHP 站点。在站点设置中,找…

已解决System.ServiceModel.EndpointNotFoundException端点未找到异常的正确解决方法,亲测有效!!!

已解决System.ServiceModel.EndpointNotFoundException端点未找到异常的正确解决方法,亲测有效!!! 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 总结 在开发和使用基于Windows Communication Foundation (WC…

【前端素材】推荐优质后台管理系统cassie平台模板(附源码)

一、需求分析 1、系统定义 后台管理系统是一种用于管理网站、应用程序或系统的管理界面,通常由管理员和工作人员使用。它提供了访问和控制网站或应用程序后台功能的工具和界面,使其能够管理用户、内容、数据和其他各种功能。 2、功能需求 后台管理系…

解锁AI大模型秘籍:未来科技的前沿探索

在当今这个技术高速发展的时代,人工智能(AI)已经成为了我们生活中不可或缺的一部分。从简单的个人助手到复杂的数据分析和决策制定,AI的应用范围日益扩大,其目的是为了让我们的生活变得更加智能化。本文旨在探讨AI如何…

【单片机学习的准备】

文章目录 前言一、找一个视频是二、画图软件三、装keil5 仿真protues总结 前言 提示:这里可以添加本文要记录的大概内容: 项目需要: 提示:以下是本篇文章正文内容,下面案例可供参考 一、找一个视频是 https://www.b…

一文了解Lint工具的优缺点,以及它与高级静态分析工具的比较

避免软件缺陷是所有开发者的共同追求,因为一旦出现错误,可能导致用户体验下降,甚至威胁到关键系统的安全。不论您正在开发何种类型的程序,避免这些缺陷都是至关重要的。这就是为什么许多开发团队都依赖Lint。 什么是Linting&#…

农产品质量追溯系统—简介

概要 农产品质量安全事关广大人民群众的食用安全和身体健康。解决农产品质量安全问题,需要从源头开始抓好、抓实农产品安全监管工作。通过建立从产地到市场的全程质量控制系统和追溯制度,对农产品产地环境、生产过程、产品检测、包装盒标识等关键环节进行监督管理,提高广大…

Kubernetes(k8s第一部分)

这个技术一定会成为以后企业技术的标准 尙硅谷的王阳这个部分这个讲的特别好,可以自己去看 1,发展经历 阿里云iaas Infrastructure as a Service 平台及服务paas新浪云 platform as a service(号称免运维)(docker是下一代的标准&#x…

模板初阶的补充和string一些函数的用法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 模板初阶的补充 一、C语言中的字符串 二、标准库中的string类 2.1 string类(了解) 2.2 string类的常用接口说明(注意下面我只讲解最常用的接口&…

SpringBoot中自动装配机制

自动装配简单来说,就是自动去把第三方组件的Bean装载到IoC容器里面,不需要开发人员再去写Bean相关的一个配置。在Spring Boot的应用里面,只需要在启动类上去加上Spring Boot Application注解就可以去实现自动装配,Spring Boot App…

精品ssm的社区团购系统购物商城小程序

《[含文档PPT源码等]精品基于ssm的社区团购系统[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: Java——涉及技术: 前端使用技术:HTML5,CSS3、Jav…

Sophon AutoCV推动AI应用从模型生产到高效落地

随着技术市场和应用方向的逐渐成熟,人工智能与各行各业的结合和落地逐渐进入了深水区。 虽然由于行业规模化和应用普及度的限制,人工智能在“传统”行业的落地不如消费互联网行业,但是借助人工智能为“传统”行业的发展注入新能量一直是相关…

流程的Python(十五)-上下文管理器和else块

一、核心要义 1. for, while和try语句的else字句 2. with语句和上下文管理器 二、代码示例 1、else块 #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2024/2/28 20:14 # Author : Maple # File : 01-else块.py # Software: PyCharm""" 用…

lottie加载带图片的json 预览

背景 产品看到一款app的动效很不错,让我去模仿实现。 第一步 获取apk中的静态资源 拿到这个app的apk后,直接使用压缩工具解压, assets文件夹就是静态资源的目录 静态资源里面有lottie 那么大部分的动效应该都是lottie实现的 网上找了很多…

一些常见的SpringBoot面试题

以下是一些常见的SpringBoot面试题: 1. 什么是SpringBoot? * SpringBoot是一个开源的Java框架,用于简化Spring应用程序的创建和部署。它提供了许多内置的功能,如自动配置、嵌入式Web服务器、安全性、健康检查等,使得…

经销商文件分发 怎样兼顾安全和效率?

经销商文件分发是指将文件、资料、产品信息等从制造商或经销商传递给经销商的过程。这一过程对于确保经销商能够获取最新的产品信息、销售策略、市场活动资料等至关重要。 想要管理众多经销商合作伙伴之间的文件传输并提高效率,可以采取以下措施: 1、建…

机器学习 -- 梯度下降算法加深

梯度下降算法 在机器学习中,梯度下降算法常用于最小化代价函数(或损失函数),以此来优化模型的参数。代价函数衡量的是模型预测值与实际值之间的差异。通过最小化这个函数,我们可以找到模型预测最准确的参数。 代价函…

数字快速增长动画插件vue-countupjs

使用场景: ①页面加载时实现数字从0开始滚到指定数字 ②大屏数字的滚动增长 1.安装vue-countupjs npm install vue-countupjs --save 2.使用 ①全局使用 main.js引入 import VueCountUp from vue-countupjs Vue.use(VueCountUp) Vue.component(VueCountUp, Vue…

Mybatis-Plus-快速整合

Mybatis-Plus 依赖 依赖选择 <!-- 最新版本 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.5</version> </dependency>配置 分页 分页拦截器配置…

易毅出席成套低温烘干装备在发酵行业的节能创新应用

演讲嘉宾&#xff1a;易毅 总经理 广东芬蓝环境科技有限公司 演讲题目&#xff1a;成套低温烘干装备在发酵行业领域的节能创新应用 会议简介 “十四五”规划中提出&#xff0c;提高工业、能源领城智能化与信息化融合&#xff0c;明确“低碳经济”新的战略目标&#xff0c;热…