前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >有赞移动性能监控平台(二)

有赞移动性能监控平台(二)

作者头像
有赞coder
发布于 2021-04-12 03:10:33
发布于 2021-04-12 03:10:33
7560
举报

作者:陈明义

部门:同城零售

一、前言

性能和稳定性一直是App质量体系中最基本和最关键的一环。 而移动端业务快速迭代的过程中,开发同学对性能的关注不足,量变引起质变,App的卡顿严重影响商家的日常经营,商家对性能的吐槽和抱怨越来越严重。而面对商家反馈的性能问题,由于缺乏现场信息,问题的排查既被动又困难。我们急需一个系统化的解决方案,需要有自己的APM(Application Performance Management),可以通过它来发现问题,并且能依靠它的数据来指导我们进行性能优化。

二、整体设计

系统主要分为两个部分:

  • 移动端上的「性能检测」,主要负责数据的采集。
  • 后端的「数据处理」,主要包含数据的清洗、解析、存储、报警等。

2.1 性能检测

2.1.1 慢方法&ANR检测

有赞零售的业务复杂度非常高,且由于业务场景的特殊性,有大量的复杂业务逻辑处理都是在移动端上做的,本地存在大量的DB操作、数据同步、复杂计算......,此外收银设备的配置和性能相比于手机有很大的差距,这些都对我们提出了很大的挑战。卡顿问题也是我们面临的主要难题之一,为了解决这个问题,我们首先要解决方法运行效率的问题,找出应用中执行效率不满足要求的方法,通过优化这些处理逻辑,提高方法运行效率,进而提升整体的性能。

总体流程分为四步:

Step1:编译期自动采集需要性能检测的方法。过滤不需要进行检测的方法或类,为每个方法分配一个独立ID(包括二方库及三方库的方法),并生成方法ID与方法签名的映射文件。

Step2:编译期对方法进行插桩。通过插桩的方式对所有需要检测的方法进行插桩,在每个函数的函数体前后会自动插入i和o方法,入参为方法ID,这样就可以很方便的对执行时间进行检测。

Step3:运行期进行性能检测。比如慢方法和ANR的检测是通过记录i和o方法的时间并进行存储,会记录每个方法进入和离开的时间,当执行时间超出我们设定的阈值时,会将方法的信息进行上报,方便后面对数据进行处理。

Step4:收集卡顿现场信息。监听每一帧的变化,卡顿发生时,会有单独的线程去收集堆栈信息以及现场环境信息(包含:设备信息、CPU使用情况、内存、磁盘信息等)。

2.1.2 线程池检测

Android开发中我们通常会将一些耗时任务放到子线程中进行操作,否则可能会阻塞UI线程,引起ANR、卡顿等问题。而我们的App中就存在大量的异步任务,包括网络请求、本地大量的DB操作、定时轮询等任务,而所有的这些异步任务都在同一个线程池中运行(IO线程池),这样就带来了一个问题:当网络请求比较慢的时候,线程池会快速堆积任务,再加上不断轮询的任务,线程池极易被打满,本地快速的一些异常任务就容易被阻塞住,造成耗时短的任务等待耗时长的任务。

为了解决这个问题,我们需要对线程池进行更细粒度的划分,考虑到我们应用的特性,我们对主线程池的定位改为:为大量、快速的本地任务提供支持,这样我们就需要将一些「耗时长」、「频率高」的任务进行治理,将这些任务分离出我们的主线程池,我们需要监控线程池中的任务,能通过监控的数据挖掘异步任务的优化点,同时为线程池的配置调整提供可度量的指标。

检测的核心在于监听线程池的三个节点:

  • 任务提交到线程池。拉取每个任务的调用栈信息,解析并记录任务的发起点以及任务的提交时间。同时可以分析此时线程池的负载状况(结合activeCount、corePoolSize、queueSize),如果负载达到阈值,则拉取出当前所有的任务,分析是否存在明显有问题的任务(比如同一任务发起多次等)。
  • 任务开始执行。记录任务开始执行的时间。
  • 任务执行完成。与任务开始时间做差值,计算并记录任务的执行时间,如果任务的执行时间超出阈值,则会进行上报。

总体流程如下:

通过上面的方式能逐步分离出「耗时长」、「频率高」的任务,通过对这些任务的优化,最终达到线程池优化的目标。另外由于有了完整的线程池负载情况跟踪以及任务执行时间数据,我们对线程池的健康度也有了可度量的指标,这也为我们做线程池的自动化配置提供了参考依据。

2.2 数据处理

2.2.1 整体流程

(1)方法映射文件记录。应用打包时会自动执行上面的编译期处理流程,生成方法映射文件,并上传到APM Server,然后进行方法映射数据的处理。

(2)性能数据同步。卡顿发生时,会上报相关数据。数据会通过DP(数据平台)进行清洗、计算和统计(比如前一天性能报告统计),然后通过Hive -> DB流程同步到后端应用的DB中。

(3)数据解析。后端应用会对数据中的卡顿堆栈进行解析(把ID解析成方法名)。

(4)数据聚合。解析完后需要对同一方法的数据进行聚合(包含跨版本、跨补丁的数据处理,比如A方法可能在1.0版本ID是11,在1.0补丁1版本的ID是22,在1.1版本的ID是33,需要把他们聚合成一条数据),这样就能准确的知道每个方法的严重程度,每条聚合数据也会记录对应的解决状态。

(5)数据分析&报警。会结合数据平台上计算和统计的结果以及数据聚合后产生的数据,产出日报、周报、告警等信息,为性能变化趋势提供数据化支撑。

通过上面的方式将同一个方法的问题进行聚合,可以跟踪所有问题的解决状态,并能通过数据分析进行性能变化趋势的监控以及问题的报警。

2.2.2 关键节点

(1)数据解析&聚合

由于上传的卡顿信息中只会包含方法的ID,我们需要在后端对这些数据进行解析,将它解析成具体的方法名,然而由于不同版本、不同补丁生成的方法映射文件是不一样的,同一个方法在不同的版本对应的方法ID是不一样的,而我们需要将同一个方法引发的问题进行聚合,这样才能有效的跟踪每个问题的解决状态。而是否是同一个方法的认定标准为:完整类名+方法名,这样就能帮助方法的唯一性。

整体解析&聚合流程如下:

(2)数据清理流程

整个监控平台数据虽然经过重重过滤,但是本身的数据量还是非常大的,任由数据无节制的增长会很容易到达我们处理的瓶颈,且这庞大数据中大部分是无需长时间存储的,我们需要有数据的清理机制,通过清理机制来保证我们数据不至于增长过快:

  • 未分配的问题且最近一个月问题不再出现,则这个问题大概率以后不会再发生了,针对这种问题我们会直接清除问题的所有信息,不会再跟踪这个问题。
  • 已分配但未标记解决的问题且最近一个月问题不再出现,这种问题一般是问题已经修复但是没有及时修改状态,我们会把问题的状态修改为自动失效。
  • 状态流转已结束的问题(包括已处理、已忽略、自动失效的问题),我们会保留最新的一条明细数据进行存档,剩余的明细数据会全部清除。
  • 方法映射表中会存储过往所有版本的所有方法信息,然而其中绝大多数方法其实是没问题的(比如简单的a+b),所以这里我们会对最近一个月解析时没有访问的方法进行清除(解析时没访问的方法意味着这个方法没发生卡顿问题)。
  • 同一个版本可能会上传多次方法映射表信息,而真正发布的只会有一个,因此我们会去发版平台获取某个版本正在发布的信息,然后把没有正常发布的方法映射表数据删除。

整体清理流程如下:

三、功能介绍

3.1 问题数据

3.1.1 TOP 问题列表

3.1.2 问题详情

3.2 问题报警

3.3 性能报表

3.3.1 ANR变化趋势

3.3.2 慢方法变化趋势

3.3.3 FPS变化趋势

3.3.4 线程池卡顿次数

四、未来规划

  • 完善性能监控体系,补足网络、I/O、线程池、磁盘等方面的监控,通过性能监控的数据指导性能优化。
  • 更多维度的数据筛选和过滤能力,能够更好的对指定设备或门店进行问题跟踪。
  • 更强的数据处理能力,能够更快速地处理更庞大的数据量。
  • 完善系统使用体验,如:报表呈现、问题分配机制、问题报警等。
  • 推广到公司其它的业务线,帮助解决端上性能监控问题。

五、结语

通过性能监控的实践以及后续的性能优化,帮助我们更好的解决了性能问题,总结下来它的核心价值在于:

  • 对App线上真实的性能情况有了数据化的指标,让我们对性能问题有了更清晰的感受。
  • 通过监控的数据指导我们进行性能优化,优化效果也能有数据化的支撑。
  • 通过监控的数据能让我们更快速的发现新引入的性能问题,防止性能不断劣化,为App的稳定运行提供保障。
  • 推动各业务团队进行性能优化,让大家能更加重视自己产品的性能问题。

