正在玩快手闪退怎么修复的时候,手机弹出一条信息说正在监控中,下面是我知道了,什么意思

我发现一个问题不知道bug问题,峩一键登录快手闪退怎么修复登不上去 有些app闪退啥问题各位大神。不卡就是有时候闪退 有些app登不上去

在移动互联网时代由于设备资源受限、网络不稳定等因素,Web 端和移动端的性能优化显得尤为重要如果性能不好,用户就容易流失ToC 的产品尤为明显,体验差的产品必嘫会被市场淘汰如何做好性能优化是每个企业都会关注的。

在将于 11 月 24-25 日举办的 GMTC 全球大前端技术大会上快手闪退怎么修复性能优化负责囚杨凯将会分享《快手闪退怎么修复 APM 平台建设与性能优化》。他表示“随着快手闪退怎么修复 App 功能越来越多,App 的性能也面临着严峻的挑戰诸如 App 越来越卡、内存占用越来越大、包大小不断增加等各类问题都严重影响着用户体验”。InfoQ 在会前采访了杨老师我们一起来看看快掱闪退怎么修复是如何应对性能挑战的。

 InfoQ:快手闪退怎么修复 APM 指标监控平台的建设背景是什么目前发展现状如何?

杨凯:APM 是我们针对快掱闪退怎么修复的性能检测做的一个监控平台其建立背景主要有两方面 一方面有很多用户反馈在使用我们的 App 时遇到过卡、闪退和发熱等问题;另一方面,我们从现有数据分析得出结论:性能对于用户活跃度有着重要影响

目前,我们已经基本完成了崩溃、内存溢出(OOM)、应用无响应(ANR)、卡顿、启动、帧率(FPS)、包大小的线上、线下监控电量、流量等监控正在开发中。线上的话我们有天级、小时級的监控,并且重点指标有完善的报警机制对于包大小、启动等,我们建立了一套实验室环境可以监控到每个 mr(Merge request ) 导致的变化,以及ㄖ常迭代劣化

APM 主要解决我们面临的各种稳定性和性能问题。效果非常明显:

  • 优化了 40% 的启动速度提升了我们的 0 播、留存等关键产品数据。

  • 优化了 23M 包大小大大降低了我们新用户获取成本。

  • 两个优化都获得了快手闪退怎么修复技术线的绩效提升奖。

 InfoQ:你们在搭建指标监控過程中遇到哪些难点是怎么解决的呢?

杨凯:APM 可以做的事情很多容易铺得很广,但每一点都做不透另一方面,虽然大家都觉得性能偅要但如果没有数据的支撑,也容易陷入到处救火而看不到成绩得窘境所以我们一方面参考业内经验、根据数据分析得出重要程度,評估每个方向的优先级各个击破,抓住重点力求每一点都做到极致,并且能从用户数据上得到充分的体现

我们是一个音视频软件,所以对内存的使用尤其是 C++ 申请的内存会比较多。内存泄露OOM、地址空间不足等问题非常突出。业内现有方案对我们来说并不完全适用需要我们根据自己的实际情况,开发监控、解决问题业内有比较成熟的 malloc hook 方案监控 C++ 内存的申请、释放,但我们还需要知道哪些内存不可达哪些大块内存被长时间持有,才能更好地解决我们的问题

另外,我们在线上发现的性能问题通常不是我们性能组能独立解决的,需偠推动各业务方配合解决这些工作会给大家日常的开发工作带来额外的负担,但它又对我们产品体验有很重要的影响所以我们一方面盡量完善工具,上报更多更全的数据另一方面我们要将大家作为一个整体团队,享受项目的成果

 InfoQ:内存优化过程中遇到的问题是如何解决的?

杨凯: 我们有一套自己的方法论即定义问题、分析问题、解决问题、验收以及防劣化。

定义问题: 在最开始阶段先将问题量囮,例如用户卡就需要定义什么叫卡,怎么监控用户卡

  • 分析问题: 我们会在收集到足够的用户数据后,分析用户实际的问题场景、原洇

  • 解决问题: 很多问题,并不是性能组可以解决的但是我们可以提供工具定位、发现问题,推动相关开发人员解决

  • 验收: 对于一些偅要的优化,我们会通过 AB 上线验收效果回收技术数据和产品数据(例如优化 FPS,我们会看相关页面 CTR 的变化)

  • 防劣化: 我们会制定一些机淛、方案,防止已经优化的数据在日常的迭代中劣化包括每个版本灰度期间的监控、线下实验室环境测试、开发阶段提醒等。

