火山引擎MARS-APM Plus x 飞书 |降低线上OOM,提高App性能稳定性

使用火山引擎 APMPlus 解决抖音Top 1 Java 崩溃的通用优化方案 问题是在 App 进程向 system_server 进程发送 Activity.onSaveInstanceState 保存的 Bundle 数据时,驱动层在 system_server 的 Binder 接收缓冲区(大小上限 1M-8K)中分配不出用于接收 Bundle 大小的内存,导致 Binder 发送失败Bundle 数据用于 Activity 页面销毁重建时恢复页面状态,其来源包含 framework 和 App 层保存的数据。当页面过于复杂或者很重场景下可能会出现超限问题。 阅读详情

通过使用火山引擎MARS-APM Plus的memory graph功能,飞书研发团队有效分析定位问题线上case多达30例,线上OOM率降低到了0.8‰,降幅达到60%。大幅提升了用户体验,为飞书的性能品质保驾护航。

应用程序稳定性是影响用户体验及留存的关键因素

对于移动App的开发者来说,最基础也是最关注的问题就是应用程序的稳定性。而崩溃问题是影响稳定性的重要因素, 包括NSException、Signal、卡死、OOM(Out Of Memory)等问题类型。其中,OOM问题是随着业务的迭代,慢慢进入了开发者视野。

OOM问题往往潜伏在复杂的业务背景下,复现困难且缺少有效的问题排查手段。目前在 iOS 端排查内存问题的工具主要包括 Xcode 提供的 Memory Graph 和 Instruments 相关的工具集,它们能够提供相对完备的内存信息,但是应用场景仅限于开发环境,无法在生产环境使用。由于内存问题往往发生在一些极端的使用场景,线下开发测试一般无法覆盖对应的问题,Xcode 提供的工具无法分析处理大多数偶现的疑难问题。

飞书是字节跳动旗下先进企业协作与管理平台,不仅包含一站式整合及时沟通、智能日历、音视频会议、飞书文档、云盘等办公协作套件,更提供飞书OKR、飞书招聘、飞书绩效等组织管理产品。作为一款企业协作与管理平台,业务复杂度非常高,稍有不注意就会触发OOM,导致程序崩溃。

那么飞书的业务有多复杂呢?举例来说:

  • 飞书消息列表页的消息类型多达十余种,包括文档预览,视频、复杂的富文本等;
  • 飞书会议在千人视频中可以对视频做各种特效渲染,视频过程能共享文档,千人在线编辑文档;
  • 飞书文档本身支持插入各种类型信息,比如复杂计算公式、脑图、UML图、同时也支持外部扩展;

飞书把内存的使用运用到了极限,稍不留意就会导致OOM。试想一下,千人视频会议的时候,突然间因为内存问题导致崩溃,会议方是什么感受?给客户发送一条复杂的消息,因为内存问题,客户的手机崩溃了,客户是什么感受?基于此,解决内存问题、分析定位线上 OOM 原因,是飞书的首要目标

火山引擎MARS-APM Plus为飞书性能保驾护航

APM Plus是字节跳动应用开发套件MARS下的性能监控产品,通过先进的数据采集与监控技术,为企业提供全链路的应用性能监控服务,解决企业对各端监控的需求。具备非侵入式监控、丰富的异常现场还原能力,助力企业提升异常问题排查与解决的效率、优化应用品质,以降低成本提高收入。

MARS-APM Plus-功能介绍

飞书通过火山引擎MARS-APM Plus memory graph 提供的类聚合列表,能清晰的发现内存占用排名靠前的类,每一个类还可以向下钻取到内存节点单元,通过内存节点单元可以查询到节点的引用关系,顺藤摸瓜,找到最开始的父节点,同时还可以逆向去看其他内存节点单元是否也是同样的引用关系,以此来佐证该内存问题。通过这种分析思路,我们发现了超大图问题、超多帧gif问题、资源预加载问题等等。

火山引擎MARS-APM Plus的内存优化分「OOM趋势」、「泄露分析」、「大对象」和「单设备查询」。

  1. OOM 趋势:提供了内存泄露的指标分析。 除了4个核心指标(OOM次数、OOM率、影响用户数、影响用户比例)外,还提供进一步分析OOM的扩展指标,如:App占用内存大小、App占用内存比例。
  2. 泄露分析:提供了导致泄漏的对象类型列表和详情分析。 在这里可以逐一分析那些严重导致内存泄露的对象。
  3. 对象列表中:提供了占用内存过大的大对象以及数量众多聚合而成的小对象。 以帮助研发更准确地了解内存被哪些对象占用。
  4. 单设备查询中:可直接分析单台设备的内存问题。 iOS提供了直接精准分析单台设备的内存引用树、支配树、实例等,Android可下载查询其原始数据。

