首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS监控系统

引子 iOS 团队在值班的时候,时不时会收到这样的卡反馈:“用户A 刚才碰到从后台切换前台了一下,最近偶尔会遇到几次”、“用户B 反馈点对话框了五六秒”、“现网有用户反馈切换 tab 很卡”...随着的发展普及,这类问题积累得越来越多,为了攻城狮的尊严,我们感觉到有必要专门处理一下了。 原理 在开始之前,我们先思考一下,界面是由哪些原因导致的?...这样能够避免同一个写入多个文件的情况,也能避免检测线程围着同一个空转的情况。 3....缺点是层数不好定,可能外面十来层都是系统调用,也有可能第一层就是的函数了。 中间层归类:能够根据事先划分好的“特征值”来归类。...效果 主线程监控在5.3.1灰度以来,已经成功解决了不少常规手段无法定位的难题,包括: 订阅号更新导致切换前台很卡(500+订阅号) 通讯录延迟加载导致偶尔一下(1k+好友) 他山之石与后续工作

5.2K60
您找到你想要的搜索结果了吗?
是的
没有找到

Android优化 | 单点问题监测方案

ARTHook实战 小结 项目GitHub 背景介绍 前面提到过两种自动化自动化检测方案: AndroidPerformanceMonitor和ANR-WatchDog; 需要本方案的原因:自动化检测方案无法满足所有场景...; 如,有很多Message要执行, 但是所有Message的时间, 都没有达到自动化检测方案所配置的卡的判定阈值, 那这种情况,自动化检测方案对这些“较小型”的卡问题便无能为力了;...可是这些没有达到的判定阈值的“较小型”的卡问题, 却会一直影响用户体验,这显然是不行的!!...需要建立体系化的卡解决方案, 便要尽早地尽可能多地暴露问题,补充已有方案的不足; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 需要关注的单点问题...View绘制等; 下面以主线程IPC为例, 因为IPC其实是一个很耗时的操作, 但实际开发时很多时候都没有得到足够的重视, 偶尔还会在主线程进行IPC操作,以及频繁的调用, 而这种耗时其实很少达到的阈值

2.3K20

优化

AndroidPerformanceMonitor implementation 'com.github.markzhai:blockcanary-android:1.5.0' AndroidPerformanceMonitor 是一个检测的开源库...而其使用与LeakCanary也比较相似,可以自主设置检测时间,检测到的卡同样是以Notification展示,在使用体验上也相当类似,与LeakCanary可以说是孪生兄弟。...提示框(Room表现不一,有些手机厂商会把提示框给去掉) ANR 解决方式 adb pull data/anr/traces.txt存储路径,然后分析CPU、IO及锁 ANR 测试 //给主线程造成...检测组件 https://github.com/SalomonBrys/ANR-WatchDog 使用:new ANRWatchDog().start(); 原理 ANR-WatchDog同样是一个检测的检测库...AndroidPerformanceMonitor与 ANR-WatchDog 区别 AndroidPerformanceMonitor:监控Msg ANR-WatchDog:看最终结果 前者适合监控

1.7K30

Android的离奇陷阱 — 设置线程优先级导致的惨案

事实上,这三行代码甚至导致了Android客户端的一次线上故障!这是为什么?背后有怎样秘密?又如何管控和避免?我们来一起深入分析、研究下这个问题。...(传送门:如果不想深入了解这其中的原理,和一波三折的故事,可以直接跳到最后的 5.3 小节,那里提供了一些设置线程优先级的正确和错误的典型例子) 一、案件发生 Android客户端某个新版本发布之后...,马上就收到了很多用户的反馈:公众号里的视频/音画不同步;朋友圈里的视频掉帧。...而由于很多视频播放的逻辑中,都会通过系统的sleep/wait/pthread_cond_timedwait等方法来实现音视频的同步,会有非常频繁的调用,如果每次都多出几十毫秒,就会直接引起视频播放...,音画不同步等问题,也就直接导致了这次的线上故障。

4.7K63

Android分析

