Android稳定性(一)SWT/ANR

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

一、SWT
SWT:software watchdog,监控SystemServer进程,保证核心服务和核心进程卡住后可以复位。
注意:SWT启动是在SystemServer init 的后期, 如果SystemServer在init的过程中卡死了,意味着watchdog不会起作用。

<1>watchdog原理:
Android的Watchdog是一个单例线程,在SystemServer启动的startOtherServices()中就会init &start Watchdog。

watchdog的添加方式:
Watchdog在初始化时,会构建很多HandlerChecker,大致可以分为两类:
1、Monitor Checker,用于检查是Monitor对象可能发生的死锁, AMS, PKMS, WMS等核心的系统服务都是通过addMonitor()加入Watchdog.mMonitorChecker.mMonitors列表中,该列表会不断调用Monitor.Monitor()函数。通过定期检测monitor对象的锁,以此检测线程是否发生死锁或阻塞。
2、Looper Checker,用于检查线程的消息队列是否长时间处于工作状态。Watchdog自身的消息队列,Ui, Io, Display这些全局的消息队列都是被检查的对象。此外,一些重要的线程的消息队列,也会加入到Looper Checker中,譬如AMS, PKMS,这些是在对应的对象初始化时加入的。
通过addThread()将对应主线程Handler保存到Watchdog.mHandlerCheckers列表中,同时还会把上面的mMonitorChecker也保存到Watchdog.mHandlerCheckers中,Watchdog会不断判断这些线程的Looper是否空闲,如果一直非空闲,那么必然被blocked住了。

watchdog的运作逻辑大概如下:
1、Watchdog运行后,便开始无限循环,依次调用每一个HandlerChecker的scheduleCheckLocked()方法;
2、调度完HandlerChecker之后,便开始定期检查是否超时,每一次检查的间隔时间由CHECK_INTERVAL常量设定,为30秒;
3、每一次检查都会调用evaluateCheckerCompletionLocked()方法来评估一下HandlerChecker的完成状态:
a、COMPLETED表示已经完成
b、WAITING和WAITED_HALF表示还在等待,但未超时
c、OVERDUE表示已经超时。默认情况下,timeout是1分钟,但监测对象可以通过传参自行设定,譬如PKMS的Handler Checker的超时是10分钟
4、如果超时时间到了,还有HandlerChecker处于未完成的状态(OVERDUE),则通过getBlockedCheckersLocked()方法,获取阻塞的HandlerChecker,生成一些描述信息;
5、保存日志,包括一些运行时的堆栈信息,这些日志是我们解决Watchdog问题的重要依据。如果判断需要杀掉system_server进程,则给当前进程(system_server)发送signal 9;

<2>SWT问题分析流程:(以MTK平台为例)
1、获取APLog和db文件,使用GAT工具解析db文件;
2、首先确认log有效性,确认问题类型。在SYS_ANDROID_EVENT_LOG中check SWT发生的时间点及卡住的线程,在SWT_JBT_TRACES中找到system_server一分钟内的两次backtrace(当SWT的两次有效trace打印的call stack完全一样时,才认为是block issue;如果两次trace打印的call stack不完全一样或者只有一次有效trace,怀疑系统Performance比较差,需要check系统performance状况);
3、线程阻塞问题,需要查看堆栈调用,按以下顺序排查:①thread之间是否形成一个环,是否互相持锁形成死锁;②是否binder对端被锁,如果是,需要找到binder对端线程,查看该线程阻塞情况;③是否Native Call有问题,找到对应的so文件;④是否dump时间过久导致。
4、怀疑系统性能差,check以下三方面CPU、Low Memory、IO


二、ANR
ANR:Application Not Responding
只有当应用程序的UI线程响应超时才会引起ANR,超时原因有两种:
1、当前的事件没有得到处理
2、当前的事件处理耗时过长

主要有三种类型:KeyDispatchTimeout(5s)、BroadcastTimeOut(10s)、ServiceTimeOut(20s)

ANR问题分析流程:
1、获取APLog和trace,可以查看trace堆栈调用,查看main thread情况;
2、以inputdispatch ANR为例,首先check inputdispatch type:①No Focus Window:检查activity onResume时间点,如果发生ANR时onResume还未完成,则为APP Related Issue;然后再检查relayout window时间,如果发生ANR时resume activity还未call relayout window,则为APP Related Issue,否则为WMS Issue。②Waiting Previous Event:APP是否idle,是的话是view issue,否的话是APP Related issue;
3、APP Related Issue check
在这里插入图片描述
4、Broadcast/Service ANR大都是APP Related Issue

Android Stability test occured SWT restart issue 、问题现象 1、System先ANR。 2、ANR之后系统重启。 测试方法:Stability test。 Platform:MT6732 Android版本:4.4.4KK BuildType:user 系统软件版本:D17+ZX 系统RAM:1GB 问题概率:暂未统计,截止到目前仅此1次 参考机行为:1、低概率问题,暂无参考机行为。 二、解决方案通过初步分析、深入分析(具体分析过程、关键代码和log在下面会附上) 阅读详情