在使用memory graph前,飞书线上分析手段单一,也不能给出明确的理论依据,一度线上OOM用户影响率达到2‰,通过使用memory graph,我们有效分析定位问题线上case多达30例,线上 OOM 率降低到了0.8‰,降幅达到60% 。大幅提升了用户体验,为飞书的性能品质保驾护航。

助力企业提升IT异常问题排查与解决的效率、优化应用品质

APM Plus为企业提供针对应用服务的品质、性能以及自定义 埋点 APM 服务。基于海量数据的聚合分析,平台可帮助客户发现多类异常问题,并及时报警,做分配处理,同时平台提供了丰富的归因能力,包括且不限于异常分析、多维分析、自定义上报、单点日志查询等,结合灵活的报表能力可了解各类指标的趋势变化。除飞书外,APM Plus已服务了抖音、今日头条、Tik Tok等多个超大规模用户量级移动App。
在这里插入图片描述

火山引擎MARS-APM Plus的内存监控可定位到到因内存占用导致的异常,并提供多种排查内存异常的指标、维度与手段:

  1. 无死角地发现已出现的内存异常问题,有完备的归因链路。 不仅提供了丰富的指标可分析内存问题并确定影响范围,并能够给出导致内存异常的对象列表,还能够分析单台设备上具体异常节点。提供从大盘到代码的层层递进的归因分析能力,极大提高研发的排查效率
  2. 提供预防内存异常的能力。 可给出有导致内存异常风险的对象列表,可提前针对性地优化,降低事故发生率,在影响用户前就解决掉潜在风险。

目前,火山引擎MARS-APM Plus面向新用户提供试用30 天的限时免费服务。其中包含 App 监控、Web 监控、Server 监控、小程序监控,App 监控和 Web 监控各500 万条事件量, Server 与小程序监控限时不限量。

相关文章: https://mp.weixin.qq.com/s/hQRN5s60AeIj-WoTXRLlPg


MARS TALK | 02

今日头条极速版插件化实践分享

10月28日(周四)晚八点,我们邀请火山引擎MARS-APM Plus的火山引擎MARS-APM Plus开发工程师党鹏飞和飞书iOS开发工程师蔡亮,做客 MARS TALK 第二期,分享飞书基于MARS-APM Plus的性能优化实践之路。

本次活动采用线上直播的模式,更多产品及活动信息,欢迎大家扫码了解 🎉

在这里插入图片描述

iOS性能优化实践:头条抖音如何实现OOM崩溃率下降50%+(2) 对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长。而不成体系的学习效果低效漫长且无助。时间久了,付出巨大的时间成本和努力,没有看到应有的效果,会气馁是再正常不过的。所以学习一定要找到最适合自己的方式,有一个思路方法,不然不止浪费时间,更可能把未来发展都一起耽误了。如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取! 阅读详情

相关推荐

MemoryGraph:构建应用程序的内存图

内存图 该应用程序将为其运行的应用程序构建一个内存图。 最终图形表示各种类型的对象之间的关系。 局限性 当前版本不支持macOS应用和纯Swift对象 适用于iOS SDK 14.4和更低版本,并且不能保证其他SDK版本不会影响应用程序的稳定性 NSMallocBlocks对象未在图中表示 资源 其中一些方法来自但不限于以下来源: 一组用于iOS开发的应用程序内调试和探索工具 -苹果(C ++)开源堆查找实现 说明如何验证任意指针是否是有效的Objective-C对象 引擎盖下的类中的 对iOS for arm64上isa字段更改的说明 剖析macOS系统 的书

APMPlus 发布 HarmonyOS NEXT 鸿蒙系统 App 性能监控

APMPlus火山引擎应用性能监控全链路版 App 监控)全新推出 HarmonyOS NEXT “鸿蒙星河版”App 性能监控服务,致力于为鸿蒙星河版 APP 用户提供优质的使用体验。我们积极携手鸿蒙星河版生态建设,更是荣幸地成为 DevEco Studio Partner SDK 专区首款 Performance Monitoring 类型 SDK。在此,我们诚邀对鸿蒙星河版 App 性能监控有诉求的企业接入并使用我们的服务。