一、原因 屏幕1秒60帧,平均每帧16.6毫秒,如果代码实现不佳,或者过于复杂,导致一帧绘制时间大于16.6毫秒,则无法完成绘制,造成丢帧,连续出现掉帧,在现象上表现为。...默认情况下,性能分析器只会将帧显示为有待调查的候选对象。在每个帧中,红色部分突出显示了相应帧超出其渲染截止时间的时长。...image.png 发现帧后,点击该帧;可根据需要按 M 键调整缩放程度以聚焦到所选帧。...若要调查导致的确切细节,您可以查看 Threads 部分,其中会显示与界面呈现有关的线程。...这些线程与界面呈现有关,可能是导致的原因。 如需在 Android 10 或更低版本上检测情况,请执行以下操作: 查看 Display 中的 Frames 轨迹。

2.4K20

监测APP

这就是界面的原因。...所以,造成的原因分为CPU和GPU,CPU可以用CADisplayLink来检测,UI更新可以用Runloop的mode来检测 监测:开一个子线程,利用displaylink或者...Runloop来监测; 收集堆栈:将顿时的堆栈收集起来; 上传记录:将上传到后台或自定义; 这里我引用一张开发团队的监测流程图: 二、Runloop检测 首先我们来看一个...所以通过比较dispalylink的更新时间就可以知道是否存在 - (void)updateTime{ if (!...2、上传位置,一种是自己建立后台来统计这些,嫌麻烦的话是利用第三方平台、如友盟(统计崩溃比较多)、听云、OneApm、博睿,都大同小异。

1.2K10

iOS优化

按照60FPS的帧率,每隔16ms就会有一次VSync信号,1秒是1000ms,1000/60 = 16 的原因: iOS默认刷新频率是60HZ,所以GPU渲染只要达到60fps就不会产生。...RunLoop监听 原理:是在主线程进行了耗时的操作,可以添加Observer到主线程的Runloop中,通过Runloop状态切换的耗时,达到监控的目的。...监控起一个子线程定时检查主线程的状态,当主线程的状态运行超过一定的阈值,则认为主线程,从而标记为一个。...分析实现: 使用Runloop进行监控,定义一个阈值判断的出现,记录下来上报到服务器。...子线程Ping 根据发生时,主线程无响应的原理,创建子线程去循环ping主线程,ping之前先设置标志为True,再派发到主线程执行后设置标志为false,子线程在设置阈值时间内休眠结束后,根据标志判断主线程有无响应

3.4K11

Android监控系统

实际可能是这段时间内某个函数的耗时过大导致,而不一定是T2时刻的问题,如此捕获的卡信息就无法如实反应的现场。 我们看看在这之前iOS主线程监控系统是如何实现的捕获堆栈。...iOS的方案是起检测线程每1秒检查一次,如果检测到主线程,就将所有线程的函数调用堆栈dump到内存中。本质上,iOS方案的计时起点是固定的,检查次数也是固定的。...这是一个权衡的过程,实际则按照一定的尝试效果后去划分层数,如iOS监控采用的策略是一级分类按最内层倒数2层分类,二级分类按最内层倒数4层。...实际应用效果 1、接入产品:读书,企业,QQ邮箱 2、应用场景:现网用户的监控,发布前测试的监控,每天自动化运行的监控 3、发现问题:三个多月时间,归类后的卡过万,提bug单约500,开发已解决超过...200个问题 监控的组件化 考虑到Android监控的通用性,除了应用于Android WeRead中,我们也推广到广研的其他产品中,如企业,QQ邮箱。

7.5K52

Android BlockCanary检测

前言 在日常业务测试中经常会发现页面跳转、滑动等等问题,但是往往发生了问题也没有什么具体信息提供给开发同学排查问题,所以也就不了了之了。...Blockcanary介绍 介绍 Blockcanary是@markzhai开发的检测app主线程工具,不需要在代码中插桩和debug代码就能检测出。...log日志 根据上面的配置代码并打包app,进行手工测试如果主线程超过1000ms,会在手机sdcard/BlockTest目录下生成日志。...文件包含几点: 发生时间 版本 imei cpu型号 内存 堆栈 上报log日志 之前方式的卡日志需要连接该设备把log手动导出来分析,或者在弹框中展示,这样并不能做到日志持久化和做后期的数据分析...项目 我们模拟一个Demo项目来模,点击block按钮后sleep2秒来模拟日志:

1.4K30
领券