西瓜视频播放位置其他是哪里,西瓜视频的缓存文件在哪里


作为计算机程序运行最重要的资源之一,在运行过程中需要合理分配和回收资源 。不合理的内存占用会导致用户应用运行卡顿、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小编还为您精选了以下内容,希望对您有所帮助: