MTK平台的SWT异常的简单总结(3)——常见SWT/ANR类型

news2024/12/27 11:30:18

(1)如何查看db文件Log

在这里插入图片描述

(2)如何确认线程关系

在这里插入图片描述
在这里插入图片描述

(3)常见类型

(A)等锁

  • 线程状态为"Blocked",通过关键字"held by"进一步确认哪个线程拿住了锁,如有死锁检查code逻辑进行解锁;
  • 线程状态为"Waiting",表示当前线程需要另外一个线程来notify(),需要根据callstack结合code来做分析,以找到是另外的某个线程拿住了锁;

如果很多线程在等同一把锁,可能产生资源竞争问题,导致某些线程可能拿不到锁。

在这里插入图片描述
在这里插入图片描述

(B)Binder Server卡住

线程状态为"Native",且含有如下callstack:IPCThreadState::waitForResponse–>IPCThreadState::talkWithDriver,

表示卡在binder对端,下一步要找到对端,找到对端后,从对端thread的callstack中确认卡住的接口。

如何寻找binder对端:

  • 根据binder thread的sysTid在SYS_BINDER_INFO/SWT_JBT_TRACES/kernel_log中查找binder通信对端,关键字"outgoing transaction";
  • 在SYS_PROCESSES_AND_THREADS通过对端的sysTid查找process name;

在这里插入图片描述
在这里插入图片描述
(C)SurfaceFlinger卡住

SF hang Time > 40s(Service.sf.status值)出现sf hang的情况。

直接在"SYS_ANDROID_LOG"搜索"I watchdog",看是否有"surfaceflinger hang"关键字.

确认问题时间点:

SYS_ANDROID_EVENT_LOG:
01-04 12:26:05.982 780 1160 I watchdog: surfaceflinger hang.

SYS_ANDROID_LOG:
01-04 12:26:05.948 780 1160 V Watchdog: **SF hang Time **46185
01-04 12:26:05.949 780 1160 E Watchdog: **SWT happen **

在这里插入图片描述
(D)Native方法执行时间过长

线程状态为"Native",根据native方法找到对应模块,进一步确认该native方法为何执行时间过长,例如是否等待硬件返回或者硬件本身存在问题等。

在这里插入图片描述
(E)Zygote fork进程时卡住

线程状态为"Native",确认callstack中有"Process.zygoteSendArgsAndGetResult",对于Zygote fork进程时卡住的问题,一般是由于底层memory问题引起的,请检查是否有memory不足或者memory leak的问题。

在这里插入图片描述
(F)Dump时间过长

  • 前面有ANR发生;
    (a)前面有ANR发生,"ActivityManager"线程正在做dump操作,通过如 下 callstack确认:appNotResponding,dumpStackTraces。
    (b)从"SYS_ANDROID_LOG"中确认是dump哪一个进程花的时间过长。
    (c)搜索关键字"dumpStackTraces process"来确认ANR发生时所dump的进程。
    (d)通过dump的上一个进程与下一个进程来确认时间差是否大于60s,或者所有的 dump时间加起来远远超过60s。
    (e)ANR所引起的dump时间过长,需要看是否某个进程dump时间过长,并确认其原因。

在这里插入图片描述
在这里插入图片描述

  • 前面有fatal JE、NE、KE等Exception发生;

在这里插入图片描述

  • 自动化测试脚本主动call "dumpsys"去dump系统信息;
    (a)通过callstack中确认是其他进程通过binder call发起AMS进行dump。
    (b)自动化测试脚本一般是进程"adb"call进来的,该类SWT一般也不用关注,只会在eng/userdebug版本下,或者开启mtklog后才会发生。

在这里插入图片描述
注意:这种dump所导致的SWT,一般来说是系统loading过重,或者需要dump的信息确实过多所引起。终端用户不会发生这类问题,建议不用过多关注。

(4)Blocked案例分析

从db解析文件中_exp_main.txt查询如下信息:
在这里插入图片描述
进而进入到SWT_JBT_TRACES文件:
在这里插入图片描述
在这里插入图片描述
无论是通过Tid来查找,还是通过locked锁来定位,都可以最终定位到问题代码的部分。

这份Log的可以看到,System Server的32个binder都已经用完,且都处在Blocked状态:

