移动端堆栈关键行定位的新思路

简介: 崩溃堆栈是我们日常应用问题排查中的重要辅助手段,在移动开发上也不例外,为了支持用户在堆栈上的快速定位,我们面临一个看似比较简单问题:高亮崩溃中的关键行, 辅助用户快速定位问题。

 

阿里云 云原生应用研发平台EMAS 张月(此间)

一、前言

崩溃堆栈是我们日常应用问题排查中的重要辅助手段,在移动开发上也不例外,为了支持用户在堆栈上的快速定位,我们面临一个看似比较简单问题:高亮崩溃中的关键行, 辅助用户快速定位问题。
崩溃堆栈关键行: 堆栈中是属于用户开发代码中那行直接引起崩溃的代码。
举个例子:
image.png

二、 业界方案

业界的竞品基本上是通过 Package Name判断的,在没有 Package Name 的情况下,有的竞品会定位到第一行,有的则会定位到非系统库的第一行。
例如: 友商这种情况下就将关键行挂在了第一行 fastjson 的位置。
image.png

这里容易出现两个问题:
1.Package Name 大多数时候和真正的崩溃包名关系不大。
2.App 组件化,包名不能覆盖一方库,二方库。
为了更好的解决这个问题,我们提出了下面用词频比/词频分的方式来解决问题的新方案。

三、新方案

所以在 Package Name 的基础上,我们还需要一个辅助手段,让我们能够识别这两种情况,从而在关键行定位更精准。

这里我们想到的一个做法就是利用全量的 Crash 崩溃堆栈,计算词频比和相应的词频分,通过概率去优化我们的关键行判断。

实现上分为两个平台。

3.1 对于 iOS

1)主包判断

这个问题,对于 iOS,其实不用考虑用户填写的 Bundle ID, 因为 IOS Crash 天然就自带 Binary Images,我们将用户主包信息预存下来,用于后续判断就行了。
Binary Images
image.png

2)直接定位:

image.png

对于组件化的包,我们可以通过 Binary Images 里面的信息统计一下每个包名出现的频率,具体的频率分布统计大致如下图所示,纵坐标代表包名出现的次数:

-> 注:横坐标为包名(这里放不下),纵坐标为包名出现次数
image.png

出现的频率越低,那么我们越认为他是一方库或者二方库。

3.2 对于 Android

对于 Android,情况稍微复杂一点,首先 Android 的 Crash 中其实是不能明确标识包名的,而且 Android 的 Package Name 并不是一个词,而是一长串的以点分隔的包名, 例如

"com.aliyun.emasha.cache"。

如果单纯的还以包名的词频比来做匹配的话,那么就会出现下面的问题
a.历史数据 只出现 com.aliyun.emasha.cache 的包名, 下次出现个 com.aliyun.emasha.login 的就匹配不上了。
b.同样是 com.aliyun.emasha 的前缀,匹配到了 com.aliyun.emasha 和匹配到了 com.aliyun.emasha.cache 包名的词频相差很大,不符合常理。

所以还要解决这两个问题
a.能够尽可能的覆盖未出现的崩溃情况。
b.随着匹配的前缀越长,需要考虑前面的包名匹配带来的影响。

所以这里要引入包名分级和词频分的概念
a.包名分级:将包名 split(".") 得到数组,从前往后为 1级,2级,3级这样的分级。
b.包名词频分:根据包的词频比多级累加算出来的一个评价包名是否是三方库的分数,分数越高,是三方库的几率越大。

但这还不够,如果我们的词频比只是单纯的累加,那么 com 开头的的包名,词频分一定会很高,大于所有的 org 开头的包名,但根据我们的经验,其实不是这样的,我们认为不同级别的匹配,权重应该是不一样的,所以我就拍脑袋想了个权重。

0 5 2 1 1 1

这里举个例子

com.alibaba.aliyun.emas.ha.tlog 这个包名
com 1
com.alibaba 0.3
com.alibaba.aliyun 0.1
com.alibaba.aliyun.emas 0.05
com.alibaba.aliyun.emas.ha 0.02
com.alibaba.aliyun.emas.ha.tlog 0.01

如果匹配到 com 那么词频分为 1 * 0
如果匹配到 com.alibaba 那么词频分为 1 0 + 0.3 5 = 1.5
如果匹配到 com.alibaba.aliyun 那么词频分为 1 0 + 0.3 5 + 0.1 * 2 = 1.7
以此类推

但是在我们的经验中匹配到了 com.alibaba 和匹配到了 com.alibaba.aliyun,后者更有可能是关键行,所以它的词频分按理来说也就更低。所以我们这里做一个符合常理的修正,对于位数过短的匹配,需要后几位的权重做补齐。

最终结果如下:
如果匹配到 com 那么词频分为 1 0 + 1 5 + 1 2 + 1 1 + 1 1 + 1 1 = 10
如果匹配到 com.alibaba 那么词频分为 1 0 + 0.3 5 + 0.3 2 + 0.3 1 + 0.3 1 + 0.3 1 = 3
如果匹配到 com.alibaba.aliyun 那么词频分为 1 0 + 0.3 5 + 0.1 2 + 0.1 1 + 0.1 1 + 0.1 1 = 2

