字节二面:如何构建一个线上性能监控的日志系统?
1 故事开始
面试官:平时开发中有遇到卡顿问题吗?是什么原因造成的呢?如何构建一个线上性能监控的日志系统?
来面试的小伙:额...没有遇到过卡顿问题,我平时写的代码质量比较高,不会出现卡顿。
面试官:...
这回答似乎没啥问题,但是如果你在面试中真这样说他们会认为你在卡顿监控以及优化这一块是0经验。
卡顿这个话题,相信大部分两年或以上工作经验的同学都应该能说出个大概。
一般都能说出卡顿的原因:
主要是主线程阻塞。在开发过程中,遇到的造成主线程阻塞的原因可能是:
主线程在进行大量I/O操作:为了方便代码编写,直接在主线程去写入大量数据
主线程在进行大量计算:代码编写不合理,主线程进行复杂计算
大量UI绘制:界面过于复杂,UI绘制需要大量时间
主线程在等锁:主线程需要获得锁A,但是当前某个子线程持有这个锁A,导致主线程不得不等待子线程完成任务。
......
但是如果问得更深一点:
应用上线后程序频繁出现卡顿,如何定位问题?
当遇见OOM时,如何定位到真正导致内存溢出的原因?
如何在不影响性能的同时实现线上性能监控?
去过大厂面试的朋友就会知道大厂经常问这样的问题,主要是因为一旦发生卡顿就会被用户直观的感受到,而其他问题很难被及时的发现:比如内存占用高,耗费流量等。
用户总是希望你的应用能越快越好,秒启动,流畅无违和的操作,及时的操作响应。
用户体验不好就很有可能卸载掉App,让公司白白付出高昂的用户成本,因此因为性能问题导致用户流失是我们开发人员的失职。
搞客户端开发的同学应该都知道,解决卡顿的过程往往是曲折的,有些并没有我们想的那样简单、浅表。
很多时候,大部分卡顿是很难及时发现的,不可重现的卡顿,经常出现在线上用户的真实使用过程中,这种卡顿往往跟机器性能,手机环境,甚至是操作偏好等因素息息相关。
我们平时从用户反馈的“好卡呀”这种描述中很难直接洞察到卡顿的根源。甚至有些连卡顿的场景都不知道,很难准确重现,所以这种卡顿容易让人摸不着头脑。
而内存作为计算机程序运行最重要的资源之一,需要运行过程中做到合理的资源分配与回收,不合理的内存占用轻则使得用户应用程序运行卡顿、ANR、黑屏,重则导致用户应用程序发生 OOM(out of memory)崩溃。
我们需要在各种机器资源上保持优秀的流畅性和稳定性,内存优化是必须要重视的环节。
本次邀请腾讯课堂的Lance老师用两节课的时间给大家详细的讲解这个知识点。
Lance老师:前爱奇艺高级工程师,某游戏公司主程。多年移动平台开发经验,涉猎广泛,热爱技术与研究。主要对NDK、架构与性能优化拥有深入的理解及开发经验。授课严谨负责。
课程排期(6月1日-6月2日每晚八点)
6月1日:面试被问线上性能监控怎么办?腾讯内存监控黑科技实践
痛点:应用上线,Bugly采集的异常堆栈真的能定位OOM问题?
破局:Java黑科技JVMTI实现动态内存分配监控方案
突破:Android高性能日志记录方案
实践:JVMTI无法应用于线上环境,腾讯是如何解决的?
6月2日:微信Matrix卡顿监控方案,函数自动埋点实践
1、BlockCanaray卡顿监控原理
2、360 ArgusAPM卡顿监控原理
3、Matrix如何应对不可重现的卡顿
4、自动埋点监控函数执行耗时
5、AOP思想的体现,ASM字节码插桩实践
大家通过学习可以掌握:
业界常见卡顿监控方案原理,
完成微信Matrix中函数打点监控耗时的实践,
学会监控由于内存导致的卡顿,
学会如何监控程序整体内存使用情况,
出现OOM时能够准确地定位到问题。
我相信,只要大家认真听完Lance老师的课,跟着走一遍,你就有勇气在简历上写下熟悉Android线上性能监控,精通APP性能调优与项目实战这些点。从此吊打所有向你提问线上性能监控的面试官,成为一个名副其实的面霸!
4 公众号渠道报名福利
《Android360°全方面性能调优》一共有722页,四个章节,25个小点,不仅仅有详细的底层原理的解析,还有大厂性能优化探索与实践!
目录:
1、设计思想与代码质量优化
2、程序性能优化
启动速度与执行效率优化
布局检测与优化
内存优化
耗电优化
网络传输与数据储存优化
APK大小优化
3、开发效率优化
分布式版本控制系统Git
自动化构建系统Gradle
4、项目实战
启动速度
流畅度
抖音在APK包大小资源优化的实践
优酷响应式布局技术全解析
网络优化
手机淘宝双十一性能优化项目揭秘
高德APP全链路源码依赖分析
彻底干掉OOM的实战经验分享
微信Android终端内存优化实践
文中资料免费赠给参加训练营的学员
加薇薇老师微信报名训练营
立即领取
(如遇扫码频繁受限,点击左下角的阅读原文)