ma_dewei的博客 712

使用火山引擎 APMPlus 优化 iOS 内存性能的全套指南

本文面向 iOS 研发,不会涉及复杂的底层原理,而是直接告诉 iOS 研发答案,即怎么做,只需要花半小时阅读本文,就可以在开发需求的时候,知道如何更好利用内存来提升用户体验,同时避免稳定性相关问题给业务带来负向的用户体验;同时本文作者的初心是希望这篇文章能成为研发同学的一个“字典”,在一些特定场景或者感觉可能会踩内存坑的时候可以翻阅,快速找到最佳的编码规范。

字节跳动云原生计算官方账号 1592

CloudWeGo + APMPlus:打造从开发到可观测的一站式体验

Kitex 是 Golang 微服务 RPC 框架,具有 高性能 、 高可扩展 的特点,支持多消息协议(Thrift/Protobuf/gRPC)、多消息类型(PingPong/Oneway/Streaming)、服务治理、代码生成,具有完备的开源社区生态兼容性。数据分散 、 链路追踪复杂 和 故障传播 三大挑战。作为 CloudWeGo 生态中的最新成员,Eino 的开源进一步扩展了 CloudWeGo 的生态边界,使其不仅适用于传统的微服务场景,还能够赋能大模型驱动的智能化应用开发

volcenginetod的博客 1463

获取内存_让我们来调试 iOS 内存 Memory Graph

感谢你阅读本文,如果你喜欢的话,欢迎关注「 iOS 成长指北 」,如果本文对你有所帮助,欢迎点赞、收藏、分享小小文件,大大内容!在学习 iOS 内存管理的过程中,除了使用Instruments 中的 Allocations、Leaks之类的工具,我们还可以使用命令行工具来分析.memgraph 文件。今天我们主要介绍以下几种命令行分析工具 vmmap、leaks、heap、mallo...

weixin_29641609的博客 1922

使用Xcode的memory graph查找内存泄漏

由donnywals于2019年12月9日发布 代码无法充分发挥功能的原因很多。 在一篇文章中,我向您展示了如何使用Time Profiler来测量代码中每种方法所花费的时间,以及如何分析结果。 尽管可以使用这些工具发现,分析和修复许多与性能相关的问题,但通常必须对调试的内存使用情况进行一些稍有不同的调试。 特别是与内存泄漏有关。 在今天的帖子中,我将向您展示如何使用Xcode中的Memory Graph工具来分析应用程序内存中保留的对象,以及如何使用此工具发现内存泄漏。 今天,我将特别关注保留周期。

互动教程网[www.hdjc8.com] 4684

博睿数据携手火山引擎,共建新云新未来

近日,火山引擎正式发布了全系云产品,包括云基础、视频及内容分发、数据中台、开发中台、人工智能等5大类、共计78项服务。博睿数据作为火山引擎APM 生态合作伙伴亮相生态论坛。 火山引擎云产品是字节跳动“敏捷开发”技术实践的对外输出,脱胎于字节跳动9年的增长累积。从2017年首次对外提供推荐服务开始,到2020年正式上线,再到今天,火山引擎目前已经服务了包括互联网、消费电子、金融、汽车、零售等众多行业的标杆客户,覆盖了从数字体验、数字营销到大数据技术、人工智能等诸多业务场景。 博睿数据作为AP.

BJ_Bonree的博客 576

火山引擎推出一站式小程序监控方案

火山引擎 APM 团队打造出一站式小程序监控平台,旨在为开发者提供可跨平台、监控能力完善、简单易用的小程序监控服务。

YZcoder的博客 1342

Memory Graph × Knowledge Memory:图谱构建与演化机制设计

随着智能体交互频次与任务复杂度的增长,原始向量记忆结构面临「片段多、上下文弱、冗余多、知识断裂」等问题。本篇将引入语义图谱的思想,构建具备 **节点化、关联性、可演化、可压缩** 特征的记忆结构 —— `MemoryGraph`。我们将系统设计节点构造逻辑、图谱生成流程、关系归因方式、演化规则与图谱化生成引擎,为构建“知识网络型智能体”奠定长期结构化记忆能力。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1835

Xcode8调试黑科技:Memory Graph实战解决闭包引用循环问题