看上去是比较符合我们的经验的。

所以这里词频分的最终定义:根据包的词频多级累加算出来的一个评价包名是否是三方库的分数,分数越高,是三方库的几率越大。如果一个包名分级过短,需要把缺失的后面分级的也算上累加,用于增大短包名的词频分。

我们对所有的包做一个词频分统计,可以得到如下分布图

-> 注:横坐标为包名(这里放不下),纵坐标为包名的词频分
image.png

根据观察和测试,这里把阈值定在 0.2 左右比较能区分用户的包名和三方、系统库。

3.3 整体架构

在工程实现上我们也做了一些优化
1.以前业务数据是存储在 OSS 中的,但是 EMR-OSS 目前文件处理较慢,这里换成了更适合并行处理的 HBase。
2.只计算增量 Crash 日志, 对于存量的数据,以 HyperLogLog 的形式存储,增量计算后与存量做 Merge。
image.png

四、效果评估

常规的利用 Package Name 做判定: F1 Score
image.png

使用词频分思路的:F1 Score
image.png

五、真实效果评估

上面的效果评估只考虑到了每一个包名的情况,在生产因素下,考虑到崩溃行出现的位置,包名出现的频率,以及没关键行的情况,准确率可能会有所不同,所以我们在真实环境做了高亮测试,测试方式为:对线上50个 App,每个 App 取前3条崩溃来做统计,总的准确率如下,可以说是比较高的。

安卓准确率:(333-9)/(333)*100%=90.91%
iOS准确率:(173-0)/(173)*100%=100%
总体准确率:(503-9)/(503)*100%=94%

六、思考

小需求可以做出大深度, 后续我们可以考虑更多跨用户数据的脱敏拉通,理解数据,为客户带来更多的数据价值。

七、接下来的方向

1.组内算法的朋友说可以通过打标 + CNN 的方式来做深度学习下的三方包名判断, 这个后续可以试一试。
2.对于凭经验拍脑袋相出来的参数和方程(词频分计算),其实都可以通过打标训练的方式做参数和方程的固定,这也是一个优化方向。

八、写在最后

移动研发平台 EMAS

阿里巴巴应用研发平台 EMAS 是国内领先的云原生应用研发平台(移动App、H5应用、小程序、Web应用等),基于广泛的云原生技术(Backend as a Service、Serverless、DevOps、低代码等),致力于为企业、开发者提供一站式的应用研发管理服务,涵盖开发、测试、运维、运营等应用全生命周期。

 

 

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

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

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

相关文章

华云数据升级发布“信创云基座“ 用“全芯全栈”支持“信创强国”

2021年6月10日,北京——2021年是我国“十四五”规划的开局之年,也是我国“加快数字发展 建设数字中国”的关键之年。值此历史交汇的关键点,云计算、大数据、人工智能、物联网、工业互联网、区块链等重点产业将对国家数字经济发展起到巨大推动…

最IN的云原生架构,阿里云 Serverless 事件总线 EventBridge 重磅发布

简介: Serverless 是云计算下一个10年的主要形态,通过大量端到端的整合和云服务的集成,能极大地提高研发效率。了解阿里云 Serverless 产品家族的最新进展,包括函数计算FC、Serverless应用引擎SAE和 Serverless事件总线EventBridg…

智能技术改变淘宝,阿里巴巴首次详解核心商业AI体系

简介: 双11背后的万亿人次商品需求:淘宝创造新一代智能科技,淘宝成为超大规模智能APP,前沿科技重塑双11人货场。 图:淘宝APP已成为超大规模智能APP “淘宝APP已成为超大规模智能APP。”阿里巴巴集团资深副总裁周靖人11…

融云任杰:强互动,RTC下一个“爆点”场景|拟合

从无序中寻找踪迹,从眼前事探索未来。 2021 年正值黄金十年新开端,CSDN 以中立技术社区专业、客观的角度,深度探讨中国前沿 IT 技术演进,推出年度重磅企划栏目——「拟合」,通过对话企业技术高管大咖,跟踪报…

TI Inside,情报协同的最佳实践

6月18日,以“新IN力 御万象”为主题的 TI Inside 威胁情报应用生态协同峰会在北京隆重召开。此次峰会吸引了数百位网络安全产业专家、龙头企业代表、威胁情报生态合作机构、分析机构以及权威媒体齐聚一堂,共同交流威胁情报的最佳应用实践,探讨…

IT、OT融合趋势下,西门子举办“第一届西门子工业边缘生态大会”

近日,西门子举办“第一届西门子工业边缘生态大会”,以“聚势边缘 共赋未来”为主题,来自全国机构专家、工业制造商、系统集成商、互联网伙伴、软件和大数据伙伴、媒体等生态伙伴深入交流未来工业的发展方向。 “边缘层融合IT和OT层&#xff0…

Android网络性能监控方案

背景 移动互联网时代,移动端极大部分业务都需要通过App和Server之间的数据交互来实现,所以大部分App提供的业务功能都需要使用网络请求。如果因为网络请求慢或者请求失败,导致用户无法顺畅的使用业务功能,会对用户体验造成极大影…

打破云原生时代存储瓶颈,SmartX 发布 K8s 云原生存储 IOMesh

编辑 | 宋 慧 供稿 | SmartX 头图 | 付费下载于视觉中国 专业超融合与分布式存储产品与解决方案提供商 SmartX 发布为 Kubernetes 设计和开发的云原生存储产品 IOMesh 预览版(以下简称“IOMesh”),加速数据库等有状态应用的容器化进程。 IO…

全球边缘计算大会:阿里云资深技术专家李克畅谈边缘计算的技术趋势与挑战

2020年11月7日,以“5G边缘计算“为主题的全球边缘计算大会在北京新世界大酒店成功召开,作为业内首个专门为边缘计算人打造的行业盛会,此次活动现场共有超过600来自政、产、学、研、用各界的企业负责人、权威技术专家、通信科技从业者、边缘计…

《科学:无尽的前沿》分享会在京举办,助力中国企业打造“科研的应许之地”

当今世界百年未有之大变局加速演进,疫情影响广泛深远,不稳定性不确定性明显增加。科技创新成为国际战略博弈的主要战场,围绕科技制高点的竞争空前激烈。 6月19日,远望智库、中信出版集团联合举办了新书《科学:无尽的前…

OpenYurt 深度解读:如何构建 Kubernetes 原生云边高效协同网络?

作者 | 郑超 导读:OpenYurt 是阿里巴巴开源的云边协同一体化架构,与同类开源方案相比,OpenYurt 拥有可实现边缘计算全场景覆盖的能力。在之前的一篇文章中,我们介绍了 OpenYurt 是如何在弱网和断网场景下实现边缘自治的。本文作为…

Dubbo-go 源码笔记(二)客户端调用过程

作者 | 李志信 导读:有了上一篇文章《Dubbo-go 源码笔记(一)Server 端开启服务过程》的铺垫,可以类比客户端启动于服务端的启动过程。其中最大的区别是服务端通过 zk 注册服务,发布自己的ivkURL并订阅事件开启监听&…

云原生时代需要什么样的存储系统?

导读:本文介绍了目前云原生环境下,支持有状态应用的几种典型存储方案的特点,并对市场主流的几个云原生存储产品实际测试性能进行对比。 现状 当前,云原生已经成为应用开发者在选择架构设计时的首选。云原生让应用开发者可以将所有…

mysql管理器源码_一个HelloWorld版的MySQL数据库管理器的设计与实现(源码)

2011年,实习期间写了一个简单的数据库管理器。今天,特意整理了下,分享给大家。有兴趣的同学,可以下载源码,瞧瞧。源码只有4个类:LoginGUI,DatabaseGUI,Record,MySQLModel。1.LoginGUI该类就是一个简单的登录…

我们身边的网络流量

作者:qinglianghu 一.网络流量中的善与恶 和我们一起在网上冲浪的不仅有你身边的亲朋好友,还有栖息在互联网上密密麻麻的网络爬虫。差不多每5次的网络浏览里,有2次是"虚假"的网络爬虫产生的。这些栖息在互联网上的爬虫也是有&quo…

58.3万笔/秒!看阿里的黑科技

简介: 11月11日0点刚过26秒,天猫双11的订单创建峰值就达到58.3万笔/秒,阿里云又一次扛住全球最大规模流量洪峰!58.3万笔/秒,这一数字是2009年第一次天猫双11的1457倍。数字的背后,隐藏着阿里巴巴很多不为人…

java方法重写_Java方法重写注意事项

1.重写方法的方法名和参数列表要和被重写方法一致。2.在 java 1.4版本以前,重写方法的返回值类型被要求必须与被重写方法一致,但是在java 5.0中放宽了这一个限制,添加了对协变返回类型的支持,在重写的时候,重写方法的返…

专访李飞飞 :从清华附中高材生到阿里飞刀,一口井钻出「云原生」

简介: 他初三上清华,如今是达摩院数据库首席科学家。李飞飞从学术界走向工业界,带领阿里云技术团队一手打造了云原生分布式数据库,让阿里「全面上云」的战役再下一城。今天,他用一口水井为我们道出了云原生&#xff01…

阿里雷卷:RSocket从入门到落地,RSocket让AJP换发青春

简介: 借助 RSocket 的架构提供,我们可以将之前比较复杂的方案简化,当然最最重要的是性能的提升,即便之前的一些性能提升技术点,可能由于一些约束等,现在和 RSocket 对接,那些问题都不存在啦&am…

英特尔拥抱开源,岂能没有杀手锏?

10 年前,Netscape 创始人、硅谷著名投资人马克安德森说“软件吞噬世界”,如今已发展为“开源吞噬世界”。据《2020年度 GitHub Octoverse 报告》显示,GitHub 上开发者数量达到 5600 万,新增 6000 万个存储库以及 19 亿个 contribu…