展开

关键词

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

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

85720

优化

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 测试 //给主线程造成 ANR-WatchDog同样是一个检测的检测库,与AndroidPerformanceMonitor不一样的是它的原理相对简单: 原理是开启一个线程,持续循环不断的往UI线程中Post一个Runnable AndroidPerformanceMonitor与 ANR-WatchDog 区别 AndroidPerformanceMonitor:监控Msg ANR-WatchDog:看最终结果 前者适合监控

38630
  • 广告
    关闭

    【玩转 Cloud Studio】有奖调研征文,千元豪礼等你拿!

    想听听你玩转的独门秘籍,更有机械键盘、鹅厂公仔、CODING 定制公仔等你来拿!

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

    win10上Typora的问题及其解决方案

    电脑上运行较多应用,内存占用较高,发现Typora特别,但是同时chrome同时开着40+网页也没有,多个Pycharm也正常,打开任务管理器发现 Typora使用了0号显卡,怀疑是导致其的原因 conf.user.json 打开后修改flags, 保存并重启typora,就不再使用GPU了: "flags": [["disable-gpu"]] 禁用GPU之后,软件启动的时候比之前慢,但是打开之后不顿了

    1.6K30

    监测APP

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

    7710

    iOS优化

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

    1K11

    Android监控系统

    App使用遇到。 实际可能是这段时间内某个函数的耗时过大导致,而不一定是T2时刻的问题,如此捕获的卡信息就无法如实反应的现场。我们看看在这之前微信iOS主线程监控系统是如何实现的捕获堆栈。 堆栈上报到平台后,需要对上报的文件进行分析,提取和聚类过程,最终展示到平台。前面我们提到,每一次发生时,会高频采样到多个堆栈信息描述着这一个。 做个最小的估算,每天上报收集2000个用户文件,每个文件dump下了用户遇到的10个,每个高频收集到30个堆栈,这就已经产生2000*10*30=60W个堆栈。 目前monitor监控库主要有监控主线程情况,获取平均帧率使用情况,高频采样和获取信息等基本功能。

    3.8K52

    解决UI问题

    btnStartRead.Enabled = true; UiRefresh(null); } 正常运行时: 点击停止读: 正常读,拔掉通讯线,界面不:

    28410

    wpf绘制drawvisual

    drawvisual wpf的控件frameworkelement、继承自visual,wpf的gui节点分为 visualtree,可见的ui树 logictree,xaml中的节点树 drawvisual drawvisual数量增加后,有时出现现象,比对分析发现顿时的资源情况 drawvisual绘制完成后正确释放,否则大量的资源集中起来会造成绘制,如下图gc占了很多时间 io写入数据明显增加

    6020

    问题:tomcat启动

    多配置中心,解决无法同步更新(nacos/consul) 问题背景 tomcat部署于linux centos 7.x 安装了jdk1.8和tomat8 发现,每次在启动tomcat的时候都会出现好久才会完成部署

    9120

    Android 优化——优化

    丢帧给用户的感觉就是,而且如果运算过于复杂,丢帧会更多,导致界面常常处于停滞状态。 原因 过于复杂的布局 界面性能取决于 UI 的渲染性能,UI 渲染的整个过程由 CPU 和 GPU 两个部分协同完成。 如果 UI 布局层次太深,或是自定义控件的 onDraw 中有复杂运算,CPU 的相关运算就可能大于 16ms,导致。 过度绘制 UI 线程的复杂运算 UI 线程的复杂运算会造成 UI 无响应,导致 ANR,但更多的是造成 UI 响应停滞,ANR 是的极致。

    1.1K20

    Matrix TraceCanary -- 初恋·

    什么是 什么是,很多人能马上联系到的是帧率 FPS (每秒显示帧数)。那么多低的 FPS 才是呢?又或者低 FPS 真的就是吗? 一个稳定在 30FPS 的动画,我们不会认为是的,但一旦 FPS 很不稳定,人眼往往容易感知到。 FPS 低并不意味着发生,而发生 FPS 一定不高。 不可重现的卡 但往往大部分是很难及时发现的,不可重现的卡,经常出现在线上用户的真实使用过程中,这种往往跟机器性能,手机环境,甚至是操作偏好等因素息息相关。 一般也是从用户反馈中得到,通常表述为“新版本变了”,“朋友圈很卡”,“聊天经常无响应”,我们很难在这种描述中,直接洞察到的根源,甚至有些连的场景都不知道,很难准确重现,所以这种容易让人摸不着头脑 在这样不断发现,解决的过程中,希望尽可能地优化微信Android客户端的流畅性,给用户带来更好的体验。

    2.7K41

    Android优化 | 及其优化工具概述及StrictMode实践案例

    项目GitHub 本文要点 一般使用的卡优化工具 问题概述 问题分析难点 关于CPU Profiler 关于Systrace 关于StrictMode 磁盘读写违例检测实战 实例限制检测实战 一般使用的卡优化工具 CPU Profiler Systrace StrictMode (strict adj.精确的; 绝对的; 严格的,严谨的; [植]笔直的 mode n.方式; 状况; 时尚,风尚; 调式 模式;) 问题概述 很多性能问题(如内存占用高、耗费流量等)都相对不容易被发现, 但是问题却是很容易被直观感受到的; 问题较难排查、定位; 问题分析难点 可能的产生原因 繁杂:代码、内存、绘制、IO、【在主线程做UI处理、IO操作耗时操作】等; 线上问题,在线下难以复现, 问题跟用户届时的现场环境有很大的关系; 比如, 届时用户终端的磁盘IO空间不足,影响了 APP的IO写入性能, 导致APP,这样的场景有时候是很难复现的; 【最好在问题发生时候,就记录下来用户届时的场景】 关于CPU Profiler 图形的形式展示程序的执行时间、调用栈、执行次数等

    1.2K20

    iOS监控方案浅析

    原因 首先,我们需要明确一个定义,就是是什么? 死锁:主线程拿到锁A,需要获得锁B,而同时某个子线程拿了锁 B,需要锁A,这样相互等待就死锁了。 这里想到的就是将当前的线程栈进行捕捉,这样我们就可以找到当前在哪一行函数。 所以,这里监控的整体思路就是起一个子线程,去监控你所需要关注的线程(例如主线程)的活动情况,如果发现有,就将当前堆栈dump下来。 ? 上图可以看出,我们在这次监控的工具中主要监控的是线程RunLoop的超时情况,由于在iOS中线程的事件处理主要依靠的是RunLoop,如果单次RunLoop运行循环的事件超过某一时间,那就会产生出用户体验情况 ,例如内存堆栈的打印,次数的统计等等。

    62020

    Android优化 | 自动化检测方案与优化(AndroidPerformanceMonitor BlockCanary)

    ,同时用logcat打印出关于的详细信息; 可以检测所有线程中执行的任何方法,又不需要手动埋点, 设置好阈值等配置,就“坐享其成”,等问题“愿者上钩”!! 也可以看到uid键的值 便是我们刚刚设定的字符串“uid”; 同时还直接帮我们定位到问题的出处!!! 可见得BlockCanary已然 成功检测到问题的各种具体信息了!!! 前提是T2-T1大于阈值,确定了是问题)的时刻, 方案才开始获取堆栈的信息, 而实际发生(如发生违例耗时处理过程)的时间点, 可能是在这个时间段内,而非获取信息的T2点, 那有可能 如此一来, 便能更清楚地知道在整个周期(阻塞开始到结束;Message分发、处理前到后)之内, 究竟是哪些方法在执行,哪些方法执行比较耗时; 优化现场不能还原的问题; 新问题:面对 高频堆栈信息的上报 、处理,服务端有压力; 突破点:一个下多个堆栈大概率有重复; 解决:对一个下的堆栈进行hash排重, 找出重复的堆栈; 效果:极大地减少展示量,同时更高效地找到堆栈; ---- 参考:

    1.6K30

    WebStrom 的可能原因

    不过最近,公司的小伙伴用这玩意的时候,老是说,我看了一下进程和资源占用,并没有任何一项是100%啊,但是还是给他加了根内存,还是百度了各种办法,但是还是没用 显然问题应该是和百度们出来的问题不在一个频道 然后TMD就想到了这小伙搞的是公司项目,肯定是开着SVN的,马丹1W多个文件,svn扫一发就的不要不要的。 果断的吧node_modules 给设置为ignore了。 瞬间世界清静了。 我这次的教训,给小伙伴们提供了一个解决问题的思路,也就是你们平常觉得的时候,然后百度谷歌也没用的时候,尽量看看这些版本控制工具,文件数量多的时候,分分钟就卡死给你看!而且svn的性能还比不上git。

    17430

    常见拉流总结

    简介 直播对观众来说是不太好的一个体验,那么如何尽量避免呢,小编给大家分享一些经验。 直播推拉流顾名思义先有推流才能拉流,那么保证推流端正常稳定的推流就尤为重要。 常见问题总结 1.推流端视频帧率过低 推流帧率如果只有几帧的话,对于人眼来说会有“”的感官效果,目前建议是稳定在15帧或以上,电影一般是24帧,游戏30帧以上会较好,高于60帧对于人眼一般没有多少差异 那么下行播放端肯定是甚至是黑屏。推荐还是使用三大运营商的网络,保证带宽足够,网络稳定才能给观众更好的观看体验。 如果大家还有其他关于拉流的问题或解决方案也可以分享给小编。

    1.2K00

    Flutter优化锦辑

    Flutter优化必备基础知识 首先,在做性能调优之前,我们应该对flutter相关基础知识有一定的了解,不然我们无从做起,首先,我们要了解flutter是干嘛的--Flutter 是谷歌2018 所以,我们做性能优化,关心DartUI,关心GPU两个线程,掉不掉帧,的关键,就看这两位了,而且在99%情况下,作为Flutter开发人员,我们我们基本上解决好,DartUI线程上的问题,就==解决了渲染性能问题 所以,我们说 要解决掉帧的问题,就是要解决build,layout,paint这三个阶段各函数执行耗时的问题。

    4.8K107

    Matrix-iOS 监控

    我们把这类问题叫做问题。这类问题很影响用户的体验,是必须进行解决的。为了精确地定位用户的卡问题,iOS 微信在 2014 年 9 月份上线了监控系统。 在这几年间,监控经历了几次优化,不断成熟,在这里我们将其分享出来。 什么是 ---- 就是在应用使用过程中出现界面不响应或者界面渲染粘滞的情况。 监控起一个子线程定时检查主线程的状态,当主线程的状态运行超过一定阈值则认为主线程,从而标记为一个。 ? Matrix 监控通过主线程耗时堆栈提取来解决这个问题。 监控定时获取主线程堆栈,并将堆栈保存到内存的一个循环队列中。 Matrix 检测到应用卡死被强杀,会把应用上次存活时的最后一份日志标记为卡死。 性能数据 ---- Matrix 监控不打开耗时堆栈提取,性能损耗可以忽略不计。

    8.5K85

    iOS 监测方案总结

    前言 最近在写 APM 相关的东西,所以整理了一下 iOS 中监测的那些方案,不了解的原理的可以看这篇文章iOS 保持界面流畅的技巧[1],写的很好。 这里做法又有点不同,iOS 实时监控[3]是设置连续 5 次超时 50ms 认为,戴铭在 GCDFetchFeed[4]中设置的是连续 3 次超时 80ms 认为的代码。 ,这种检测方式也总能认定主线程处在状态。 接着子线程沉睡超时阙值时长,判断标志位是否成功设置成 NO,如果没有说明主线程发生了。ANREye[6] 中就是使用子线程 Ping 的方式监测的。 当我们得到的时间点,就要立即拿到的堆栈,有两种方式一种是遍历栈帧,实现原理我在iOS获取任意线程调用栈[8]写的挺详细的,同时开源了代码 RCBacktrace[9],另一种方式是通过Signal

    58520

    扫码关注腾讯云开发者

    领取腾讯云代金券