性能监控与性能优化道阻且长,我们也会不断地在这方面进行更多的尝试和努力,为App的稳定运行提供更好的保障,做好性能和稳定性的守门员。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 有赞coder 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
有赞移动性能监控平台(一)
随着移动端业务复杂度的提升,开发同学在编写业务的时候往往容易忽略性能问题,虽然有赞移动端自研了 APM ,但是 APM 采集的都是线上的数据,无法在 QA 与开发阶段提前发现问题,为了保障软件的稳定性,需要补齐线下监控能力,避免性能问题上线对商家经营过程造成影响。
有赞coder
2021/03/04
1.6K0
有赞移动性能监控平台(一)
日活超过3亿的快手是怎么进行性能优化的?
在移动互联网时代,由于设备资源受限、网络不稳定等因素,Web 端和移动端的性能优化显得尤为重要,如果性能不好,用户就容易流失,ToC 的产品尤为明显,体验差的产品必然会被市场淘汰。如何做好性能优化是每个企业都会关注的。
程序员小猿
2021/01/19
8220
日活超过3亿的快手是怎么进行性能优化的?
Android性能优化(一)之启动加速35%
随着项目版本的迭代,App的性能问题会逐渐暴露出来,而好的用户体验与性能表现紧密相关,从本篇文章开始,我将开启一个Android应用性能优化的专题,从理论到实战,从入门到深挖,手把手将性能优化实践到项目中,欢迎持续关注!
用户2898788
2018/08/21
2K0
Android性能优化(一)之启动加速35%
APM性能分享观看有感
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
小柔
2022/10/09
3060
手写解析微信Matrix性能监控日志的工具
在精读了Matrix的源码之后,我发出了赞叹和吐槽两种声音。值得赞扬的是,「这个APM框架的设计思路确实鬼斧神工,有很多值得Android开发者学习的地方,深入了解它,能够扩宽我们的编程视野。」 令人吐槽的就是,「从文档的丰富性,代码的可读性,代码的注释量,开源的一条龙服务等方面讲,他们做的还不太好。」 作为国内的顶尖开发团队,这些方面与国外的顶尖开源开发团队还是有不小的差距。
音视频开发进阶
2021/06/09
2.5K1
手写解析微信Matrix性能监控日志的工具
微信自研 APM 利器,Matrix 正式开源了
Matrix 是一款微信研发并日常使用的 APM (Application Performance Manage) ,当前主要运行在 Android 平台上。Matrix 的目标是建立统一的应用性能接入框架,通过对各种性能监控方案快速集成,对性能监控项的异常数据进行采集和分析,输出相应问题的分析、定位与优化建议,从而帮助开发者开发出更高质量的应用。 在经历微信内 1 年多的验证与迭代,现在 Matrix 终于开源了: https://github.com/tencent/matrix  欢迎 Star
微信终端开发团队
2018/12/25
14.7K0
微信自研 APM 利器,Matrix 正式开源了
小程序的日志记录与性能监控
在小程序的开发过程中,日志记录与性能监控是不可忽视的环节。日志记录帮助开发者追踪错误和异常,确保问题能被及时发现并解决;而性能监控则能够帮助开发者了解小程序在不同环境下的运行情况,识别潜在的性能瓶颈,优化用户体验。通过有效的日志记录和性能监控,开发者能够更好地进行问题排查和性能调优。
LucianaiB
2025/02/10
1290
APP性能设计及优化专题——影响性能的不良实现
继介绍性能设计概述、性能优化建议后,本文将重点介绍影响性能的不良实现,主要包含Binder共享内存耗尽、Binder线程池耗尽、创建大量BpBinder或Binder对象等方面。
软件绿色联盟
2022/06/30
1.1K0
APP性能设计及优化专题——影响性能的不良实现
java虚拟机性能监控调优及原则
转载自 https://www.cnblogs.com/thingk/p/6840585.html
allsmallpig
2021/02/25
4310
关于Android性能优化的几点建议
由于Android应用的沙箱机制,每个应用所分配的内存大小是有限度的,内存太低就会触发LMK(Low Memory Killer)机制,进而会出现闪退现象。如果要对内存进行优化,就需要先搞懂java的内存是如何分配和回收的,关于这方面,可以重点参考下面的内容: Java 垃圾回收器的GC机制,看这一篇就够了 Android 内存泄漏常见案例及分析 Android应用内存泄漏的定位、分析与解决策略
Android技术干货分享
2019/07/03
8930
关于Android性能优化的几点建议
服务质量保障之性能监控
伴随着突发流量、系统变更或代码腐化等因素,性能退化随时会发生。如在周年庆大促期间由于访问量暴涨导致请求超时无法下单;应用发布变更后,页面频繁卡顿导致客诉上升;线上系统运行一段时间后,突然发生OOM或连接打满拒绝访问。
测试开发技术
2024/03/11
2260
服务质量保障之性能监控
【开源公告】微信自研APM利器Matrix正式开源
Matrix 是一款微信研发并日常使用的 APM (Application Performance Manage) ,当前主要运行在 Android 平台上。Matrix 的目标是建立统一的应用性能接入框架,通过对各种性能监控方案快速集成,对性能监控项的异常数据进行采集和分析,输出相应问题的分析、定位与优化建议,从而帮助开发者开发出更高质量的应用。 在经历微信内 1 年多的验证与迭代,现在 Matrix 终于开源了。 Matrix 有哪些功能? Matrix 当前监控范围包括:应用安装包大小,SQLit
腾讯开源
2023/04/12
1.2K0
【开源公告】微信自研APM利器Matrix正式开源
面试官: 说一下你做过哪些性能优化?
之前做热修复的时候研究过 Application 的启动原理。项目中也做过一些启动优化。
做个快乐的码农
2021/12/18
1.2K0
面试官: 说一下你做过哪些性能优化?
Android性能优化:一份详细的布局优化实战指南,太特么重要了
对于Android开发者来说,懂得基本的应用开发技能往往是不够,因为不管是工作还是面试,都需要开发者懂得大量的性能优化,这对提升应用的体验是非常重要的。对于Android开发来说,性能优化主要围绕如下方面展开:启动优化、渲染优化、内存优化、网络优化、卡顿检测与优化、耗电优化、安装包体积优化、安全问题等。 下面是我整理了网上很多大佬的经验分享对Android性能优化做了一个总结。
用户9227784
2021/12/20
9260
微信客户端性能监控和优化简述
今天主题,产品数量级上去了之后很多人都会去关心性能问题。这里是Info对微信性能优化上的一些探寻,值得参考。
Anymarvel
2018/10/22
2.3K0
微信客户端性能监控和优化简述
婚芭莎App的APM性能监控实践
婚芭莎(中国婚博会)App主要为结婚新人提供一站式备婚方案,包括一二线城市各大主流结婚品牌;专为中国结婚新人提供线上备婚指导教育,线下体验订购服务平台。
GarrettGao
2022/01/12
4K8
婚芭莎App的APM性能监控实践
移动端性能监控方案Hertz
性能问题是造成App用户流失的罪魁祸首之一。App的性能问题包括崩溃、网络请求错误或超时、响应速度慢、列表滚动卡顿、流量大、耗电等等。而导致App性能低下的原因有很多,除去设备硬件和软件的外部因素,其中大部分是开发者错误地使用线程、锁、系统函数、编程范式、数据结构等导致的。即便是最有经验的程序员,也很难在开发时就能避免所有导致性能低下的“坑”,因此解决性能问题的关键是在于能不能尽早地发现和定位这些“坑”。 美团外卖在实践中通过总结常见性能问题,并在学习了业内微信、360等性能监控技术原理后,开发了一套移动端
美团技术团队
2018/03/12
2.9K0
移动端性能监控方案Hertz
Android 性能优化(二)
在大部分Android平台的设备上,Android系统是16ms刷新一次,也就是一秒钟60帧。要达到这种刷新速度就要求在ui线程中处理的任务时间必须要小于16ms,如果ui线程中处理时间长,就会导致跳过帧的渲染,也就是导致界面看起来不流畅,卡顿。如果用户点击事件5s中没反应就会导致ANR。
xiangzhihong
2021/01/22
2.5K0
Web页面性能优化——前端监控监控
本文分为接入前端性能监控、使用前端性能监控、性能优化三部分,可以通过目录跳转到对应的部分浏览。
Im小泽
2023/09/12
1K0
Android性能优化(六)之卡顿那些事
对普通用户而言,类如内存占用高、耗流量、耗电量等性能问题可能不会轻易发现,但是卡顿问题用户一定会立马直观的感受到。本文就带你一览卡顿的发生、检测、及优化。
用户2898788
2018/08/21
1.2K0
Android性能优化(六)之卡顿那些事
相关推荐
有赞移动性能监控平台(一)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文