其他
打破重重阻碍,手淘如何突破native crash提升稳定性?
导读:本文是作者在 「Top100全球软件案例研究峰会」上分享的——手淘Native治理,结合分享后的反馈焦点,从 native 问题线下发现和快速定位、新so集成标准、线上历史native问题治理等几个方面为大家介绍,特产此文。
背景
▐ 目前手淘Android的crash现状——找方向
从图中我们可以看出,java crash 正常可以维持在较好的水平,手淘 native crash 一般比 java crash 要高,大促期间,由于手淘内存瓶颈, native crash 率会涨到日常水准的2-3倍。
▐ native crash 治理挑战——难
▐ native crash 治理核心问题是什么?——找抓手
要治理、要解决问题,首先得理清目前导致 native crash 的问题,在做之前,做了一下 crash 数据分析,于是手动捞取了当时近5个版本的 top native crash 数据,占比最多的就是sig 6和sig 11。
Native问题治理平台工具调研
Native治理——Native Finder整体技术方案
▐ native工程标准化
第一,库迁移,为什么要做库迁移呢?我们把老的gnu C++基础库迁移成libc++_ shared库,所有so都做统一,归一化,方便归一native层问题;
第二,我们还做了重复so治理,因为不同so可能依赖了相同的so基础库,举个例子,例如A so依赖了libopenSsl基础so,B so也依赖了libopenSsl库,但他们依赖的版本不同,这样带来的坏处是,首先会增加包大小,其次会有相同so的不同版本存在应用中,这给定位问题带来了麻烦,所以需要对基础so去重。
第三,每个版本包包括灰度版本都需要存储下对应的符号化so,便于在crash发生后,我们对堆栈做符号化处理,这样堆栈我们就能看懂了,加快和精准定位问题。这个阶段是后面做的所有事情的基础,非常重要。接下来我们看看下一个阶段治理
▐ Native Finder开发完成,线下monkey跑native问题
▐ 线上灰度,结合用户真实操作场景crash
▐ 虚拟内存不足,是目前OOM主要原因
▐ 开始陆续发现各种 native 问题
展望
END