阿里百川码力APP监控 来了!
|
对于数据采集之后会统一进入可以承载海量数据的存储系统和日志系统,统计系统会利用落地的数据完成数据的计算处理、生成报表,帮助开发者长期跟踪应用和服务的性能,而告警系统则会根据规则在问题发生时发出短信、邮件等即时告警,从而帮助开发者及时解决问题,降低损失。 可用性的度量检测方式-性能
在应用开发时,程序错误、主线程卡顿和资源使用超过系统限制导致的崩溃,是最严重、也是需要首先解决的问题。 通常开发者会借助模拟器、Instrument或者自动化测试发现一部分问题,但是测试往往难以覆盖用户使用场景下的设备、网络等环境。如果借助于社交媒体或者邮件反馈渠道,虽然可以有限地拿到真实的用户反馈,但是用户往往不能清楚的描述出复现问题所需的信息,往复沟通成本极高。所以,在客户端上,码力APM通过以下检测方式来收集应用崩溃信息。
码力APM在信号捕获方式中,通过sigaction设置信号中断时的回调,这样,就可以在回调中根据程序运行状态生成对应的崩溃日志。此外,对于SIGARBT(abnormal termination),我们还需要通过NSSetUncaughtExceptionHandler来获取未捕获异常的堆栈,来补全崩溃信息。 而后,把崩溃日志上报到码力APM,会依据崩溃日志的堆栈信息,聚合同一类型的崩溃后写入数据存储。同时,告警系统可以依据崩溃次数、崩溃率等规则,即时发出告警。 此外,码力Apm提供了dSYM上报脚本,在Xcode的build phrase中添加脚本,就可以在编译成功后自动上报dSYM文件。通过对dSYM文件的解析,重新聚合后写入数据存储,聚合可以减少高达90%数据库行数;同时,也实现了崩溃日志符号化。不依赖mac环境符号化,更好地利用云计算平台服务更多开发者。
第二种技术是卡顿检测,卡顿检测的基础是RunLoop,通过RunLoop Observer监听主线程RunLoop状态的变更。在这里,把RunLoop当作在操场上跑圈的运动员,把Before Sources当做每圈的起点,同时另外开启一条线程作为计时员,每5秒判断一次RunLoop是否跑过一圈。如果5秒内RunLoop没有完成一次RunLoop,则视为主线程卡顿。在发现主线程卡顿后,会生成卡顿日志,如果是复现的卡顿,可以选择不重复上报。 此外,针对设备不同的运行时期,如启动阶段、后台阶段、空闲阶段,我们会动态调整阈值,降低检测的开销。
对于无法通过信号捕获、卡顿检测的崩溃,码力APM引入了应用中止检测,中止检测虽然不能还原崩溃现场,但是可以揭示问题的存在。在应用进入active状态时,码力APM在持久存储上设立一个标志位,表示程序在正常运行。在应用退出active状态或检测到崩溃时,码力APM就清除持久存储上的标志位,表示程序在已知的情况下退出。这样,在下一次应用启动时,如果持久存储上的标志位为真,则说明应用上一次运行在未知情况下退出,这种情况码力APM就计为应用非正常中止上报。 同时,为了过滤因为电量耗尽导致的关机,码力APM还增加了电量检测,在低电量时,清除标志位,避免中止误报。 可用性的度量检测方式-网络
(编辑:网站开发网_安阳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |







