MapleStory

Android Reliability

稳定 顾名思义 指的是系统以及应用正常工作的状态,但由于各种原因系统或者应用工作在不正常的状态,例如应用卡顿,闪退,系统卡死黑屏乃至重启。
关于稳定性工作,一般也就分成两个方面
1.定位增强–如何能够尽快正向解决问题
2.容错恢复设计–在问题发生时如何能尽量减少异常的时间
这两个方面在原生系统(谷歌aosp)中已经有着不少体现。并且这两个方面应该说是相辅相成的。
如在应用anr时会有anr日志,同时提示用户等待或者停止应用,再如watchdog时会先抓去watchdog日志,并重启虚拟机。
从大部分问题发生的原因来看主要有以下几个问题:
1.异常场景判断不够 (如并发访问
2.设计时序错误 (如环形依赖的服务
3.编码规范 (如判空、fd有效判断
如何做好稳定性工作?
1.前端上代码静态检查,流程上代码review,设计上进行多方考虑。
2.问题发生时的现场抓取能力构建。
任何问题的检测都是有开销的,理想的场景是在内部用户测试时尽量抓取全的日志,而在商用上关闭所有的日志。
可以考虑的是一直抓取日志,并打包。在问题发生时提取时间点前后一段时间的日志。
重新定义一套日志标签,用于提取问题的发生时的特征,用户上报问题的现象作为分类的结果-
利用专家知识,对日志做初步的筛选,分类,提高开发定位效率。
除了流水日志外,各种栈或者dumpsys的抓取时机也十分重要。能否在正确的时间抓取也是需要考量的地方-
常用的一些日志:
由于底层是linux大部分日志或者系统状态都能够通过sys/fs 或者 proc节点下获得。
framework层有各种dumpsys,并且还有 app日志以及event日志

Comments