作为计算机程序运行最重要的资源之一,在运行过程中需要合理分配和回收资源 。不合理的内存占用会导致用户应用运行卡顿、ANR和黑屏,甚至导致用户应用发生 。
OOM(内存不足)崩溃 。作为用户广泛使用的产品,Tik Tok需要在各种机器资源上保持出色的流畅度和稳定性,内存优化是必须重视的关键环节 。
本文结合Tik Tok Java OOM内存优化的治理实践,尝试与大家分享Tik Tok团队对Java内存优化的一些思考,包括工具建设和优化方法论 。
#抖音 Java OOM 背景
在Tik Tok记忆特殊处理之前,我们梳理了整体记忆指数的绝对值和相对崩溃,发现比例非常高 。再加上去年春节期间记忆相关指标再次飙升至历史新高,整体记忆问题相当严峻,必须进行专项治理 。Tik Tok这边将通过早期归因、工具建设和为期两个月的记忆特别管理进行整合 。
Java OOM优化了80% 。
#Java OOM Top 堆栈归因
在优化Tik Tok的Java内存治理之前,我们首先根据平台上报的栈异常对当前的OOM进行了归因,主要分为以下几类:
文章插图
1.OOM分类 。
其中,pthread_create问题约占总数的50%,Java堆内存超限超过40%,其余为少量fd超限 。在…之中
pthread_create和fd数量不足是本机内存限制导致的Java层崩溃 。我们也针对这部分内存问题做了针对性的优化,主要包括:
*线程收敛、监控 。
*自动修复螺纹叠漏 。
* FD泄漏监测 。
*虚拟内存监控和优化 。
* Tik Tok 64位特别程序 。
治理之后,pthread_create的问题降低到0.02以下,这方面的治理实践将在下一篇文章Native in Tik Tok中讨论 。
请期待内存治理实践中的详细介绍 。本文主要讨论Java堆内存管理 。
#堆内存治理思路
从Java堆内存溢出的分类来看,主要有两类问题:
1\. 堆内存单次分配过大/多次分配累计过大 。
触发这类问题的原因是由于数据异常导致单个内存分配过大、超限,部分是StringBuilder 。
拼接的累计尺寸过大等等 。这类问题的解决方法很简单,问题就出在当前栈上 。
2\. 堆内存累积分配触顶.
这类问题的问题栈会比较分散,在任何内存分配场景下都可能触发,那些高频内存分配节点的概率会比较高,比如Bitmap分配内存 。这种OOM
根本原因是积累的内存太多,当前的栈只是压垮骆驼的最后一根稻草,不是问题的根源 。因此,我们需要分析整体内存分配,找出不合理的内存使用情况(如内存泄漏、大对象,过度小对象,大图等) 。).
#工具建设
#工具思路
锋利的工具很管用 。从上述内存管理思路来看,该工具需要解决的主要问题是分析整体内存分配,发现不合理的内存使用情况(如内存泄漏、大对象,过度小对象,等) 。).
我们从两个维度构建工具:线下和线上:
#线下
线下是第一考虑,内存泄漏问题可以在开发测试时前发现 。业界主流的工具也是这个思路,比如安卓Studio Memory 。
剖析器、泄漏检测器、内存分析器 。
我们基于线下.的leakkarine核心库
ng>设计了一自动分析上报内存泄露的工具,主要流程如下:
文章插图
图 2.线下自动分析流程
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 抖音怎么弄配音加原音,抖音视频后期配音怎么弄
- 西瓜视频可以看手机通讯录吗,西瓜视频找通讯录好友
- 皮皮赶海视频,皮皮赶海西瓜视频主页
- 西瓜视 西瓜视频是谁开的
- 怎么删除抖音自己的作品,发表在抖音里的视频怎么删除
- 视频剪切器免费手机版 手机视频剪辑软件哪个好用
- 短视频编剧合作平台 短视频编剧职责
- 免root卸载华为 免root卸载华为视频
- 短视频联盟真的还是假的 全球短视频联盟是不是假的
- 农家朱少新视频 二丫乡村生活西瓜视频