火山引擎MARS-APM Plus x 飞书 |降低线上OOM,提高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趋势」、「泄露分析」、「大对象」和「单设备查询」。
- OOM 趋势:提供了内存泄露的指标分析。 除了4个核心指标(OOM次数、OOM率、影响用户数、影响用户比例)外,还提供进一步分析OOM的扩展指标,如:App占用内存大小、App占用内存比例。
- 泄露分析:提供了导致泄漏的对象类型列表和详情分析。 在这里可以逐一分析那些严重导致内存泄露的对象。
- 对象列表中:提供了占用内存过大的大对象以及数量众多聚合而成的小对象。 以帮助研发更准确地了解内存被哪些对象占用。
- 单设备查询中:可直接分析单台设备的内存问题。 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的内存监控可定位到到因内存占用导致的异常,并提供多种排查内存异常的指标、维度与手段:
- 无死角地发现已出现的内存异常问题,有完备的归因链路。 不仅提供了丰富的指标可分析内存问题并确定影响范围,并能够给出导致内存异常的对象列表,还能够分析单台设备上具体异常节点。提供从大盘到代码的层层递进的归因分析能力,极大提高研发的排查效率
- 提供预防内存异常的能力。 可给出有导致内存异常风险的对象列表,可提前针对性地优化,降低事故发生率,在影响用户前就解决掉潜在风险。
目前,火山引擎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的性能优化实践之路。
本次活动采用线上直播的模式,更多产品及活动信息,欢迎大家扫码了解
火山引擎MARS-APM Plus x 飞书 |降低线上OOM,提高App性能稳定性的更多相关文章
- 阿里重磅开源首款自研科学计算引擎Mars,揭秘超大规模科学计算
日前,阿里巴巴正式对外发布了分布式科学计算引擎 Mars 的开源代码地址,开发者们可以在pypi上自主下载安装,或在Github上获取源代码并参与开发. 此前,早在2018年9月的杭州云栖大会上,阿里 ...
- Worktile正式入驻飞书,助力企业轻松实现敏捷开发与协作
企业在敏捷研发中时常面临着交付延期.需求不匹配等问题,如何更高效地完成敏捷研发? Worktile携手飞书,为企业用户提供敏捷开发服务,帮助企业实现软件项目的需求管理.缺陷追踪.迭代规划与推进以及效能 ...
- Python调用飞书发送消息
一.创建飞书机器人 自定义飞书机器人操作步骤,具体详见飞书官方文档:<机器人 | 如何在群聊中使用机器人?>
- JustAuth 1.15.9 版发布,支持飞书、喜马拉雅、企业微信网页登录
新增 修复并正式启用 飞书 平台的第三方登录 AuthToken 类中新增 refreshTokenExpireIn 记录 refresh token 的有效期 PR 合并 Github #101:支 ...
- Jenkins+Allure测试报告+飞书机器人发送通知
一.前言 之前讲了jenkins如何设置定时任务执行脚本,结合实际情况,本篇讲述在jenkins构建成功后,如何生成测试报告,以及推送飞书(因为我公司用的是飞书,所以是发送到飞书机器人). 本次实践搞 ...
- 飞书前端提到的竞态问题,在 Android 上怎么解决?
请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...
- 线上故障排查——drools规则引擎使用不当导致oom
事件回溯 1.7月26日上午11:34,告警邮件提示:tomcat内存使用率连续多次超过90%: 2.开发人员介入排查问题,11:40定位到存在oom问题,申请运维拉取线上tomcat 内存快照dum ...
- “3D引擎和图形学技术点思路讲解”线上直播培训班报名开始啦(完全免费)
大家好,我开了一个线上的直播课程培训班,完全免费,欢迎大家报名! 本课程重点教授"光线追踪"方面的实现思路. 我的相关经验 5年3D引擎开发经验 Wonder-WebGL 3D引擎 ...
- 修改mysql数据引擎的方法- 提高数据库性能
前言:同学告我说,他为了能使得数据查询变得快一点,修改的数据引擎,故查询一下,总结一下. 登录mysql后,查看当前数据库支持的引擎和默认的数据库引擎,使用下面命令: mysql>show en ...
随机推荐
- 【LeetCode】53. Maximum Subarray 最大子序和 解题报告(Python & C++ & Java)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力解法 动态规划 日期 题目地址: https:/ ...
- 基于MCRA-OMLSA的语音降噪(二):实现
上篇文章(基于MCRA-OMLSA的语音降噪(一):原理)讲了基于MCRA-OMLSA降噪的原理,本篇讲怎么做软件实现.软件实现有多种方式.单纯看降噪效果可用python,因为python有丰富的库可 ...
- React MobX 开始
MobX 用于状态管理,简单高效.本文将于 React 上介绍如何开始,包括了: 了解 MobX 概念 从零准备 React 应用 MobX React.FC 写法 MobX React.Compon ...
- 解决opencv:AttributeError: 'NoneType' object has no attribute 'copy'
情况一: 路径中有中文,更改即可 情况二:可以运行代码,在运行结束时显示 AttributeError: 'NoneType' object has no attribute 'copy' 因为如果是 ...
- CapstoneCS5212|DP to VGA|CS5212设计电路方案
CS5212功能概述 CS5212是一款DisplayPort端口到VGA转换器,它结合了DisplayPort输入接口和模拟RGB DAC输出接口.嵌入式单片机基于工业标准8051核心. CS521 ...
- <数据结构>关键路径
目录 AOV网和AOE网 AOV网 AOE网 定义 与AOV网的转化 AOE网中着重解决的两个问题 1.最长路径问题 2.关键活动问题 总结 最长路径 无正环的图 有向无环图的最短路径 其他情况 关键 ...
- 编写Java程序_定义两个方法,实现奇数偶数的判断,并计算和(有参数有返回值方法)
需求说明: 定义两个方法,在控制台输入一个数字,这两个方法可以求出1到该数字之间所有偶数之和.奇数之和,并将对应结果和返回.在main方法中调用该方法,并在控制台打印出结果.(有参数有返回值方法) 运 ...
- linux 查看历史命令 history命令
1.history命令 "history"命令就是历史记录.它显示了在终端中所执行过的所有命令的历史. history //显示终端执行过的命令 history 10 //显示最近 ...
- spring boot 热部署 实现 前端部分热更新 详细操作
1.前言 在以前的随笔[https://www.cnblogs.com/c2g5201314/p/12275243.html] 里面已经讲解过了 idea 如何在 springMVC 项目 实现 前端 ...
- linux 【阿里云服务器】 配置 redis 的正确流程
1.前言 我的域名备案前几天通过了,这篇随笔完整的记录 redis 的安装流程 与各种 问题 的 具体解决方案. 2.操作[跟着步骤来] (1)指令cd /usr/local 进入local文件夹里面 ...