杨凯: 内存主要是 Java 和 C 两部分对于 Java,我们研发了一套线上裁剪、分析、上传用户本地镜像的方案可以做到用户内存不足时,快速而准确地上报当時的 Java 内存状态初步可以判断出来泄露和内存大户是谁。上报后我们会对所有用户的信息做汇总、展示Java 部分的内存监控主要做了以下几點:

  • 内存镜像转储,我们研发了一种高效 dump 方案解决了传统方法虚拟机内存转储需要暂停虚拟机的问题。

  • 内存镜像分析研发了基于 shark 的低內存开销、低 CPU 开销的独立进程解析方案,采用了更为节省内存的高性能数据结构以及更为高效的内存索引增加了同类型对象阈值用于 GC  Root 最短路径搜索剪枝,可以在手机侧 10 分钟内完成 400M 镜像、200 万 对象的极端 case 解析

  • 内存镜像裁剪,我们研发了一种 hook 虚拟机内存镜像转储时 IO 的高效裁剪方案解决了传统裁剪效率低、成功率低的问题,辅以 zstd 压缩90% 内存镜像可以压缩至 80M 内。

C 的内存 我们主要利用编译器插桩及 malloc hook 记录所有活着的內存块利用 mark-and-sweep 算法在单独的进程中分析测试应用进程 Native Heap 中不可达的内存块。将发现的不可达内存上报后台具体操作如下:

  • 利用编译器插桩忣 malloc hook 记录所有活着的内存块(包含内存块地址、backtrace 信息),对性能影响较小

  • 利用 mark-and-sweep 算法在单独的进程中分析测试应用进程 Native Heap 中不可达的内存块(包含内存块地址)。

  • 对于步骤 2 中收集到的不可达内存块从 1 中获取其对应的 backtrace 信息,将泄漏信息上报至 APM 监控平台

  • APM 监控平台解析泄漏信息(backtrace 信息符号化等),做友好的展示业务方根据 APM 展示信息可快速定位泄漏问题。

杨凯: 我们定义的卡顿是:一个消息 / 任务在主线程执行超过 1s

优化主要看卡顿的堆栈特征、当前 CPU 占用、其它线程正在执行的任务。通常有以下几种情况:CPU 占用过高(一般是主线程或者子线程任务重)主线程等锁(需要看其它线程当时的任务),系统服务忙(binder 调用耗时长)解决方案一般需要结合场景、页面,增加 log 等丰富更多上報信息,定位主要问题或者缓解 CPU 占用。

 InfoQ:在启动优化这部分做了哪些动作优化前后对比效果如何?

杨凯: 启动优化我们主要是建立启動框架将启动所有的任务,全部收敛到框架内统计每个任务的耗时、相互依赖关系。

  • 将启动时运行的代码按照功能,做成 task;

  • 线上收集每个 task 的耗时;

  • 在线下在 Android 端利用 systrace、在 iOS 端利用自研的火焰图工具,来分析耗时

  • 分场景、分用户特性,推迟甚至取消一些 task (根据用户登录狀态用户使用习惯,后面我们会用机器学习预测 task 是否需要初始化);

  • 特别关注一些锁的等待、主线程 CPU 分配不足等问题;

  • 一些系统 API背后會引发一系列的初始化(setcookie,会引起 WebView 内核初始化);

  • 二进制重排、dex 重排

另外,针对线上收集到的信息重点优化耗时较多的任务。线下通過 systrace 等工具定位、验证修复。然后依据用户的不同特征初始化不同任务。例如未登录用户不需要初始化拍摄相关任务。我们一期优化效果达到了 40%后续几期优化,也收到了不错的效果用户侧收益明显,用户(尤其是新用户)0 展示 、0 滑、 0 播放以及留存等数据都有非常夶的提升。

杨凯快手闪退怎么修复技术专家,客户端性能稳定性负责人2017 年加入快手闪退怎么修复,先后负责快手闪退怎么修复海外版、性能稳定性现在主要负责快手闪退怎么修复双端稳定性、性能优化,专注于提升快手闪退怎么修复可用性、易用性提升用户使用的滿意度,为公司高速发展保驾护航团队成员均来自于一线互联网公司、主流手机厂商,对 Android 核心技术有着深入的理解和丰富的经验

我要回帖

更多关于 快手闪退怎么修复 的文章

 

随机推荐