首页 > 其他分享 >【Android】ANR监控治理技术方案

【Android】ANR监控治理技术方案

时间:2024-11-08 20:44:08浏览次数:3  
标签:ANR Canary bugly 监控 Android 数据 OPPO

一、 背景

  • 1、 bugly针对crash监控做的比较好,但是对anr监控,早期版本监听 /data/anr 目录的变化可以拿到数据,但是现在高版本已经没有权限监听此目录,当前数据非常少,结合历次数据来看对我们解决ANR问题没有任何帮助。
  • 2、 当前ANR数据主要来自手机厂商系统监控得到的的Anr Top数据excel,因为他们是在系统层面做了监控,数据准确性相对第三方比较高,但是依赖于手机厂商测试人员提供给我们数据,不是万全之策,因为随时有断供的风险。

二、 目标

要求ANR率在万5之下,我们目前已经到了万10,明确超标了。

三、技术选型

3.1 OPPO系统ANR监控

由于OPPO系统监控ANR数据有比较高的准确性,目前可以想到的技术方案是由OPPO监控平台APM开放ANR数据查询接口数据给阅文,由阅文后台去查询获取。做一个ANR实时数据呈现,通过这个ANR数据帮助我们去监控和解决ANR问题。

目前已知这个方案行不通。OPPO侧有数据安全要求,禁止外部实时查询此数据。

只能是一个版本查一次,或者一周查一次。可以建立一个机制,要求OPPO一周提供一次TOP100的ANR数据excel,协助我们解决ANR问题。

3.2 谷歌官方严苛模式StrictMode预防ANR

严苛模式StrictMode将报告与线程及虚拟机相关的策略违例。一旦检测到策略违例policy violation,你将获得警告,其包含了一个栈trace显示你的应用在何处发生违例。你可以强制用警告代替崩溃crash,也可以仅将警告计入日志让你的应用继续执行。StrictMode是一个十分有用的类,它可以很方便地应用于检查Android应用程序的性能和存在的问题。当开启这个模式后,开发者能很好地检查应用中存在的潜在问题。
现状:当前版本没有开启,此特性可利用起来,在debug版本开启。

3.2 第三方开源ANR监控方案
框架xCrashmatrixBlockCanaryacraANR-WatchDog
社区热度 2.9K9.9K6.3K5.9K2.4k
出品方爱奇艺微信个人开发者国外开发者国外开发者
维护情况仍在维护仍在维护已无人维护仍在维护已无人维护
技术原理linux信号捕获linux信号捕获+慢函数监控handler监控ANR消息打印看门狗监控看门狗监控
优点成熟不易裁剪成熟可裁剪可作为补充手段国外成熟兼容性好
缺点引入体积过大引入So监控原理过时无中文,难定制捕获ANR会有很多疏漏

综合分析,matrix的功能成熟可裁剪的特性,并且在微信大规模应用过,而且仍然在维护,决定引入matrix。

3.3 Matrix监控功能,选择性引入Trace Canary

Matrix-android 当前监控范围包括:应用安装包大小,帧率变化,启动耗时,卡顿,慢方法,SQLite 操作优化,文件读写,内存泄漏等等。

  • ● APK Checker: 针对 APK 安装包的分析检测工具,根据一系列设定好的规则,检测 APK 是否存在特定的问题,并输出较为详细的检测结果报告,用于分析排查问题以及版本追踪
  • ● Resource Canary: 基于 WeakReference 的特性和 https://github.com/square/haha 库开发的 Activity 泄漏和 Bitmap 重复创建检测工具
  • ● Trace Canary: 监控ANR、界面流畅性、启动耗时、页面切换耗时、慢函数及卡顿等问题
  • ● SQLite Lint: 按官方最佳实践自动化检测 SQLite 语句的使用质量
  • ● IO Canary: 检测文件 IO 问题,包括:文件 IO 监控和 Closeable Leak 监控
  • ● Battery Canary: 监控 App 活跃线程(待机状态 & 前台 Loop 监控)、ASM 调用 (WakeLock/Alarm/Gps/Wifi/Bluetooth 等传感器)、 后台流量 (Wifi/移动网络)等 Battery Historian 统计 App 耗电的数据
  • ● MemGuard 检测堆内存访问越界、使用释放后的内存、重复释放等问题

三、 落地方案

在这里插入图片描述

1、在我们服务端开发人力有限的情况下,采用matrix 采集 +严苛模式strickMode监控采集警告+ bugly上报数据+ bugly呈现数据的总体架构。

2、把anr数据,慢函数,打包成异常通过 CrashReport.postCatchedException()上报到bugly的错误, 在数据后台查看错误。

