今日头条性能优化与监控归因实践
如果无法正常显示,请先停止浏览器的去广告插件。
1. 今日头条性能优化与监控实践
徐磊
今日头条平台技术负责人
2.
3. 分享导视
• 背景介绍
• ANR 分析与优化实践
• 虚拟机内存优化实践
• 系统优化合集
• 监控工具建设
• 回顾与展望
4. 背景介绍
面临挑战:内忧外患
应对策略:攘外安内
应用快速迭代
获取日志能力有限
线上运营频繁
精准监控
快速归因
严入严出
系统兼容
Android碎片化
厂商定制化
系统改造
5. 分享导视
• 背景介绍
• ANR分析与实践 (现状分析,监控工具,系统优化实践)
• 虚拟机内存管理优化
• 系统优化合集
• 监控平台建设
• 回顾与展望
6. ANR实践-现状分析
Trace置信度低 (有效性 < 30%)
问题复杂性 (系统影响> 30%)
信息局限性 (解决率 < 50%)
"main" prio=5 tid=1 Native
| group="main" sCount=1 dsCount=0 obj=0x770306e8 self=0xadf84f00
| sysTid=20514 nice=-10 cgrp=default sched=0/0 handle=0xb0d6d534
| state=R schedstat=( 25616960201 10910088018 25607 )
utm=2205 stm=356 core=3 HZ=100
| stack=0xbe3eb000-0xbe3ed000 stackSize=8MB
| held mutexes=
kernel: (couldn't read /proc/self/task/20514/stack)
at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
at android.os.MessageQueue.next(MessageQueue.java:356)
at android.os.Looper.loop(Looper.java:138)
at android.app.ActivityThread.main(ActivityThread.java:6623)
at java.lang.reflect.Method.invoke!(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
业务:复杂度高 Trace完整性
系统:进程间Cpu/IO/Mem竞争 历史可追溯性
硬件:CPU/GPU/Low Power 系统信息获取
7. ANR实践-Raster监控
Raster核心思想:
跟踪和记录耗时严重消息
及关键消息
ANR时获取当前消息及消
息队列待调度消息
对耗时严重消息采样堆栈
Raster特征:
回放过去,现在,未来
一键接入,低耦合
兼容Android全版本
8. ANR实践-案例实践
主线程Trace堆栈
Raster还原主线程现场
9. ANR实践-系统优化背景介绍
消息顺序执行,容易形成消息竞争
部分场景高并发,Service无法及时响应
业务复杂治理&维护成本高
10. ANR实践-系统双线程调度
Horae框架核心思想:
代理&拦截mH入队消息,转发
Service/Receiver
独立线程执行,不与主线程竞争,
提升响应能力
Horae框架特点:
支持黑白名单,灵活定制
一键接入,动态开关
兼容Android全版本
11. ANR实践-系统双线程调度收益
线上效果:
接入头条/抖音/火山等10多款产品
超10亿设备平稳运行
ANR普降30%,部分系统降幅50%
12. 分享导视
• 背景介绍
• ANR分析与系统优化
• 虚拟机内存管理优化 (现状介绍,方案原理,优化实践)
• 系统优化合集
• 监控平台建设
• 回顾与展望
13. 虚拟机内存-OOM示例介绍
Crash堆栈
java.lang.OutOfMemoryError: Failed to allocate a
2096652 byte allocation with 287536 free bytes
and 280KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(VMRuntime.java)
at android.graphics.Bitmap.nativeCreate(Bitmap.java)
at android.graphics.Bitmap.createBitmap(Bitmap.java:831)
at android.graphics.Bitmap.createBitmap(Bitmap.java:808)
at android.graphics.Bitmap.createBitmap(Bitmap.java:775)
at com.facebook.imagepipeline.memory.BucketsBitmapPool.alloc
at com.facebook.imagepipeline.memory.BasePool.get
Crash时Large Space内存占用
Crash画像系统分布
14. 虚拟机内存-内存管理介绍
内存现状:
Space类型:按照不同内存类型,划分不同Space
LargeSpace:Native层申请,纳入虚拟机统计
内存统计:各Space共享512M,此消彼⻓
系统优化策略:
Android O版本将bitmap源数据下沉到Native,虚拟
机只统计Bitmap对象大小,以间接提升其他内存使用
15. 虚拟机内存-LargeObjectSpace介绍
LargeObjectSpace特征:
非连续空间,对象离散分布
单个对象大于4个物理⻚
内存纳入虚拟机统计,但实际从Native申请
16. 虚拟机内存优化-管理策略优化
内存统计流程:
内存申请后加上新增内存
内存回收后减去释放内存
内存统计优化:
LargeSpace内存申请后 提前 减去本次
新增内存
GC内存回收后 补偿 本次LargeSpace
释放内存
17. 虚拟机内存优化-优化效果对比
改造后内存统计变化:
LargeObjectSpace内存占用不
在纳入虚拟机内存统计范围
其它Space独占512M使用上限
Android版本
虚拟机内存上限
LargeSpace内存理论范围 说明
Android O以下 512M 0~512M 所有内存Space共享512M
包括Bitmap源数据
Android O及以上 512M 0~512M 所有内存Space共享512M
0~2G Other Space独占512M
LargeSpace不纳入统计
Android全版本
+
mSponge方案
512M
18. 虚拟机内存优化-挽救OOM
方案核心:
监听&拦截OOM
开启虚拟机内存优化方案,提升
空间使用范围
再次触发内存申请,挽救OOM
mSponge特点:
自动按需开启保障最大化收益
统一虚拟机内存管理策略
一键接入,全版本兼容
19. 分享导视
• 背景介绍
• ANR分析与系统优化
• 虚拟机内存管理优化
• 系统优化方案合集 (一站式解决框架Godzilla,实例分享)
• 监控能力建设
• 回顾与展望
20. 系统优化-通用优化框架Godzilla
Godzilla框架介绍:
背景:系统或厂商定制引起众多问题,厂商修
复周期⻓,低系统停止维护
目标:一站式解决系统层面带来的各种问题
出品方:头条/抖音/⻄瓜
方案集成:通用优化方案30+
产品接入:头条/抖音/⻄瓜等40多款产品
线上收益:稳定性指标提升一倍以上
21. 系统优化-ProviderNoFound案例
Crash画像:
问题场景:新增Provider组件,应用升级首次启动过程
问题原因:升级过程中系统过早拉活,加载旧Dex
解决思路:
动态代理mInstrumentation,按需拦截该类异常
22. 分享导视
• 背景介绍
• ANR分析与系统优化
• 虚拟机内存管理优化
• 系统优化合集
• 监控工具建设 (精准监控,容器化,自动归因)
• 回顾与展望
23. 监控平台-LOUPE背景介绍
面临挑战:
快速迭代,低级问题频繁逃逸
发现问题简单,定位问题困难
多部⻔协同,沟通对接成本高
24. 监控平台-LOUPE框架总览
产品介绍:
使用场景:压测/回归测试
堆栈快照,可视化,自动归因
沙箱机制,交互式监控
目标:
解决“最后一公里难题”
(发现问题到快速定位问题)
25. 分享导视
• 背景介绍
• ANR分析与系统优化
• 虚拟机内存管理优化
• 系统优化合集
• 监控工具建设
• 回顾与展望
26. 总结回顾
优化演进历程:
问题视⻆:业务视⻆,系统视⻆
治理过程:解决问题,快速解决问题
方案选型:系统方案,降低维护成本
治理思路:线上,线下
27. 展望
攻坚战,持久战,更早发现&拦截问题,提升效率,提高人效
28. xulei.sky@bytedance.com
欢迎找我交流
29.
30.