systemserver为啥很少同步跨进程调用app/DeadSystemException相关问题分析套路

news2024/11/24 22:24:45

背景:

有学员分享了一个问题,说monkey测试过程中有一系列问题属于同类的,具体看如下截图:
在这里插入图片描述
可以看到这里的有很多应用都进行了crash,而且crash原因居然都是写着
DeadSystemException: The system died; earlier logs will point to the root cause

即系统死了这种异常,但是提示也说明需要看更早的日志才可以找到根本原因,即注意这里说的DeadSystemException一般都是需要往前面分析日志找到根本原因

初步分析

一般DeadSystemException: The system died; earlier logs will point to the root cause
打印这类异常时候需要继续往前看日志,看看systemserver到底发生了什么。
往上看日志可以发现如下:

03-29 13:55:30.675   510   535 W Watchdog: *** WATCHDOG KILLING SYSTEM PROCESS: Blocked in monitor com.android.server.wm.WindowManagerService on foreground thread (android.fg)
03-29 13:55:30.676   510   535 W Watchdog: android.fg annotated stack trace:
03-29 13:55:30.676   510   535 W Watchdog:     at com.android.server.wm.WindowManagerService.monitor(WindowManagerService.java:6396)
03-29 13:55:30.677   510   535 W Watchdog:     - waiting to lock <0x048421d2> (a com.android.server.wm.WindowManagerGlobalLock)
03-29 13:55:30.677   510   535 W Watchdog:     at com.android.server.Watchdog$HandlerChecker.run(Watchdog.java:233)
03-29 13:55:30.678   510   535 W Watchdog:     at android.os.Handler.handleCallback(Handler.java:883)
03-29 13:55:30.678   510   535 W Watchdog:     at android.os.Handler.dispatchMessage(Handler.java:100)
03-29 13:55:30.678   510   535 W Watchdog:     at android.os.Looper.loop(Looper.java:214)
03-29 13:55:30.678   510   535 W Watchdog:     at android.os.HandlerThread.run(HandlerThread.java:67)
03-29 13:55:30.678   510   535 W Watchdog:     at com.android.server.ServiceThread.run(ServiceThread.java:44)
03-29 13:55:30.678   510   535 W Watchdog: *** GOODBYE!

明显可以看到确实这个时候系统都触发了watchdog,kill了system process,那么原因还是
waiting to lock <0x048421d2> (a com.android.server.wm.WindowManagerGlobalLock)
即在等待这把锁
这里再往上看可以看到有一个系统anr打印
03-29 13:52:19.196 510 535 I ActivityManager: Dumping to /data/anr/anr_2024-03-29-13-52-19-196

可以看看这个anr的dump日志

注意从上面可以看出watchdog信息可以看出是WindowManagerService的全局锁一直是获取不到,说明有地方长期占用了WindowManagerGlobalLock这个锁,可以在dump中搜一下Blocked关键字,结果如下:
在这里插入图片描述
点开一个查看详情

在这里插入图片描述

可以看到都是在等待同一个锁
lock <0x048421d2> (a com.android.server.wm.WindowManagerGlobalLock)

那么这个锁是被谁持有着不释放呢?
继续查看,查看方法可以搜thread 236,或者是搜索锁对象地址 0x048421d2
在这里插入图片描述

所以这个tid 236线程就是持有锁导致其他线程无法获取锁的根本
但是从堆栈来看看,明显这个是一个跨进程调用startActivity,systemserver在这个binder线程中居然还发起了同步的跨进程调用,即activityStarting,这个调用居然systemserver还是bp的角色。
android.app.IActivityController S t u b Stub StubProxy.activityStarting(IActivityController.java:273)

这里就奇怪了,systemserver一般自己作为bp时候的跨进程调用那都是oneway的异步调用,怎么会出现还有同步调用的情况,去aidl确认一下:

在这里插入图片描述
可以看到确实是没有oneway字样,正常其他跨进程调用都是有oneway的,比如如下IApplicationThread接口:
在这里插入图片描述

不过这个IActivityController接口正常情况都是无法使用的

/**
 * Testing interface to monitor what is happening in the activity manager
 * while tests are running.  Not for normal application development.
 * {@hide}
 */
interface IActivityController

可以看到只用于测试哈情况,其实这份日志本身是基于monkey测试的

