当前位置: 首页 > news >正文

JVM系统优化实践(11):GC如何搞垮线上系统

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~


看了那么多G1 GC的传说,再来看看怎么预防GC把工程师精心设计的系统给搞垮。

在JVM的运行过程中,既有创建对象,又有GC(可能还有Stop the World),或者二者循环进行。而年轻代GC对系统的影响一般情况下不大,但有些特殊的情况,影响会非常大:

1、堆内存过小(只有几百M);

2、堆内存过大(有几十G),此时的垃圾回收器不能用ParNew,只能用G1。

那么老年代GC对系统的影响呢?取决于年轻代对象进入老年代的条件以及一些其他条件:

1、对象年龄判断:默认在年轻代存活15次之后,进入老年代;

2、动态年龄判断:若Minor GC后,Survivor中全部对象的大小之和>Survivor大小的50%,就把年龄最大的对象直接放进老年代;

3、Survivor空间不足:Minor GC后,存活对象太多,Survivor空间不足,则存活对象直接进入老年代。

如果年轻代的Survivor空间过小,上述的第二条和第三条就会频繁发生,而且老年代GC至少比年轻代GC慢10倍以上。

再来澄清一些概念,免得混淆:

1、Minor GC === Young GC;

2、Full GC = Young GC + Old GC + 元空间GC;

3、Major GC,这个概念最好不要用;

4、Mixed GC,是G1中特有的概念,指G1的混合回收阶段。

各类GC的触发时机:

1、Young GC的触发时机,年轻代的Eden区满了之后就会触发,采用复制算法完成GC;

2、Old GC的触发时机,年轻代历次Young GC后进入老年代的对象总和的平均大小 > 老年代可用空间;或者老年代空间不足;或者老年代空间使用率> 92%;

3、当存放类信息和各类常量的元空间区也满了的时候,就会触发Full GC。

案例一背景:

1、基于商家产生的大量数据,开发的一套Business Intelligence;

2、例如每天访客数量、成交量、付费转化率等等;

3、经营数据 -> Hadoop/Spark/Flink -> MySQL/ElasticSearch;

4、刚开始业务量不大,Eden=1G,S0=S1=100M。

它的技术痛点是:

1、前端实时自动刷新报表;

2、大数据量报表;

3、高并发特征:单机500次请求/秒,每次请求需要加载100K数据传给前端,因此有50M/秒的空间消耗;1G空间20秒填满;

4、Young GC频繁触发,每次耗时几十毫秒,暂时影响不大。

为了应对这种情形,配置升级:

1、加大机器内存:Eden=16G,S0=S1=1G;

2、按照50M/秒的消耗速度,需要320秒就能填满16G空间;

3、ParNew + CMS垃圾回收有严重卡顿现象,JDK升级到1.8以上,采用G1垃圾回收。

案例二背景:

1、某系统会不停地从MySQL及其他数据源里提取大量的数据加载到JVM里进行计算处理;

2、单台机器大概100次/分钟的数据提取和计算任务;

3、每次提取10000条数据,每次计算耗费10秒左右;

4、10000条大概消耗10M空间,100次/分 × 10M/次 = 1G/分;

5、Eden=1.2G,S0=S1=100M;

6、年轻代1分钟就会耗尽。

它多久触发一次Full GC呢?

1、每次计算10000条要10秒钟,假设剩余20次计算任务仍在计算;

2、10M/次 × 20次 = 200M空间无法回收;

3、200M > Survivor,执行空间担保流程后,对象直接进入老年代;

4、1.5G / 200M/分 = 7分,老年代7分钟就会被填满;

5、每7分钟触发一次Full GC,清空老年代。

GC优化方案:

1、在当前频率下,增加年轻代空间,增大Survivor;

2、如果将该系统的工作负荷扩大10倍;

3、100M/分钟空间消耗,Full GC的时间也会大大缩短;

4、只需十多秒就能触发一次Full GC;

5、使用大内存机器优化,JVM空间均扩大10倍;

6、使用G1垃圾回收。


感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~

相关文章:

JVM系统优化实践(11):GC如何搞垮线上系统

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~看了那么多G1 GC的传说,再来看看怎么预防GC把工程师精心设计的系统给搞垮。在JVM的运行过程中,既有创建对象,又有GC&#xff0…...

统计软件与数据分析—Lesson2

jupyter Note环境配置,安装及使用以及python数据的读取操作统计软件与数据分析—Lesson21.Jupyter Note环境配置,安装及使用1.1 Jupyter Note 基本操作1.2 Notebook中的Magic开关1.2.1 Magic开关总览1.2.2 Line Magic 全局1.2.3 Cell Magic 当前cell1.3 …...

ISO体系认证全方位解析让!

ISO体系认证全方位解析让! 常常有人问小编, 某某体系是什么意思? 某某证书的有效期是多久? 新版标准的转换要求有哪些? 小编尽量一一解答, 但难免会错过部分朋友的问题。 为了更全面地解决大家关于认证的疑…...

真要被00后职场整顿了?老员工纷纷表示真的干不过.......

最近聊到软件测试的行业内卷,越来越多的转行和大学生进入测试行业。想要获得更好的待遇和机会,不断提升自己的技能栈成了测试老人迫在眉睫的问题。 不论是面试哪个级别的测试工程师,面试官都会问一句“会编程吗?有没有自动化测试…...

NDK FFmpeg音视频播放器二

NDK前期基础知识终于学完了,现在开始进入项目实战学习,通过FFmpeg实现一个简单的音视频播放器。本文主要内容如下:阻塞式队列SafeQueue。音视频BaseChannel基础通道。音视频压缩包加入队列。视频解码与播放。ANativeWindow渲染用到的ffmpeg、…...

