Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >婚芭莎App的APM性能监控实践

婚芭莎App的APM性能监控实践

原创
作者头像
GarrettGao
修改于 2022-01-12 12:20:03
修改于 2022-01-12 12:20:03
4.1K8
举报

需求场景

婚芭莎(中国婚博会)App主要为结婚新人提供一站式备婚方案,包括一二线城市各大主流结婚品牌;专为中国结婚新人提供线上备婚指导教育,线下体验订购服务平台。

现在App的开发技术栈相对成熟,而提升App的用户体验,就成了个App和竞品之间的一个竞争点。

之前我们的App在性能方面基本只有Crash(崩溃)相关的统计,在其他性能方面并没有很好的监控工具和指标数据,对于App的卡慢、接口异常、慢请求、内存泄漏等性能问题线上环境并没有很好的监控措施。

即使我们的每个功能改动都会经过QA团队的测试,但在QA测试环节可能更关注是业务功能完整,还是很难发现App存在的隐形性能问题。

为了支持我们以后更大的用户量和App的稳定性,所以必须对App的性能和稳定性进行监控,主动发现性能问题,而不是等运营或产品反馈过来,就会很被动了。所以我们考虑介入APM系统,进行性能监控,从技术层面主动发现问题,来对应用的性能进行线上的监控和预警。

调研

我们调研的APM平台

产品

厂商

QAPM

腾讯

听云App

听云

阿里云EMAS

阿里云

mPaaS

蚂蚁金服

U-APM

友盟

火山引擎

字节

Firebase

Google

...

...

目前市场上移动端APM监控平台还是比较多,可能选择适合自己的尤为重要。

因为我们在除了基本的Crash、网络性能、WebView性能基本的性能统计外,希望全面监控App的内存、电量、滑动卡帧、这几项有较高的优化期望,QAPM监控功能覆盖这几部分功能。

经过我们内部调研评审,最终考虑使用QAPM。

目前QAPM还未正式商业化,处于内测阶段,接入后可根据需求免费体验1-3个月,使用的话需要从官网申请内测资格。

且有 QQ系列多个App产品也在使用此套APM系统,有较大的线上使用案例和技术支持团队,且使用的话会创建专项的微信技术支持群,感觉技术支持还是非常好的。

(截图来自QAPM)

使用案例
使用案例

目标

  1. 将App性能数据,以科学的量化指标展现出来。
  2. 主动发现性能问题,实时预警通达,将问题发现时机前置。
  3. App稳定性提升,用户体验改善优化。

主要功能

启动耗时

启动耗时是一个性能上重要的指标,QAPM对于启动统计氛围三个阶段:

启动耗时过程统计
  1. 创建进程阶段,也就是main函数之前的时间。
  2. QAPM初始化的时间
  3. main函数之后,到首个启动页面的时间。
启动过程
启动过程
启动类型

自动类型统计主要分为三种:

  1. 冷启动
  2. 热启动
  3. 首次启动
指标

启动维度可以通过 版本、系统、设备、地区、运营商等分别查看指标数据。

启动
启动

网络监控

通过吞吐量、请求次数、网络响应时间、慢请求占比、HTTP错误率、网络错误率等指标进行网络问题分析。错误列表去要区分为网络问题和慢请求。

网络错误

网路错误主要为HTTP协议异常请求或DNS解析等问题,实时监控线上接口的报错情况。

慢请求

慢请求主要统计网络请求过程超过设置慢请求的阈值,即统计为慢请求,主要用于接口性能优化。

指标

可以通过 版本、网路类型、地域、运营商、主机IP、域名、URL等维度进行筛选查看不同维度的指标。

网络监控
网络监控

崩溃

崩溃统计QAPM区分为两种类型:普通崩溃和Sigkill崩溃。

内存监控

可分析得出的内存泄漏对象的调用堆栈内存问题,内存问题主要分为三类查看

  1. 内存泄漏
  2. VC泄漏,如iOS平台的MLeaksFinder基本类似
  3. 大块内存分配
内存
内存

卡慢监控

卡顿监控

关于卡慢监控,QAPM相对来说可能更全面一点;目前大多数对于卡顿的检测为主线程堵塞时间超过阈值时间多少秒为卡顿事件,QAPM这里支持列表或ScrollView的滑动卡桢监控。

  1. 卡顿监控 除滑动外其它场景卡断监控,如iOS平台以CADisplayLink的刷新间隔(16.6ms)不断抓取主线程堆栈。
  2. 滑动卡帧监控 监控列表滑动时候的卡帧情况;非全局监控设置,需要在监控的列表开始滑动和滑动结束时分别埋点,可以自定义别名命名滑动场景。
方法聚类

方法聚类统计所有方法包括子方法的调用耗时,在后台展示调用耗时较高的方法调用,工程师直接参考耗时代码的定位。

指标

卡顿后台可以通过 应用版本、系统版本、场景(用户定义)、设备等维度查看卡慢数据。也可以看到个时间段App的掉帧率所占百分比,同时可以将此百分比定义为App流畅性的优化指标。

卡顿
卡顿
卡顿问题
卡顿问题

资源监控

资源使用情况监控将每一秒采集CPU、内存、IO、网络等数据,每一分钟上报一下数据。

WebView和JS

通过H5页面加载耗时、慢加载占比以及JS错误率等进行WebView指标分析。

WebView
WebView

告警

QAPM支持选择对应的性能域发送实时告警报告,分为VIP告警和应用告警,具体如下:

VIP告警:每1分钟对指定VIP用户的指定性能问题进行查询,并聚合为一个告警进行触达,0覆盖崩溃、ANR、http错误、JSError、慢启动、慢加载。

应用告警:即新增feature告警,每1分钟对feature池进行查询,根据有无新增进行告警;0覆盖崩溃、ANR、http错误、JSError(针对小程序仅后两者)。

报告方式为两种:

  1. 邮箱
  2. 企业微信

当然关于通知方面,如果之后可以支持webhook可能就更完美了,可以自定义自己的通知方式!

告警
告警

使用

开启对应功能

QAPM默认开启所有性能数据收集,也可以根据实际需求场景自定义开关项。

拿iOS举例,通过[QAPMConfig getInstance].enableMonitorTypeOptions设置指定功能,功能列表如下列枚举:

代码语言:objective-c
AI代码解释
复制
/**
 开启功能类型
 */
typedef NS_OPTIONS(NSUInteger, QAPMMonitorType) {
    
    QAPMMonitorTypeNone                     = 1 << 0,

    /// Blue(检测卡顿功能)
    QAPMMonitorTypeBlue                     = 1 << 3,
    
    /// 大块内存分配监控功能
    QAPMMonitorTypeBigChunkMemoryMonitor    = 1 << 4,

    /**
     QQLeak(检测内存对象泄露功能)
     开启后,会记录对象分配的堆栈,不支持模拟器。
     执行检测一次检测请调用: [QAPMQQLeakProfile executeLeakCheck];
     执行一次泄露检测,建议在主线程调用,该操作会挂起所有子线程进行泄露检测(该操作较耗时,平均耗时在1s以上,请限制调用频率)。
     建议研发流程内使用。
     */
    QAPMMonitorTypeQQLeak                   = 1 << 5,
    
    /// Yellow(检测VC泄露功能)
    QAPMMonitorTypeYellow                   = 1 << 6,
    
    /// 内存最大使用值监控(触顶率)
    QAPMMonitorTypeMaxMemoryStatistic       = 1 << 7,
    
    
    /// 资源使用情况监控功能(每隔1s采集一次资源)
    QAPMMonitorTypeResourceMonitor          = 1 << 9,
    
    /// KSCrash监控功能
    QAPMMonitorTypeCrash                    = 1 << 10,
    
    /// foom监控功能
    QAPMMonitorTypeFoom                     = 1 << 11,
    
    /// Web Monitor (Web性能监控)
    QAPMMonitorTypeWebMonitor               = 1 << 12,

    /// 网路监控
    QAPMMonitorTypeHTTPMonitor              = 1 << 13,
    
    /// JSError
    QAPMMonitorTypeJSError                  = 1 << 14,
        
    /// 用户行为监控功能
    QAPMMonitorTypeIUPMonitor               = 1 << 15,
    
    //耗电监控功能
    QAPMMonitorTypePowerConsume             = 1 << 16,
    
    /// deadlock监控功能
    QAPMMonitorTypeDeadlock                 = 1 << 19,
    
    /// 启动耗时监控功能
    QAPMMonitorTypeLaunch                   = 1 << 22,
};

