技术干货 | mPaaS 框架下如何使用 Crash SDK 对闪退进行分析?

简介: Android Native Crash 处理案例分享

目前 mPaaS Android 是使用的是 Crash SDK 对闪退进行的处理,Crash SDK 是 Android 平台上一款功能强大的崩溃日志收集 SDK,有着极高的崩溃收集率和完整、全面的崩溃日志信息,生成的日志内容非常利于问题的跟进和解决。

在我们的日常运维中,经常遇到一些闪退,无法直接从闪退堆栈看到原因,尤其是一些非 Java 的 Native 的闪退,这里分享下在 mPaaS 框架下怎么使用 Crash SDK 对闪退进行分析。

闪退报文分析工具介绍
对于 mPaaS 的用户,从 MAS 上闪退分析平台导出的一般是原始的闪退信息,闪退信息比较多,如果直接阅读会比较困难,使用者可以通过下载 Chrome 的插件 LogAnalyzer。

LogAnalyzer 会将 Crash SDK 生成的日志文本内容转化成可视效果较强的 HTML 页面展现,功能还是很强大的,主要包含:

高亮显示日志中重点信息,并使用不同颜色区分;
支持日志内容整体结构预览,快速定位重点内容;
常见崩溃原因提醒;
安装好 Chrome 插件后,还需要做以下配置

  1. 修改闪退文件后缀为 .txt
    由于 MAS 上默认下载的文件后缀是.dat,需要改为.txt,否则 LogAnalyzer 会不识别。

  2. 修改插件配置
    由于 Chrome 默认权限限制,任何 Chrome 插件默认都不能访问文件网址,需要在 Chrome 插件中进行如下操作。

1.打开 Chrome 插件管理页面 chrome://extensions/

2.找到 LogAnalyzer 插件,点击 “详细信息" 进入设置:

3.找到允许访问文件网址选项,并勾选;
4.打开或者刷新日志页面,LogAnalyzer 就生效了。

  1. 生效效果
    把日志文件直接拖到 Chrome 后,可以看到右边插件生效后,可以通过不同颜色显示闪退信息的各个字段。

首次打开后的使用说明如下:

正常查看闪退截图如下:

闪退分析举例
我们经常在日常运维中遇到一些非 Java 的 Native 模块闪退,比如 UC。这种时候很多时候只能去联系 UC 团队进行支撑,其实很多场景下,闪退的根因并不是 UC,只是最后的闪退点在 UC。

以最近日常运维中比较常遇到的 UC 内核的闪退为例,对一些案例的处理分享如下。

  1. Java 空指针导致 UC 闪退
    我们在闪退点上可以看到以下闪退(已经隐藏客户 apk 相关信息),如果只是从这看我们暂时没有任何线索,我们继续往下看日志:

当看到 logcat 节点信息的时候,我们发现了线索,首先我们看到关键字:begin to generate native report,表示当前是闪退日志上报的日志,我们再往前看,logcat 节点里打印了异常堆栈信息。

从堆栈信息可以看到,是由于 precreate 操作触发了底层的空指针,从而导致初始化异常,最后触发了闪退。解决方案就是临时关闭预创建,从而规避了闪退。

从上面的案例我们可以看出:

Native 的闪退不一定是 Native 模块的原因导致的,有可能是由于 Java 导致的异常,从而导致 Native 闪退;
begin to generate native report 附近可以看闪退相关的 logcat 信息,协助定位闪退的一些上下文日志。
2. 上层 OOM 导致 UC 闪退
首先我们看上报的闪退点的日志如下图所示,闪退在了 RenderThread 里,也是毫无头绪。

我们继续硬着头皮往下看,在 logcat 节点里查找 begin to generate native report 上报节点,我们看到了大量的底层 OOM 的异常日志,基本大概率确定是 OOM 的原因了。

剩下的就是查找 OOM 是哪里触发的。

点击闪退里的内存节点,基本原因就比较清晰了,当前手机的 Vmsize 基本已经到最大了,我们知道对于 32 位的进程,APP 可使用的 VmSize 最大为 3GB,不过当运行在 64 位 CPU 上时,VmSize 最大可超过 3GB,接近 4GB。