3、由于监控成本会影响到APP运行性能,所以无法在线上进行监控,控制在debug模式下测试阶段下进行,防止影响线上。

其它问题

线上监控加imei监控
安全合规问题
bugly冲突问题
包体积大小问题

标签:ANR,Canary,bugly,监控,Android,数据,OPPO
From: https://blog.csdn.net/lokier/article/details/143634710

相关文章

  • MySQLMonitor: 黑盒测试Mysql实时监控辅助工具
    MySQLMonitorMySQL实时监控工具(代码审计、黑盒测试辅助工具)使用1.自行打包使用gitclonehttps://github.com/fupinglee/MySQLMonitorcdMySQLMonitormvncleanpackage-DskipTests=true打开target下的jar文件即可执行2.直接下载使用https://github.com/fupinglee/......
  • 监控 Windows 更新补丁安装过程中的文件夹和文件,可以通过 PowerShell 监控 Windows 更
    监控Windows更新补丁安装过程中的文件夹和文件,可以通过PowerShell监控Windows更新的日志文件夹、注册表或其他相关位置。Windows更新会在多个地方生成日志和文件,下面提供了一个使用PowerShell监控Windows更新相关路径、文件夹及文件的示例。监控Windows更新相关的文......
  • Android Audio中 AudioTrack、 AudioFlinger和 HAL 使用dump的区别
    Audiodump在定位音频的各种问题非常重要,我们主要在AudioTrack、AudioFlinger和HAL层中会用到,这里我们先明确一下在不同层使用dump的区别。以下是关于AudioTrack、AudioFlinger和HAL(HardwareAbstractionLayer,硬件抽象层)中dump的区别和使用场景:一、区别Audi......
  • 国标GB28181-2016平台LiteGBS国标GB28181软件,详细介绍LiteGBS视频监控系统
    智能视频监控系统利用图像处理、模式识别和计算机视觉技术,通过集成智能视频分析模块,借助计算机强大的数据处理能力,过滤无用或干扰信息,自动识别物体,提取关键信息,快速准确定位事故现场,判断异常情况,并以最优方式发出警报或触发相应动作。该系统实现全自动、全天候、实时监控,有效支持......
  • GA/T1400视图库平台EasyCVR多品牌摄像机视频平台前端监控摄像头镜头的基础知识
    在现代安全监控系统中,摄像机镜头作为捕捉图像的关键组件,其选择和应用直接影响到监控图像的质量和系统的整体性能。随着技术的发展,摄像机镜头的种类和功能也在不断扩展,以适应各种复杂的监控环境和需求。对于相机成像来讲,镜头是不可或缺的一部分,本篇文章在于帮助大家熟悉摄像机镜头......
  • 【北京迅为】itop-3588开发板摄像头使用手册Android12 双摄方案
     本章节对应资料在网盘资料“iTOP-3588开发板\02_【iTOP-RK3588开发板】开发资料\07_Android系统开发配套资料\08_Android12摄像头使用配套资料”目录下下载。 2.1Android12前摄+后摄网盘中默认的Android12源码支持四个摄像头单独打开,本小节我们来修改源码,实现同......
  • 错误监控为何极易沦为鸡肋?
    绝大多数前端团队,都有错误监控,无论是私有部署的,如Sentry,还是采购三方。这似乎是个政治正确的方向,直观感受上,是一定要做的。但一接入线上后,发现并不是那么回事,短期会涌入大量错误,不同重要程度的错误,杂在一起,难以区分。一时不知,该如何下手。久而久之,就任由其增长,置之不理。......
  • 【汇总】Android NDK 各种版本
    前言全局说明> 一、说明: 二、网址最新版本:https://developer.android.google.cn/ndk/downloads?hl=zh-cn历史版: https://developer.android.google.cn/ndk/downloads/revision_history?hl=zh-cnAndroid版本和APIlevel等级对照:https://blog.csdn.net/Yu1441/articl......
  • golang oom监控实现
    packagemainimport( "bytes" "fmt" "io/ioutil" "os" "golang.org/x/sys/unix")funcmain(){ varevents[128]unix.EpollEvent varbuf[8]byte //unix.EFD_CLOEXEC确保在exec调用时关闭efd,它可以防止文件描述符在不需......
  • grafana对redis哨兵模式监控添加主库信息
    【环境说明】redis+sentinel哨兵模式+prometheus+grafana监控面板【要求】redis哨兵模式,需要查看主库节点信息,如果发生切换,能查到历史变化信息【配置操作】当前已经安装好三个redis数据库跟哨兵模式,并且都安装好了redis-exporter监控服务prometheus配置监控信息:prometheus.......