相关推荐

SWT介绍和MTK针对SWT分析思路介绍

Android watchdog

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 1007

Android异常分析()

关于异常 异常? 异常就是种程序中没有预料到的问题,既然是没有预料到的,就可能不在原有逻辑处理范围内,脱离了代码控制,软件可能会出现各种奇怪的现象。比如:android系统常见异常现象有应用无响应、应用停止运行、冻屏、重启、死机等,这些异常系统有统的异常处理机制,出现异常系统就会执行相应的操作,最终有相应的现象体现出来。另外,些不在预料之中的界面显示问题,操作问题,运行卡顿问题等

zwq1457的专栏 3099

SWTANR问题--SWT 导致 low memory killer(LMK)

SWTANR问题--SWT 导致 low memory killer(LMK)

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 749

Android常见SWT/ANR原因

Android常见SWT/ANR原因

weixin_45035951的博客 1271

Android 稳定性【篇二:ANR&SWT

ANR(Application Not Responding,即应用程序无响应)。在Android中,当应用程序在规定时间内没有处理完毕相应的事件,系统就会报出ANR

qq_27672101的博客 6367

Android SWT机制

watchdog 机制解析

ztisen的博客 875

有关ANR的那点事儿

Brocadcast timeout 是指串行有序广播发送给receiver的时候,app没有来得及处理这个广播,或者app的receiver处理这个广播的时候超时了(前台广播10s,后台广播60s),没有及时回调finishReceiver通知fw。这个log的输出在某些情况是不会输出的,用户定义了ANR的处理。3)如果是binder阻塞,查看binder调用链信息,查找对端进程及其对端进程调用stack,找到阻塞函数,如果system_app_anr@XXXX被截断,可以查看traces.txt文件;

qq_43625390的博客 1660

android swt问题分析,SWT 手机重启问题分析指南

和你起终身学习,这里是程序员Android经典好文推荐,通过阅读本文,您将收获以下知识点:SWT 手机重启问题简介二、SWT 手机重启问题处理流程三、SWT 手机重启问题的原因四、SWT 手机重启问题分析流程五、SWT 手机重启问题分析举例六、Android O以上导 Log 注意事项SWT 手机重启问题简介SWT(Software Watch Dog )主要用来监控SystemSe...

weixin_29144347的博客 713

Android System ANR caused SWT restart issue

、问题现象 1、用户直观看到的现象是System先ANR。 2、ANR之后系统重启。 测试方法: 在录音的界面不停的滑动音量进度条,同时座机给测试机打电话,电话没有接通,只见界面冻结,弹出ANR,接着系统重启。 Platform:MT6732 Android版本:4.4.4KK BuildType...

weixin_34416754的博客 109

Android异常分析

关于异常 异常? 异常就是种程序中没有预料到的问题,既然是没有预料到的,就可能不在原有逻辑处理范围内,脱离了代码控制,软件可能会出现各种奇怪的现象。比如:android系统常见异常现象有应用无响应、应用停止运行、冻屏、重启、死机等,这些异常系统有统的异常处理机制,出现异常系统就会执行相应的操作,最终有相应的现象体现出来。另外,些不在预料之中的界面显示问题,操作问题,运行卡顿问题等

混魔MJM的博客 1717

Android Monkey测试实操指南:聚焦系统稳定性的指令配置与参数解析

本文介绍了Android系统Monkey测试的核心要点,包括其定位为系统级稳定性测试,需关注崩溃和无响应问题而非性能ANR。测试时需注意避免日志IO阻塞,提供了完整的测试指令及参数解析,如忽略崩溃、超时和权限异常等关键参数,并建议将日志保存在手机端。此外还补充了常用调试参数和执行后分析建议,强调重点排查崩溃和异常日志。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 665

Android iowait分析

1.介绍 在分析性能稳定性时都会考虑到io影响,主要常见问题:anr swt crash. 比如anr issue,假如io在30以上,就可以去查下是否和io有关,假如和有关情况,般blocked的位置应该是在io文件操作上。 io高有关系的,般 1.emmc有错误,搜索kernel log关键字mmc mmcqd等 2.mmc读写性能差,可以查看读写速度,以及io加载,也就是下...

wd229047557的博客 1834

Android平台debug方法集合

内核的稳定性KE/HANG/HW reboot/HWT,上层的NE/SWT/ANR、反复重启、内存泄露、内存踩踏、不开机、性能问题等等,都有属于它们自己的debug方法,接下来介绍。

fangjun791350的博客 298
上一篇: 安卓面试题整理
下一篇: Android稳定性(二)bootup fail
云梯_
博客等级 码龄11年 4粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值