总结直接问题点:
基于上面分析那就基本上明白了导致系统死锁的直接原因,那就是因为systemserver发起了个同步的跨进程调用,这个跨进程调用半天没有得到对方回应,导致systemserver一直卡在这个同步调用这里。

问题继续展望

上面虽然分析出来了一个直接原因,但是也没有找到根本原因,上面说的systemserver跨进程半天没有得到app层面回应,导致一直卡住,那么为啥会被一直卡住?正常跨进程调用应该很快才对,怎么能一直卡住呢?当前binder到底发生了什么呢?

需要进一步追踪根本原因,目前的日志和材料已经不够了,需要更多的日志,比如kernel日志,binder相关调用日志确认出到底是卡在了 app进程,它一直业务繁忙没处理完这个binder调用,还是说binder调用就是没到app进程等,最好还需要有app进程执行的一个线程情况和所有线程在出现问题时候执行的堆栈。

当然也不追查根本原因也可以有对应的规避方案:

可以考虑这个跨进程调用可能会存在长耗时,可以考虑改善这个跨进程调用为不获取锁等情况,修改可能较大,但是影响小一点,只会影响monkey进程业务

本文章更多详细代码和资料需要购买课程获取
hal+perfetto+surfaceflinger
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
在这里插入图片描述

私聊作者+v(androidframework007)

其他课程七件套专题:在这里插入图片描述
点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:
https://www.bilibili.com/video/BV1wc41117L4/

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

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

相关文章

《Redis使用手册之散列》

《Redis使用手册之散列》 **《Redis使用手册之散列》****散列简介****HSET&#xff1a;为字段设置值****HSETNX&#xff1a;只在字段不存在的情况下为它设置值****HGET&#xff1a;获取字段的值****HINCRBY&#xff1a;对字段存储的整数值执行加法或减法操作****HINCRBYFLOAT&a…

基于飞腾D2000全国产化高速公路一体化收费站解决方案:站数据服务器、站AI服务器、收费系统、监控系统

高速公路一体化收费站解决方案 行业 交通工程及沿路设施作为公路的一个重要组成部分&#xff0c;对城市互联和城市发展具有重要意义&#xff0c;因此围绕高速公路的专用收费 站设计和建设&#xff0c;将有效促进枢纽集散系统与高速公路连通&#xff0c;显著提升城市高速集散能…

Flexible布局在Web前端开发中的实际应用

随着Web前端技术的不断发展&#xff0c;Flexible布局&#xff08;弹性布局&#xff09;已成为现代网页设计中不可或缺的一部分。它提供了一种高效、灵活的方式来组织和管理页面元素&#xff0c;使开发者能够轻松应对各种复杂的布局需求。本文将通过一个实际的应用案例来介绍Fle…

echarts开发技巧

tooltip 提示框组件相关的行为&#xff0c;必须引入提示框组件后才能使用。 tooltip: {trigger: axis,axisPointer: {type: cross,label: {backgroundColor: #6a7985,},},//为弹出层的value值增加百分号valueFormatter: function (value) {return value %}, }, tooltip.axi…

确定性最大似然(DML)估计测角

1. 最大似然函数 贝叶斯方法是基于统计理论的一种经典方法&#xff0c;适合于有关参数估计问题。最大似然 (Maximum Likelihood&#xff0c;ML) 估计方法就是贝叶斯估计方法的一种特例&#xff0c;是在已知高斯噪声情况下的贝叶斯最优估计。在ML算法中&#xff0c;观测所得信号…

postman一直转圈圈,无法启动

解决 地址栏输入%appdata%进入此目录&#xff0c;删除%appdata%目录下的postman文件可以解决问题。

公考学习平台|基于SprinBoot+vue的公考学习平台(源码+数据库+文档)

公考学习平台目录 目录 基于SprinBootvue的公考学习平台 一、前言 二、系统设计 三、系统功能设计 5.1用户信息管理 5.2 视频信息管理 5.3公告信息管理 5.1论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&…

【华为】NAT的分类和实验配置

【华为】NAT的分类和实验配置 NAT产生的技术背景IP地址分类NAT技术原理NAT分类静态NAT动态NATNAPTEasy IP&#xff08;PAT&#xff09;NAT Server 配置拓扑静态NAT测试抓包 动态NAT测试抓包 NAPT测试抓包 PAT测试抓包 NAT Server检测抓包 PC1PC2服务器 NAT产生的技术背景 随着…

Android数据恢复:如何在手机上恢复丢失的文件和照片

