应用稳定性优化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://xiahunao.cn/news/2822002.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

如何在群晖Docker运行本地聊天机器人并结合内网穿透发布到公网访问

文章目录 1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 随着ChatGPT 和open Sora 的热度剧增,大语言模型时代,开启了AI新篇章,大语言模型的应用非常广泛,包括聊天机…

【MicroPython教程】SSD1306 oled

文章目录 前言一、OLED的介绍二、下载ssd1306驱动三、ssd1306驱动的使用3.1 oled屏连线3.2 初始化oled3.3 画图函数填充整个屏幕显示画点滚动写字画圆形画弧画无填充的矩形画填充矩形画线画xbm图像 四、示例代码——正弦函数总结 前言 SSD1306 OLED 是一种常见的小型显示屏&am…

​MPV,汽车产品里一个特殊品类的进化过程

「汽车」可能是整个工业革命以来,所诞生出的最有趣的工业产品。 它不仅能产生工业的机械美,还诞生了一个独立的文化体系,在汽车的发展过程中,我们也能看到一些本来应功能而诞生的产品,最终走向了千家万户。 MPV 就是…

【王道数据结构】【chapter8排序】【P371t6】

试设计一个算法&#xff0c;判断一个数据序列是否构成一个小根堆&#xff08;下面代码中的堆排序的部分仅仅是为了方便设计测试用例&#xff09; #include <iostream> #include<time.h> #include<stdlib.h>int * buildarray(int size) {int* tmp(int *) mall…

Java毕业设计-基于springboot开发的家政服务管理平台系统-毕业论文+答辩PPT(有源代码)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构 三、系统实现展示1、前台模块设计2、后台功能模块2.1管理员功能模块2.2用户功能模块2.3服务人员功能模块 四、毕设内容和源代码获取总结 Java毕业设计…

P2040 打开所有的灯

题目传送门&#xff1a;P2040 打开所有的灯 用深度优先搜索实现的一个填色题。 题目步骤&#xff1a; 1..dfs 首先dfs要判断是否符合题意&#xff0c;如果符合题意就更新最短路&#xff1b; 如果不符合题意就枚举 如果是关的就把周围四个包括 给标记上和原来相反的&#xf…

文件怎么减小内存?4个简单的方法~

随着我们在电脑或移动设备上创建、下载和收集越来越多的文件&#xff0c;存储空间的管理变得尤为重要。有时&#xff0c;文件太大会占用过多的内存&#xff0c;导致存储空间不足的问题。但别担心&#xff0c;本文将向您介绍五种简单有效的方法&#xff0c;帮助您轻松减小文件的…

SpringBoot启动扩展应用:干预优化+加快启动时间(干货典藏版)

一、SpringBoot启动过程干预 Spring Boot启动过程中我们可以实现以下干预工作&#xff1a; 修改Spring Boot默认的配置属性。使用ConfigurationProperties和EnableConfigurationProperties注解&#xff0c;可以获取和修改Spring Boot的配置属性。 加载配置文件。Spring Boot会…

深度伪造,让网络钓鱼更加难以辨别

网络钓鱼一直是安全领域的一个突出话题&#xff0c;尽管这类诈骗形式已经存在了几十年&#xff0c;依旧是欺诈攻击或渗透组织的最有效方法之一。诈骗分子基于社会工程原理&#xff0c;通过邮件、网站以及电话、短信和社交媒体&#xff0c;利用人性&#xff08;如冲动、不满、好…

JavaWeb之 Web概述

目录 前言1.1 Web和 JavaWeb的概念1.2 JavaWeb技术栈1.2.1 B/S架构1.2.2 静态资源1.2.3 动态资源1.2.4 数据库1.2.5 HTTP协议1.2.6 Web服务器 1.3 JavaWeb 学习内容 前言 博主将用 CSDN 记录 Java 后端开发学习之路上的经验&#xff0c;并将自己整理的编程经验和知识分享出来&a…