Linux之进程信号

目录 一、生活中的信号 背景知识 生活中有没有信号的场景呢? 是不是只有这些场景真正的放在我面前的时候,我才知道怎么做呢? 进程在没有收到信号的时候,进程知道不知道应该如何识别哪一个是信号?以及如何处理它&a…...

AI绘画关键词网站推荐 :轻松获取百万个提示词!完全免费

一、lexica.art 该网站拥有数百万Stable Diffusion案例的文字描述和图片,可以为大家提供足够的创作灵感。 使用上也很简单,只要在搜索框输入简单的关键词或上传图片,就能为你提供大量风格不同的照片。点击照片就能看到完整的AI关键词&#…...

Java-Collections and Lambda

Java SE API know how 集合API 根据算法访选择合适集合 linkedlist不适合搜索 随机访问数据用hashmap 数据保持有序使用treemap 通过索引访问使用数组集合 同步和非同步 访问性能统计 与简单的非同步访问相比,使用任何数据保护技术都会有较小的损失 设置集合…...

KDGX-A光缆故障断点检测仪

一、产品概述 KDGX-A光纤寻障仪是武汉凯迪正大为光纤网络领域施工、测试、维护所设计的一款测试仪表。可实现对光纤链路状态和故障的快速分析,适用于室外维护作业,是现场光纤网络测试与维护中替代OTDR的经济型解决方案。 二、主要特点 1)一键式光纤链路…...

【刷题之路Ⅱ】牛客 NC107 寻找峰值

【刷题之路Ⅱ】牛客 NC107 寻找峰值一、题目描述二、解题1、方法1——直接遍历1.1、思路分析1.2、代码实现2、方法2——投机取巧的求最大值2.1、思路分析2.2、代码实现3、方法3——二分法3.1、思路分析3.2、代码实现一、题目描述 原题连接: NC107 寻找峰值 题目描…...

智能灯泡一Homekit智能家居系列

传统的灯泡是通过手动打开和关闭开关来工作。有时,它们可以通过声控、触控、红外等方式进行控制,或者带有调光开关,让用户调暗或调亮灯光。 智能灯泡内置有芯片和通信模块,可与手机、家庭智能助手、或其他智能硬件进行通信&#…...

外包离职,历时学习416天,成功上岸百度,分享成长过程~

前言: 没有绝对的天才,只有持续不断的付出。对于我们每一个平凡人来说,改变命运只能依靠努力幸运,但如果你不够幸运,那就只能拉高努力的占比。 2020年7月,我有幸成为了百度的一名Java后端开发&#xff0c…...

利用客户支持建立忠诚度和竞争优势

客户支持可以极大地改变您的业务;最细微、最微妙的差异都会使拥有一次性客户和拥有终身客户之间产生差异。在这篇博文中,我们将揭示客户对企业的忠诚度的三种核心类型,以及如何利用强大的客户支持工具和原则来提高理想的忠诚度并获得决定性的竞争优势。一…...

看他人代码小总结

针对几个功能类似的函数: 1.需要经常调试则定义一个参数比如is_debug来选择是否在调试,定义一些参数专门用于调试用,不用每次都修改这些参数,只需要修改is_debug这个参数; 2.把其中的变量(常量)单独拎出来放到一个文件…...

cudaMemGetInfo()函数cudaDeviceGetAttribute()函数来检查设备上的可用内存

使用CUDA Runtime API中的cudaMemGetInfo()函数来检查设备上的可用内存。该函数将返回当前可用于分配的总设备内存大小和当前可用于分配的最大单个内存块大小。 示例代码,演示了如何在分配内存之前和之后调用cudaMemGetInfo()函数来检查可用内存 size_t free_byte…...

【基础阶段】01中华人民共和国网络安全法

文章目录1 网络安全行业介绍2 什么是黑客和白帽子3 网络安全课程整体介绍4 网络安全的分类5 常见的网站攻击方式6 安全常见术语介绍7 《网络安全法》制定背景和核心内容8 《全国人大常委会关于维护互联网安全的决定》9《中华人民共和国计算机信息系统安全保护条例》10 《中华人…...

隐私计算领域大咖推荐,这些国内外导师值得关注

开放隐私计算 经过近一个月的信息收集,研习社已经整理了多位国内外研究隐私计算的导师资料。邻近考研复试,研习社希望小伙伴们能够通过本文整理的信息,选择自己心仪的老师,在研究生的路途上一帆风顺!1. 国内隐私计算导…...

009 uni-app之vue、vuex

vue.js 视频教程 vue3.js 中文官网 vue.js 视频教程 vue语法:https://uniapp.dcloud.net.cn/tutorial/vue-vuex.html vue2迁移到 vue3:https://uniapp.dcloud.net.cn/tutorial/migration-to-vue3.html Vuex Vuex 是一个专为 Vue.js 应用程序开发的…...

Linux防火墙——SNAT、DNAT

目录 NAT 一、SNAT策略及作用 1、概述 SNAT应用环境 SNAT原理 SNAT转换前提条件 1、临时打开 2、永久打开 3、SNAT转换1:固定的公网IP地址 4、SNAT转换2:非固定的公网IP地址(共享动态IP地址) 二、SNAT实验 配置web服务…...

递归理解三:深度、广度优先搜索,n叉树遍历,n并列递归理解与转非递归

参考资料: DFS 参考文章BFS 参考文章DFS 参考视频二叉树遍历规律递归原理源码N叉树规律总结: 由前面二叉树的遍历规律和递归的基本原理,我们可以看到,二叉树遍历口诀和二叉树递推公式有着紧密的联系 前序遍历:F(x…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...