但是由于内核需要占据一部分,以及不同的 ROM 版本的差别,我们发现有以下规律:Android 8.1.0 及之后的系统,大部分 native oom crash 发生时 VmSize 分布在 3.5 - 3.9 G 的位置,相对较为集中。所以下面的案例的解决思路就变成了怎么解决 OOM 了。

  1. FD 误关导致 UC 闪退
    上报的日志如下图所示,我们大概只能看出 SIGILL 有可能是主动崩溃,崩溃 ILL_ILLOPC 表示非法操作。

然后我们继续看 logcat 节点的 begin to generate native report, 基本确认原因是因为 UC 使用的 FD 对象被其他程序关闭。

随后 UC 提供了带 FDscan 的工具包,通过我们复现后发现,是由于 UC 调用 shouldIntercept 回调的输入流对象被其他模块 close 掉了,导致 UC 使用的时候发现 FD 对象已经被关闭,从而做了崩溃处理。最后的处理方案就变成了用户解决其他模块的误关 FD 的问题。

总结
综合以上的 Case 分析,在遇到 Native 模块闪退的时候,一般如果从直接的闪退堆栈看不出原因的时候,不要心急,可以搜索 begin to generate native report 找到崩溃上下文,多看看 logcat 闪退上下文的日志,会有一些收获,同时对于 oom 类型的问题,可以结合当前内存统计来看。

原文链接
本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

山石网科蒋东毅:网络连接矩阵复杂化,传统安全防护框架需重构

编辑 | 宋慧 供稿 | 山石网科 头图 | 蒋东毅在 ISC 2021主题论坛发表演讲 7月28日上午,在ISC 2021 第九届互联网安全大会主题论坛上,山石网科高级副总裁、首席战略官(CSO)蒋东毅带来了一场主题为《政企安全面临的多重挑战和未来趋…

如何使用java来实现windows系统关机