2024年腾讯云服务器优惠活动,3月份价格曝光可领代金券

腾讯云优惠活动2024新春采购节活动上线&#xff0c;云服务器价格已经出来了&#xff0c;云服务器61元一年起&#xff0c;配置和价格基本上和上个月没什么变化&#xff0c;但是新增了8888元代金券和会员续费优惠&#xff0c;腾讯云百科txybk.com整理腾讯云最新优惠活动云服务器配…

[VNCTF2024]-PWN:preinit解析(逆向花指令,绕过strcmp,函数修改,机器码)

查看保护&#xff1a; 查看ida&#xff1a; 这边其实看反汇编没啥大作用&#xff0c;需要自己动调。 但是前面的绕过strcmp还是要看一下的。 解题&#xff1a; 这里是用linux自带的产生随机数的文件urandom来产生一个随机密码&#xff0c;然后让我们输入密码&#xff0c;用st…

C++ //练习 10.6 编写程序,使用fill_n将一个序列中的int值都设置为0。

C Primer&#xff08;第5版&#xff09; 练习 10.6 练习 10.6 编写程序&#xff0c;使用fill_n将一个序列中的int值都设置为0。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /********************************************…

7.1.2 Selenium的用法1

目录 1. 初始化浏览器对象和访问页面 2. 查找节点及节点交互 2.1 查找单个节点 &#xff08;1&#xff09;获取方法1——特定方法 &#xff08;2&#xff09;通用方法 2.2 查找多个节点 2.3 节点交互 3. 动作链 4. 执行 JavaScript 之下拉进度条 5. 获取节点信息 5.…

集群分发脚本xsync

集群分发脚本xsync 一、简介二、环境准备三、添加到机器的 hosts 文件四、ping 命令测试五、SSH 配置5.1.本地先生成公钥和私钥5.2.将公钥拷贝到其他机器 六、xsync 脚本编写6.1.安装 rsync6.2.新建 xsync.sh6.3.xsync.sh脚本6.4.赋予脚本执行权限6.5.测试 endl 一、简介 配置…

java项目打包运行报异常:xxxxx-1.0-SNAPSHOT.jar中没有主清单属性

pom.xml中加入这段话即可 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.4.4</version><executions><execution><…

又挖到宝了!国人团队研发的AI视频工具PixVerse,这么好用居然还完全免费!(强烈推荐)

昨天发了一款国产免费的 AI 绘画工具 Dreamina 的介绍&#xff1a; 居然才发现&#xff01;字节跳动旗下国产AI绘画工具Dreamina&#xff0c;这么好用居然还免费&#xff01;&#xff08;强烈推荐&#xff09; 发现大家对国产 AI 工具还挺感兴趣的。今天继续帮大家挖国产的 A…

从入门到精通的Android进阶学习笔记整理,你有过迷茫吗

面试题 一般Android面试分为两部分&#xff1a;Java部分和Android部分&#xff0c;下面说一下自己面试过程遇到的一些具体题目和一些相关知识点。 一 JAVA相关 1&#xff09;JAVA基础 1.java基本数据类型有哪些&#xff0c;int&#xff0c; long占几个字节 2. 和 equals有什…

MySQL-MHA搭建、故障测试

一、架构说明 MHA&#xff08;Master High Availability&#xff09;是一个用于 MySQL 主从复制管理和自动故障转移的开源工具集。MHA 的主要目的是提供 MySQL 环境的高可用性和自动故障转移功能&#xff0c;确保在主库发生故障时能够快速切换到备库&#xff0c;降低业务中断时…

map和set例题应用

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 目录 第一题 第二题 第三题 第一题 随机链表的复制https://leetcode.cn/problems/copy-list-with-random-pointer/description/ 思路 首先遍历旧链表&#xff0c;并创建新节点&#xff0c;同时用map将旧节点与新节点…