通过使用火山引擎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的性能优化实践之路。

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

火山引擎MARS-APM Plus x 飞书 |降低线上OOM,提高App性能稳定性的更多相关文章

  1. 阿里重磅开源首款自研科学计算引擎Mars,揭秘超大规模科学计算

    日前,阿里巴巴正式对外发布了分布式科学计算引擎 Mars 的开源代码地址,开发者们可以在pypi上自主下载安装,或在Github上获取源代码并参与开发. 此前,早在2018年9月的杭州云栖大会上,阿里 ...

  2. Worktile正式入驻飞书,助力企业轻松实现敏捷开发与协作

    企业在敏捷研发中时常面临着交付延期.需求不匹配等问题,如何更高效地完成敏捷研发? Worktile携手飞书,为企业用户提供敏捷开发服务,帮助企业实现软件项目的需求管理.缺陷追踪.迭代规划与推进以及效能 ...

  3. Python调用飞书发送消息

    一.创建飞书机器人 自定义飞书机器人操作步骤,具体详见飞书官方文档:<机器人 | 如何在群聊中使用机器人?>

  4. JustAuth 1.15.9 版发布,支持飞书、喜马拉雅、企业微信网页登录

    新增 修复并正式启用 飞书 平台的第三方登录 AuthToken 类中新增 refreshTokenExpireIn 记录 refresh token 的有效期 PR 合并 Github #101:支 ...

  5. Jenkins+Allure测试报告+飞书机器人发送通知

    一.前言 之前讲了jenkins如何设置定时任务执行脚本,结合实际情况,本篇讲述在jenkins构建成功后,如何生成测试报告,以及推送飞书(因为我公司用的是飞书,所以是发送到飞书机器人). 本次实践搞 ...

  6. 飞书前端提到的竞态问题,在 Android 上怎么解决?

    请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...

  7. 线上故障排查——drools规则引擎使用不当导致oom

    事件回溯 1.7月26日上午11:34,告警邮件提示:tomcat内存使用率连续多次超过90%: 2.开发人员介入排查问题,11:40定位到存在oom问题,申请运维拉取线上tomcat 内存快照dum ...

  8. “3D引擎和图形学技术点思路讲解”线上直播培训班报名开始啦(完全免费)

    大家好,我开了一个线上的直播课程培训班,完全免费,欢迎大家报名! 本课程重点教授"光线追踪"方面的实现思路. 我的相关经验 5年3D引擎开发经验 Wonder-WebGL 3D引擎 ...

  9. 修改mysql数据引擎的方法- 提高数据库性能

    前言:同学告我说,他为了能使得数据查询变得快一点,修改的数据引擎,故查询一下,总结一下. 登录mysql后,查看当前数据库支持的引擎和默认的数据库引擎,使用下面命令: mysql>show en ...

随机推荐

  1. The All-purpose Zero(hdu5773)

    The All-purpose Zero Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  2. 从零搭建react hooks项目(github有源代码)

    前言 首先这是一个react17的项目,包含项目中常用的路由.状态管理.less及全局变量配置.UI等等一系列的功能,开箱即用,是为了以后启动项目方便,特地做的基础框架,在这里分享出来. 这里写一下背 ...

  3. mod4最优路径问题(转载)

    原文链接:https://blog.csdn.net/ACdreamers/article/details/18501855 mod4最优路径问题 如下图: 从1到4找出一条路径,要求路径的总长度mo ...

  4. 【Java例题】5.4 排序集合的使用

    4.排序集合的使用.使用TreeSet模拟一个一维整数数组.其中,一维整数数组元素由Random类随机产生.最后显示排序后的结果. package chapter6; import java.util ...

  5. DFT, DHT, DCT, DST

    目录 基本 酉变换 others Fourier-related Transforms DFT DHT DCT 与DFT的联系 DST 与DFT的联系 Gonzalez R. C. and Woods ...

  6. Java Web程序设计笔记 • 【第1章 Web应用程序】

    全部章节   >>>> 本章目录 1.1 Web 应用程序 1.1.1 Web 应用程序概述 1.1.2 Web 应用程序的工作原理 1.1.3 实践练习 1.2 HTTP协议 ...

  7. python requests发起请求,报“Max retries exceeded with url”

    需要高频率重复调用一个接口,偶尔会出现"Max retries exceeded with url" 在使用requests多次访问同一个ip时,尤其是在高频率访问下,http连接 ...

  8. kubeadm 安装Kubernetes 1.16.3 (CentOS7+IPVS+Calico)

    目录 ·  . 一.更新系统内核(全部节点) ·  . 二.基础环境设置(全部节点) ·  . 1.修改 Host ·  . 2.修改 Hostname ·  . 3.主机时间同步 ·  . 4.关闭 ...

  9. C语言 运算符优先级和结合方向

    运算符优先级和结合方向 初级运算符( ).[ ].->..  高于  单目运算符  高于  算数运算符(先乘除后加减)  高于  关系运算符  高于  逻辑运算符(不包括!)  高于  条件运算 ...

  10. 编写Hive的UDF(查询平台数据同时向mysql添加数据)

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6812629187518530052/ 可能会有一些截图中会有错误提示,是因为本地的包一直包下载有问题,截完图已经下 ...