可以使用Java代码来调用操作系统的命令行来实现Windows关机操作。具体步骤如下: import java.io.IOException;public class ShutdownWindows {public static void main(String[] args) {try {// 调用命令行执行关机命令Process process Runtime.getRuntime().exec…

设树采用孩子兄弟表示法存放.用类c语言设计算法计算树的高度.,(数据结构课程设计分类题目.doc...

(数据结构课程设计分类题目线性表顺序表:1、设有一元素为整数的线性表L(a1,a2,a3,…,an),存放在一维数组A[N]中,设计一个算法,以表中an作为参考元素,将该表分为左、右两部分,其中左半部分每个元素小于等于an,右半部分每个元素都大于an, an位于分界位置上(要求结果仍…

双11“新贵”红星美凯龙:数据中台充分给足转型马力

今年“天猫双11”全球狂欢季,让双11新手红星美凯龙刷足了存在感。从去年首度试水双11,到拿下今年618天猫超级晚、“天猫双11狂欢夜”两大S级总冠名,红星美凯龙通过线上玩法频频出圈,成为中国企业化数字化转型、数字化用户运营的创新样本。 红星美凯龙董事长车建新指出:红星美凯…

CDN应用进阶 | 正确使用CDN 让你更好规避安全风险

为了帮助用户更好地了解和使用CDN产品,CDN应用实践进阶系统课程开课了。12月17日,阿里云CDN产品专家彭飞在线分享了《正确使用CDN,让你更好规避安全风险》议题,内容主要包括以下几个方面: 使用CDN的常见误区和问题有哪…

“程序员千万不要选全栈开发”

作者 | 千鸟(网名) 小路助手开发者责编 | 晋兆雨出品 | CSDN(ID:CSDNnews)对于大多数人来说,大学毕业后选择一家满意的公司,一路升职加薪才是正解,但他却偏偏选择了一条鲜有人知的…

「直播回顾」Mars:加速数据科学的新方式

简介: 本文从数据科学概念、背景和现状切入,引出加速数据科学的新方式Mars,并介绍了Mars具体能解决的一些问题和背后的逻辑、哲学,同时对Mars整体数据处理流程进行了介绍。 本文分为4个部分: Mars的背景和现状 Mars解…

围观|第一代云原生企业米哈游如何让想象发生?

作者 | 贾宁宇 来源|阿里巴巴云原生公众号 在米哈游的办公区,有一间会议室,专门留给了阿里云工程师。 今年,是这家二次元文化公司创立的第九年,米哈游和阿里云的交情,也有八年了。 米哈游总裁刘伟还记得多年前&…

作为一名通信老司机,我是如何看待翼龙通信无人机救灾的?

作者:小枣君来源:鲜枣课堂昨天,关于翼龙无人机救灾的新闻,刷屏了整个网络。由国家应急管理部紧急调派的翼龙-2H应急救灾型无人机,搭载中国移动的基站设备,从贵州安顺出发,连续出动两次&#xff…

揭秘大流量场景下发布如「丝般顺滑」背后的原因

为什么很多互联网公司不敢在白天发布,都选择在半夜发布。要是能摆脱半夜发布的窘境,它不香吗?选择在半夜发布无非是为了减少对用户的影响,出了问题影响面可控。 那我们就来谈谈,发布会有哪些问题。 若您的应用没有上…

Serverless 落地之痛怎么解?

传统业务在开发上线的过程中,需要团队合作,每个人开发一部分,合并代码,开发联调,然后进行资源评估,测试环境搭建、线上环境搭建、测试上线、运维。但是在 Serverless 时代下,开发者只需要开发自…

可信云十年,重磅研究成果与2021云计算十大关键词悉数发布

编辑 | 宋慧 出品 | CSDN云计算 头图 | 2021可信云大会现场 可信云从提出到发展至今,已经历经了十个年头,可信云大会也已举办到第八届。2021年7月27-28日,由中国信息通信研究院、中国通信标准化协会联合主办的“2021可信云大会”盛大开幕&am…

「直播回顾」Mars应用与最佳实践

简介: 本文首先对Mars的概念、功能、优势进行了介绍,随后,对Mars几个典型的应用场景进行介绍,并通过两个Demo展示了在使用Mars后数据科学性能的提升,最后总结了Mars的最佳实践,让使用Mars更高效便捷。 本文…

TechWorld2021技术嘉年华,解锁“不一样”的技术盛会

当今,网络空间和物理空间的边界不断融合,网络安全和信息化作为一体之两翼也在进行一种融合,网络安全产业伴随着“融合”持续升级发展。7月30日 ,以“融合•Convergency”为主题的TechWorld2021绿盟科技技术嘉年华在北京顺利召开&a…

《资源成本双优化!看 Serverless 颠覆编程教育的创新实践》

简介: 说起 Serverless 这个词,我想大家应该都不陌生,那么 Serverless 这个词到底是什么意思?Serverless 到底能解决什么问题?可能很多朋友还没有深刻的体会和体感,这篇文章我就和大家一起聊聊 Serverless。…

为了让盲人也能追剧,优酷做了哪些努力?

简介: 虽然Android和iOS系统本身就有对无障碍技术的官方支持,但是随着各种技术的迭代和演进,以及页面内容的复杂度的增加,靠系统自身的支持已经远远无法达到理想的无障碍用户体验。优酷客户端针对视障群体实际需求及反馈进行梳理&…

统信软件启用全新LOGO,迎接中国操作系统大时代

编辑 | 宋慧 出品 | CSDN云计算 头图 | 统信软件发布会现场 在2020年底完成11亿元A轮融资的半年之后,统信软件在7月31日发布了全新品牌LOGO,并推出了200多项功能改进的统信UOS1040版本。 统信软件技术有限公司总经理刘闻欢表示,统信软件从成…

距离 Java 开发者玩转 Serverless,到底还有多远?

简介: 本文摘自 Spring Cloud Alibaba 开源项目创始团队成员方剑撰写的《深入理解 Spring Cloud 与实战》一书,主要讲述了 Java 微服务框架 Spring Boot/Cloud 这个事实标准下如何应对 FaaS 场景。 作者 | 方剑(洛夜) Spring Clo…

MSHA x Chaos 容灾高可用实践

简介: 2020 年 12 月份,阿里云应用高可用产品 AHAS(Application High Availability Service)发布了新的功能模块 AHAS-MSHA,它是在阿⾥巴巴电商业务环境演进出来的多活容灾架构解决⽅案。本篇文章我们首先介绍容灾领域…

基于元学习和人机协同的端到端对话模型

Dialog Studio 是达摩院NLP-小蜜Conversational AI团队研发的面向开发者的智能对话开发平台,目前已经在云(多省市政务12345热线、中移动10086、金融、医疗等)、钉钉(通过钉钉官方智能工作助理服务几百万企业)、集团内&…