"Binder:1353_1" prio=5 tid=10 Blocked
"Binder:1353_2" prio=5 tid=11 Blocked
"Binder:1353_3" prio=5 tid=53 Blocked
"Binder:1353_4" prio=5 tid=54 Blocked
"Binder:1353_5" prio=5 tid=145 Blocked
"Binder:1353_6" prio=5 tid=147 Blocked
"Binder:1353_7" prio=5 tid=148 Blocked
"Binder:1353_8" prio=5 tid=150 Blocked
"Binder:1353_9" prio=5 tid=139 Blocked
"Binder:1353_A" prio=5 tid=140 Blocked
"Binder:1353_B" prio=5 tid=121 Blocked
"Binder:1353_C" prio=5 tid=64 Blocked
"Binder:1353_D" prio=5 tid=82 Blocked
"Binder:1353_E" prio=5 tid=159 Blocked
"Binder:1353_F" prio=5 tid=161 Blocked
"Binder:1353_11" prio=5 tid=166 Blocked
"Binder:1353_12" prio=5 tid=167 Blocked
"Binder:1353_13" prio=5 tid=168 Blocked
"Binder:1353_14" prio=5 tid=170 Blocked
"Binder:1353_15" prio=5 tid=171 Blocked
"Binder:1353_16" prio=5 tid=172 Blocked
"Binder:1353_17" prio=5 tid=173 Blocked
"Binder:1353_18" prio=5 tid=174 Blocked
"Binder:1353_19" prio=5 tid=175 Blocked
"Binder:1353_1A" prio=5 tid=178 Blocked
"Binder:1353_1B" prio=5 tid=179 Blocked
"Binder:1353_1C" prio=5 tid=180 Blocked
"Binder:1353_1D" prio=5 tid=181 Blocked
"Binder:1353_1E" prio=5 tid=182 Blocked
"Binder:1353_1F" prio=5 tid=183 Blocked
"Binder:1353_20" prio=5 tid=184 Blocked

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

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

相关文章

一.《传奇M》装备栏遍历的突破口

寻找突破口 1.首先根据大多数游戏而言,装备栏中一般记录的是装备的对象或者装备ID,那么当我们穿装备或者脱装备肯定会有相应的值在改变 2.我们就从这里入手,当穿或脱装备的时候,使用CE搜索0然后通过改变或者未改变来筛选结果 3.接下来我们操作试一试这个思路可不可以 4.点击首…

Vue中如何进行图片识别与物体检测

Vue中如何进行图片识别与物体检测 随着人工智能技术的发展,图像识别和物体检测已经成为了很多应用场景的必备功能。在Vue中如何使用百度AI或腾讯AI等云服务实现图片识别和物体检测呢?本文将为您介绍一些基本概念和示例代码,帮助您快速入门。…

强化学习PPO:Proximal Policy Optimization Algorithms解读

PPO算法是一类Policy Gradient强化学习方法,经典的Policy Gradient通过一个参数化决策模型来根据状态确定动作,其参数更新是通过下式进行的: 用于衡量决策模型的优劣目标,决策模型的优化目标为寻找最优决策,使得该决策…

电力辅助服务

电力辅助服务 1、电力辅助服务是什么2、电力辅助服务发展历程3、《电力辅助管理办法》主要修订内容4、电力辅助服务品种5、电力辅助服务市场规模6、国外电力辅助服务市场 1、电力辅助服务是什么 《电力辅助服务管理办法》中定义电力辅助服务是由火电、水电、核电、风电、光伏发…

Elastic 推出 Elastic AI 助手

作者:Mike Nichols Elastic 推出了 Elastic AI Assistant,这是一款由 ESRE 提供支持的开放式、生成式 AI 助手,旨在使网络安全民主化并支持各种技能水平的用户。 最近发布的 Elasticsearch Relevance Engine™ (ESRE™) 提供了用于创建高度相…

Spring Boot进阶(49):SpringBoot之集成WebSocket实现前后端通信 | 超级详细,建议收藏

1. 前言 在上一期,我对WebSocket进行了基础及理论知识普及学习,而这一期,我重点是要带着你们进行实战教学,手把手教学如何在springboot架构基础上集成WebSocket及实现前后端通讯功能。具有很好的学习价值,希望大家在学…

Python Selenium基本用法

Selenium 作为一款 Web 自动化测试框架,提供了诸多操作浏览器的方法,本节对其中的常用方法做详细介绍。 定位节点 Selenium 提供了 8 种定位单个节点的方法,如下所示: 定位节点方法 方法 说明 find_element_by_id() 通过 id 属性…

MacOS 高颜值的 数据库客户端工具 Tableplus 简单逆向分析