Xcode8的调试技能又增加了一个黑科技:Memory Graph。简单的说就是可以在运行时将内存中的对象生成一张图。在现场的开发者听到了这个消息时响起了雷鸣般的掌声!我们来看看前方记者发回的现场照片: 妈妈说再也不用担心引用循环啦!除非你是个瞎子。那么通过一个实际项目来练习一下吧。首先我们写了一个自定义UIView:MyView。初始化的时候接收一个没有参数也没有返回值的闭包作为参数,并存为自...

weixin_34185364的博客 307

分析字节跳动解决OOM的在线Memory Graph技术实现

之前看到字节团队分享的 “iOS性能优化实践:头条抖音如何实现OOM崩溃率下降50%+”这篇文章,对其实现比较感兴趣,但是没有开源,所以觉得自己花时间探索一下具体实现。 什么是OOM,为什么会发生OOM以及其原因分析,大家去看原文就好了,本文主要分析APP内存使用到达阈值后,如何采集Memory Graph信息并分析。 什么是Memory Graph? 这个时候就进入了断点模式,可以查看issue面板,注意选择右边Runtime: 有很多叹号说明就有问题了。看内存中object的名字,有.

原来是泽镜的博客 3146

观测成本如何优化?APMPlus 尾采样技术的降本增效实践

一旦收到 Root Span,即可认为该 Trace 的主干部分已完整,此时便可立即进行采样决策,无需等待超时窗口(例如 30 秒)结束,从而显著减少 Span 在内存中的缓存时间。尾采样面临的核心挑战是:在分布式环境下,一条 Trace 的不同 Span 可能产生于不同服务的不同 Pod 上,并被不同的 Collector 实例接收。它会等待一条 Trace 上的所有(或绝大部分)Span 都生成完毕,然后基于完整的链路信息,例如是否包含错误、总耗时是否超标、是否命中了特定的业务标签等,来做出采样决策。

volcenginetod的博客 942

内存管理详解

冯诺依曼结构中,存储器存放着程序的指令和数据,在程序运行时提供给CPU使用。

weixin_61196797的博客 2294

火山引擎 MARS-APMPlus X 美篇 | 形成应用性能全面监控,大幅提升APP稳定性

本文主要介绍了美篇 App 通过使用火山引擎 APMPlus ,使应用性能稳定性大幅提升的技术实践。 2月24日晚 MARS TALK 直播间,我们邀请了火山引擎 APMPlus 和美篇的研发工程师,为大家分享相关技术方案及实现细节。现在报名加入活动群 还有机会获得VR一体机——Pico Neo3哦! 一、「美篇」业务场景 美篇是南京蓝鲸人网络科技有限公司的主要产品,主打朋友圈的图文创作分享,定位为“不惑后”表达自我、结交同好、学习提升的互联网内容社区。 「美篇」业务规模: 自2015年7月正式上..

YZcoder的博客 4608

iOS开发之Xcode常用调试技巧总结

NSLog,po命令和普通断点调试相信每个iOS开发者都会,这里就不作介绍了。 一、Memory Graph Xcode8新增:Memory Graph解决闭包引用循环问题 这个时候就进入了断点模式,可以查看issue面板,注意选择右边Runtime: 有很多叹号说明就有问题了。看内存中object的名字,有一条是Closure captures leake

努力,可能成功!放弃,注定失败! 2260

AI Agent记忆系统设计:从RAG到Memory Graph的演进路径(附2024最新Benchmark对比数据)

AI Agent记忆系统设计解决长期上下文遗忘与知识碎片化难题,融合RAG检索增强与Memory Graph图谱建模,支持多轮对话、任务延续与跨会话推理。涵盖金融客服、智能助手等场景,显著提升准确率与响应一致性,附2024权威Benchmark对比数据,值得收藏。

IterStream的博客 227

Xcode8新特性-Debug Memory Graph

虽然更新Xcode 8之后各种bug,层出不穷,但是还是有新的亮点随着xcode 8一起出来的。这里介绍的是和我们调试(debug)息息相关的一个新功能 —-Debug Memory Graph调试内存图 下面的图详细的介绍了怎么调出来调试内存图这个调试内存图有什么实际的作用呢?举个经典的例子: 比如我们项目中因为各种原因导致的内存泄漏,原因可能是 1、NSTimer的使用不当 2、Block

文明的博客 1万+
上一篇: 字节跳动是如何落地微前端的
下一篇: Android 资源溢出崩溃轻松解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值