采样率

可以通过QAPMModelStableConfig类设置的

代码语言:objective-c
AI代码解释
复制
- (void)getModelStable:(NSInteger)factor
// 或
- (void)getModelAll:(NSInteger)factor

方法设置采样率,如设置1就是100%,如设置 100就是 1%。

所以建议区分开发环境和正式环境,开发环境为全量上报,线上环境为采样上报。

因为QAPM目前为免费阶段,上报量限额每天20万,所以可以根据自己App的日活量设置一个合理的采样率。

问题

使用过程可能遇到的一些问题

  1. 同时开启QAPM的Crash和Bugly的Crash可能会有影响,在Crash的情况下,App没有kill掉。但是Crash上报不影响,官网建议只开启其中一个。
  2. 后台部分功能使用体验使用欠佳,但是可以看到后台也经常在升级,QAPM团队应该也在优化后台。
  3. Swift项目在符号表翻译上非100%转译,但是也可以根据翻译后的符号找到对应代码,这部分也已提工单给QAPM,应该近期就会支持。

总结

我们从11月份开始接入QAPM,目前已经在线上环境运行3个版本。时间还是比较短,以上功能描述也是目前我们目前了解或使用到的,可能有更多强大的功能待发现。

但在这接入的两个月左右,确实通过QAPM发现了一些性能问题;如发现线上环境一些慢接口,同时针对耗时较高的接口做出专项优化,解决了部分页面接口响应速度问题;还有部分功能模块卡顿、内存泄漏等问题,帮助开发者主动发现并定位到具体的代码行上。

之后我们会重视起来APM稳定性相关数据,执行相应的值班制度;同样APM监控是可以用数据说明App稳定性的很好的指标,后期可能也是对于团队考核的一个重要因素点。

所以,App的性能日益被团队重视,选择一个合适的APM监控系统尤为重要!