0x0 navicat 给公司发律师函了, 所以不能白嫖了.. 后来一直在找替代品, 但均感觉略有不足. dbeaver : java 开发的, 依赖 jdk , 而且BUG较多,也不流畅 mysqlworkbench : 官方出品, 功能强大. 但是用着不带劲 Sequel Ace : 开源免费, 但是只支持mysql,功能简单 最后试了下 Tab…

【手撕MyBatis源码】插件体系

文章目录 概述插件的使用插件代理机制自动分页插件拦截目标分页插件原理 概述 Mybatis作为一个应用广泛的优秀的ORM开源框架,这个框架具有强大的灵活性,在四大组件(Executor、StatementHandler、ParameterHandler、ResultSetHandler)处提供了简单易用的插…

​如何高效开发一个OA办公系统​?

如何才能高效开发一个OA办公系统?这篇教你使用零代码工具从0-1搭建一个OA办公系统,无需代码基础,只要你懂业务,只需3步即可搭建! 先来看看效果—— 系统模板>> https://www.jiandaoyun.com/ 整个系统包含物资管…

动态规划经典题型:最小路径和、所有路径

题目1:最小路径和 给定一个包含非负整数的 *m* x *n* 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入:grid [[1,3,1],[1…

计算机网络之链路层和局域网

六.链路层和局域网 6.1 链路层概述 6.1.1 链路层可能提供的服务 成帧、链路接入、可靠交付、差错检测和纠正 6.1.2 链路层在何处实现 下图是一个典型的主机体系结构,链路层的主体部分是在网络适配器实现的,部分链路层是在运行于主机CPU上的软件实现的…

融云 CTO 岑裕受邀出席亚马逊云科技「出海日」论坛

(点击购买《社交泛娱乐出海作战地图》) 6 月 9 日,亚马逊云科技主办的“潮向新世界”出海日活动在深圳举行,融云作为领军出海服务企业受邀出席。关注【融云全球互联网通信云】了解更多 在现场展位,融云的一站式全生态…

如何查看电脑是否安装了mysql

可以通过以下几种方式查看电脑是否安装了MySQL: 1. 在系统服务中查找MySQL服务 打开控制面板 → 管理工具 → 服务,在服务列表中查找“MySQL”服务。如果存在MySQL服务并且启动类型为“自动”或“手动”,则表示已安装MySQL。 2. 查找MySQL安装目录 一般MySQL的安装目录为:- Wi…

【Nexus】Linux安装Nexus

目录 一、安装包获取方式1、Nexus3.49版本的安装包2、Nexus3.53版本的安装包 二、下载安装包的两种方式(建议使用第一种安装方式)1、直接把下载好的安装包上传到服务器中2、通过wget安装Nexus压缩包①、可以使用以下命令进行安装Nexus的最新版本②、也可…

信号与系统小论文

信号与系统小论文 信号调制与解调模拟乘法器AD734信号调制信号解调 DFT和FFT 的运算复杂度比较DFT运算FFT运算复杂度比较 小论文有两个部分组成,第一个是用电路仿真实现信号的调制与解调,第二个是通过python将DFT和FFT运算的次数可视化。 信号调制与解调…

Mysql替换字段中的指定文本

前言 最近有个需求,不同的环境的ip和端口都不一样,所以就要修改表里面字段的值 但是手动修改比较麻烦而且很慢,所以在网上搜了下相关的方法。经过手动实践确实可行,下面分享给大家 准备fake数据 为了方便演示,准备…

pytorch实现图像分类器

pytorch实现图像分类器 一、定义LeNet网络模型1,卷积 Conv2d2,池化 MaxPool2d3,Tensor的展平:view()4,全连接 Linear5,代码:定义 LeNet 网络模型 二、训练并保存网络参数1,数据预处理…

mybatis-plus在实际开发中的应用

文章目录 前言一、实体类的注解二、Req查询条件三、Controller接口四、Service接口五、Service接口实现类六、Mapper接口七、枚举的使用总结 前言 最近的项目是使用mybatis-plus作为持久层框架,前面也记录过mybatis-plus的基本使用,此次记录一下本次项目…

行业报告|2022年智能制造人才发展报告:自动化、PLC、机器人等控制执行类研发岗需求增长快

原创 | 文 BFT机器人 近年来,我国智能制造应用规模和发展水平大幅跃升,制造业智能化发展成效明显,有力支撑工业经济的高质量发展。与此同时,我国在2022年首次出现人口负增长,该趋势下我国发展制造业的人口红利正逐步降…