我们都有 我们错误地从手机中删除重要内容的时刻。确实如此 不一定是我们的错。其他人可以对您的手机数据执行此操作 有意或无意。这在某个时间点发生在我们所有人身上。 但是&#xff0c;今天市场上有各种各样的软件可以 帮助恢复已删除的文件。这些类型的软件被归类为数据恢复…

PyTorch如何修改模型(魔改)

文章目录 PyTorch如何修改模型&#xff08;魔改&#xff09;1.修改模型层(模型框架⭐)1.1通过继承修改模型1.2通过组合修改模型(重点学&#x1f440;)1.3通过猴子补丁修改模型 2.添加外部输入3.添加额外输出参考 PyTorch如何修改模型&#xff08;魔改&#xff09; 对模型缝缝补…

vue知识

一、初始vue Vue核心 Vue简介 初识 (yuque.com) 1.想让Vue工作&#xff0c;就必须创建一个Vue实例&#xff0c;且要传入一个配置对象 2.root容器里的代码依然符合html规范&#xff0c;只不过混入了一些特殊的Vue语法 3.root容器里的代码被称为【Vue模板】 4.Vue实例和容器…

TreeSet 和 TreeMap 和 HashSet 和 HashMap

一、二叉搜索树 1、概念 &#xff08;1&#xff09;二叉搜索树 要么是一棵空树&#xff0c;要么就得满足左子树上所有结点的值都小于根结点的值&#xff0c;右子树上所有结点的值都大于根结点的值&#xff0c;即左边比我小&#xff0c;右边比我大。二叉树的左右子树也分别都是…

ssm092基于Tomcat技术的车库智能管理平台+jsp

车库智能管理平台设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本车库智能管理平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短…

【稳定检索|投稿优惠】2024年应用数学、建模与计算机工程国际会议(IASAMCE 2024)

2024 International Conference on Applied Mathematics, Modeling, and Computer Engineering 一、大会信息 会议名称&#xff1a;2024年应用数学、建模与计算机工程国际会议 会议简称&#xff1a;IASAMCE 2024 收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Schola…

C#编程模式之装饰模式

创作背景&#xff1a;朋友们&#xff0c;我们继续C#编程模式的学习&#xff0c;本文我们将一起探讨装饰模式。装饰模式也是一种结构型设计模式&#xff0c;它允许你通过在运行时向对象添加额外的功能&#xff0c;从而动态的修改对象的行为。装饰模式本质上还是继承的一种替换方…

设计模式之监听器模式ListenerPattern(三)

一、介绍 监听器模式是一种软件设计模式&#xff0c;在对象的状态发生改变时&#xff0c;允许依赖它的其他对象获得通知。在Java中&#xff0c;可以使用接口和回调机制来实现监听器模式。 二、代码实例 1、事件Event类 package com.xu.demo.listener;// 事件类 public class…

QT-QTCreator环境配置

准备工作&#xff1a; 下载QT: 链接&#xff1a;https://pan.baidu.com/s/1prJcsC4DGqhKiXvLuPQFVA?pwd60b3 提取码&#xff1a;60b3下载WindowsKits&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1QNiS3HpbH5M5kXx5AhkqnQ?pwde2h8 提取码&#xff1a;e2h8安装的…

SpringBoot配置HTTPS及开发调试

前言 在实际开发过程中&#xff0c;如果后端需要启用https访问&#xff0c;通常项目启动后配置nginx代理再配置https&#xff0c;前端调用时高版本的chrome还会因为证书未信任导致调用失败&#xff0c;通过摸索整理一套开发调试下的https方案&#xff0c;特此分享 后端配置 …

影响外汇交易盈利的因素有哪些?

外汇交易就是通过汇率的差价来赚取相应的利润。在外汇交易中&#xff0c;投资者是否可以盈利&#xff0c;主要取决于是否正确的判断了市场趋势和行情。投资者在交易过程中受到主观和客观的因素影响&#xff0c;具体包含这些内容。 影响外汇交易盈利的因素有哪些&#xff1f; 1、…

5月软考中级软件设计师100条知识点速记!

最近有一些小伙伴问我&#xff1a;现在开始备考软考还来得及吗&#xff1f;其实只是备考中级的话时间还是比较充足的&#xff0c;5月底考试&#xff0c;每年都有不少人五一假期才开始备考并通过的&#xff0c;大家抓紧时间学起来吧&#xff01; 今天为大家分享“24上半年软考软…