推荐学习框架:

  1. MLeaksFinder
  2. KSCrash
  3. matrix
  4. AndroidGodEye
  5. AndroidPerformanceMonitor

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
8 条评论
热度
最新
666
666
回复回复点赞举报
赞👍
赞👍
66点赞举报
666
666
回复回复点赞举报
写的不错
写的不错
回复回复点赞举报
查看全部6条回复
推荐阅读
编辑精选文章
换一批
干货 | 沪江高级安卓工程师徐宜生:移动端APM性能监控
徐宜生,现任沪江高级Android开发工程师,著有《Android群英传》《Android群英传:神兵利器》两书,CSDN博客专家,慕课网Android讲师,活跃于Android社区,喜欢整洁的代码和简洁的架构,乐于拓展新的技术和知识,热衷于分享自己的经验和感悟。 我今天讲的题目是移动端APM性能监控。我们把APM系统定位为对应用的性能、可靠性进行线上的监控和预警的机制,通过APM系统来完善和统一整个流程,让我们去发现分析并解决新的问题,这是整个APM存在的意义。 APM系统的作用有哪些 一、监控线
IT大咖说
2018/04/03
1.3K0
干货 | 沪江高级安卓工程师徐宜生:移动端APM性能监控
干货 | 携程无线APM升级实践
辛贵,携程无线研发总监。主要负责App基础框架研发相关工作,关注App开发框架、性能、质量、效率和新技术。
携程技术
2020/02/19
1.9K0
干货 | 携程无线APM升级实践
移动端性能监控方案Hertz
性能问题是造成App用户流失的罪魁祸首之一。App的性能问题包括崩溃、网络请求错误或超时、响应速度慢、列表滚动卡顿、流量大、耗电等等。而导致App性能低下的原因有很多,除去设备硬件和软件的外部因素,其中大部分是开发者错误地使用线程、锁、系统函数、编程范式、数据结构等导致的。即便是最有经验的程序员,也很难在开发时就能避免所有导致性能低下的“坑”,因此解决性能问题的关键是在于能不能尽早地发现和定位这些“坑”。 美团外卖在实践中通过总结常见性能问题,并在学习了业内微信、360等性能监控技术原理后,开发了一套移动端
美团技术团队
2018/03/12
2.9K0
移动端性能监控方案Hertz
H5 前端性能测试实践
H5 页面发版灵活,轻量,又具有跨平台的特性,在业务上有很多应用场景。但是同时对比 App,H5 的性能表现总是要逊色一筹,比如页面打开往往会出现白屏,滑动列表等交互场景下也不如 Native 页面流畅。针对这些白屏、卡慢之类的问题,我们测试该从哪些方面去展开测试分析和数据对比呢?接下来笔者分享一些 H5 前端测试实践的经验,抛砖引玉,希望大家一起谈论,一起挖掘更多有价值的课题。
有赞coder
2020/08/25
1.4K0
H5 前端性能测试实践
Android 性能采集之Fps,Memory,Cpu | 性能监控系列
各位大佬好久不见了,憋了一阵子发育了一下(主要是我在拼神龙斗士),基本上完成了简单的性能采集的Demo,分享一下相关的经验给各位吧。
逮虾户
2022/09/16
2.1K0
Android 性能采集之Fps,Memory,Cpu | 性能监控系列
有赞移动性能监控平台(一)
随着移动端业务复杂度的提升,开发同学在编写业务的时候往往容易忽略性能问题,虽然有赞移动端自研了 APM ,但是 APM 采集的都是线上的数据,无法在 QA 与开发阶段提前发现问题,为了保障软件的稳定性,需要补齐线下监控能力,避免性能问题上线对商家经营过程造成影响。
有赞coder
2021/03/04
1.6K0
有赞移动性能监控平台(一)
QAPM — 一款强大且细腻的APP性能专项解决方案
QAPM是我们腾讯云专项测试技术中心其中一个较为成熟的产品,是针对移动App的一个一站式性能解决方案。
硬骨见小鹿
2019/01/21
14.6K0
QAPM — 一款强大且细腻的APP性能专项解决方案
实战移动性能优化,性能小船不会翻
serena
2017/06/30
9300
实战移动性能优化,性能小船不会翻
QQ 客户端性能稳定性防劣化系统 Hodor 技术方案
盘点了下手 Q 研发流程的困局,现有的手段更着重于线上监控问题并在下个版本修复(甚至是下下个版本),如果能在开发阶段发布前甚至合入 master 之前就把问题扼杀在摇篮之中,就可以达到防劣化的目标。
腾讯云开发者
2024/06/13
1K0
QQ 客户端性能稳定性防劣化系统 Hodor 技术方案
Android轻量级APM性能监测方案
[GITHUB链接 Collie ](https://github.com/happylishang/Collie)
看书的小蜗牛
2020/09/16
3.9K0
大型IM稳定性监测实践:手Q客户端性能防劣化系统的建设之路
防劣化是比较经典的技术话题,手 Q 的防劣化系统从 2021 年 10 月开始投入研发,从 0 到 1 迭代了将近三年的时间,已经达到了业界先进水平。为了守护好手 Q 性能稳定性的门禁,我们将其命名为 Hodor 系统,即 Hold the door!
JackJiang
2024/08/02
1910
大型IM稳定性监测实践:手Q客户端性能防劣化系统的建设之路
【开源公告】微信自研APM利器Matrix正式开源
Matrix 是一款微信研发并日常使用的 APM (Application Performance Manage) ,当前主要运行在 Android 平台上。Matrix 的目标是建立统一的应用性能接入框架,通过对各种性能监控方案快速集成,对性能监控项的异常数据进行采集和分析,输出相应问题的分析、定位与优化建议,从而帮助开发者开发出更高质量的应用。 在经历微信内 1 年多的验证与迭代,现在 Matrix 终于开源了。 Matrix 有哪些功能? Matrix 当前监控范围包括:应用安装包大小,SQLit
腾讯开源
2023/04/12
1.3K0
【开源公告】微信自研APM利器Matrix正式开源
APM性能分享观看有感
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
小柔
2022/10/09
3250
使用Elastic APM做应用性能监控
本文主要包含五个部分。第一部分对应用性能监控(APM)相关的概念进行了介绍,包括可观察性和应用性能监控;第二部分将Elastic APM和业界流行的APM产品Apache SkyWalking进行了对比;第三部分对Elastic公司推出的APM产品相关的组件和数据模型进行了介绍;第四部分介绍Elastic APM的使用实践,最后在第五部分进行了总结。
franyang
2019/11/25
13.8K2
使用Elastic APM做应用性能监控
有赞移动性能监控平台(二)
有赞零售的业务复杂度非常高,且由于业务场景的特殊性,有大量的复杂业务逻辑处理都是在移动端上做的,本地存在大量的DB操作、数据同步、复杂计算......,此外收银设备的配置和性能相比于手机有很大的差距,这些都对我们提出了很大的挑战。卡顿问题也是我们面临的主要难题之一,为了解决这个问题,我们首先要解决方法运行效率的问题,找出应用中执行效率不满足要求的方法,通过优化这些处理逻辑,提高方法运行效率,进而提升整体的性能。
有赞coder
2021/04/12
7950
告别重复告警打扰--基于堆栈相似度的全新QAPM告警方案
导语 为了能够及时的发现问题并及时解决,QAPM提供了一套卡顿告警机制。正如同常规的阈值触发的告警机制一样,QAPM早期的告警也会使测试开发人员陷入告警风暴的影响,影响工作效率。在这种背景下,对告警进行聚类和去重的需求逐渐显现出来。Rebucket作为一个成熟的堆栈相似度计算的算法,曾被微软用于解决bug上报的聚类问题。相比于普通的前缀匹配的检测算法,ReBucket能够提供12%的准确率提升。我们期望利用Rebucket算法,找到那些重复出现的告警,从而提升用户体验,突出告警重点。本文将重点介绍rebucket算法原理以及如何利用该算法对我们的告警系统进行优化与改进,最后将讨论堆栈相似度算法在QAPM中潜在的其他应用场景。
硬骨见小鹿
2019/02/14
11.1K0
告别重复告警打扰--基于堆栈相似度的全新QAPM告警方案
日活超过3亿的快手是怎么进行性能优化的?
在移动互联网时代,由于设备资源受限、网络不稳定等因素,Web 端和移动端的性能优化显得尤为重要,如果性能不好,用户就容易流失,ToC 的产品尤为明显,体验差的产品必然会被市场淘汰。如何做好性能优化是每个企业都会关注的。
程序员小猿
2021/01/19
8630
日活超过3亿的快手是怎么进行性能优化的?
微信客户端性能监控和优化简述
今天主题,产品数量级上去了之后很多人都会去关心性能问题。这里是Info对微信性能优化上的一些探寻,值得参考。
Anymarvel
2018/10/22
2.3K0
微信客户端性能监控和优化简述
服务24亿级用户App的大前端实践
茄子科技(海外 SHAREitGroup)是国内出海的先行者,2015 年成立后就“走出去”。2017 年,主要产品 SHAREit(国内茄子快传)全球用户总量超 12 亿,成为新兴市场的“国民应用”。截止目前,茄子科技产品矩阵全球累计安装用户量近 24亿,覆盖 200 多个国家和地区,涵盖全球 45 种语言。
深度学习与Python
2021/06/08
4350
服务24亿级用户App的大前端实践
自己动手打造前端性能监控系统
我们从三个各方面,前端上报,数据收集和入库,数据展示来介绍了如何打造一个测速系统。
QQ音乐前端团队
2018/08/28
3.7K8
自己动手打造前端性能监控系统
相关推荐
干货 | 沪江高级安卓工程师徐宜生:移动端APM性能监控
更多 >
LV.0
中国婚博会App
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档