040、JVM实战总结:案例实战:每日百亿数据量的实时分析引擎,为啥频繁发生Full GC ?
1、上文案例再分析
2、一个日处理上亿数据的计算系统
MySQL数据库以及其他数据源里提取大量的数据加载到自己的JVM内存里来进行计算处理。
总负载:每分钟大概需要执行500次数据提取和计算的任务
机器配置:使用5台机器,每台机器是4核8G
每台机器负载: 100次/分钟 * 1w条/每次 =100w条/分钟 ,处理1w条数据需要10秒 ,每条数据在1KB
JVM配置:4G内存,新老都是1.5G,Eden:1.2G = 0.15 * 8 ,S1/S2 150M
??1w条数据处理需要10秒,100w条数据处理不是需要1000秒么,怎么是1分钟呢?
答:多线程处理
3、这个系统到底多块会塞满新生代?
总结:计算多久塞满新生代 = Eden区大小/进入Eden的速度 ,1.2G/(100w条/分钟*1KB)=1.2分钟
注意:这里是开启多线程进行处理的,并行度是100/6,即100次提取的数据可以在60秒处里完的,每个线程60秒可以处理6次数据,并行度就是100/6~=16.67 取16
第50秒结束处理 16*5次=80次 任务,占用800M ,数据接入的速度比较快,在不到60秒的时候把新生代赛满了,此时就有200M
4、触发Minor GC的时候会有多少对象进入老年代?
Eden区里有多少对象还是存活的,无法被垃圾回收呢?
假设80个任务执行结束,20个任务还在技术,20*(一个任务=1w条数据 = 10M)=200M,也就是200M存活,S区150M放不下200M存活对象
(垂直+三角形类型,直接进行YoungGC,YoungGC过程中发现S区放不下存活对象,直接把200M对象晋升到老年代)
DSM:新生代所有对象大小>老年代剩余空间前提下,触发老年代的GC有3种情形:1、垂直+三角 2、3两种是中5少横
5、系统运行多久,老年代大概就会填满?
假设每次进入200M到老年代,1.5G,7次YoungGC就1.4了,第八次YoungGC前判断空间担保会失败,也就是说第8分钟结束时进行FullGC
6、这个系统运行多久,老年代会触发1次Full GC?
第8分钟结束时进行FullGC
7、该案例应该如何进行JVM优化?
存在频繁进入老年代的短命对象,此时考虑增大Survivor,让短命对象不要进入老年代,尽量在新生代就被回收。
2GB分配给新生代,1GB留给老年代,默认情况下Survivor区200M,刚好放下。为了留有空余空余考虑调整一下SurvivorRatio为6,这样Survivor区就有250M了
8、如果该系统的工作负载再次扩大10倍呢?
扩大10倍,每秒新增100M,1.6G/100M 16秒左右Eden就满了,此时YoungGC,能回收的1G左右,600M左右直接进入老年代,1G的老年代,第二次就要OldGC了。一分钟要进行2-3次FullGC系统性能造成了巨大的影响,简直是可怕至极
9、使用大内存机器来优化上述场景
计算类的系统,也是非常的吃内存的,所以换成了每台机器都是16核32G的高配置机器。
Eden基本上空间会扩大10倍,比如有16GB,Survivor区2G,这样16G/100M 约两分多钟进行一次YoungGC,每次存活几百M,再次YoungGC时,存活的几百M又会被回收了。这样短命的对象不会进入老年代。完美解决频繁YoungGC和FullGC。
大内存是否都要换成G1呢?对响应时间不敏感的,不直接面向用户的系统,没有必要。
本文是《从 0 开始带你成为JVM实战高手》内容总结,版权问题,特此声明。详细内容:
购买成功后找我返现10元
040、JVM实战总结:案例实战:每日百亿数据量的实时分析引擎,为啥频繁发生Full GC ?相关推荐
- jvm性能调优实战 -33每日百亿数据量的实时分析引擎,如何定位和解决频繁Full GC问题
文章目录 Pre 运行程序用的示例JVM参数 Code 基于jstat分析程序运行的状态 对JVM性能进行优化 小结 Pre jvm性能调优实战 - 27亿级数据量的实时分析引擎,为啥频繁发生Full ...
- 054、JVM实战总结: 案例实战:每日百亿数据量的实时分析引擎,如何定位和解决频繁Full GC问题?
之前有位同学面试时的一个面试题:如何配置能让JVM不进行FullGC?大家仔细看完这篇文章应该就有答案了 1-7.回顾内容参照40讲 点击链接 8.JVM参数与程序 参数配置: -XX:NewSize ...
- 现身说法:实际业务出发分析百亿数据量下的多表查询优化
今天给大家带来的讨论主题是通过实战经验来对百亿数据量下的多表数据查询进行优化,俗话说的好,一切脱离业务的架构都是耍流氓,接下来我就整理一下今天早上微信群里石头哥给大家分享的百亿数据量多表查询架构以及优 ...
- Redis基本使用及百亿数据量中的使用技巧分享
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9941208.html 作者:大石头 时间:2018-11-10 晚上20:00 地点:钉钉群(组织代码B ...
- jvm性能调优实战 - 27亿级数据量的实时分析引擎,为啥频繁发生Full GC
文章目录 Pre 新生代多久会塞满 触发Minor GC的时候会有多少对象进入老年代? 系统运行多久,老年代大概就会填满? 系统运行多久,老年代会触发1次Full GC? 该案例应该如何进行JVM优化 ...
- 百亿数据量下,掌握这些Redis技巧你就能Hold全场
来源:https://0x9.me/aos9t 一.Redis封装架构讲解 实际上NewLife.Redis是一个完整的Redis协议功能的实现,但是Redis的核心功能并没有在这里面,而是在NewL ...
- 掌握这些 Redis 技巧,百亿数据量不在话下!
一.Redis封装架构讲解 实际上NewLife.Redis是一个完整的Redis协议功能的实现,但是Redis的核心功能并没有在这里面,而是在NewLife.Core里面. 这里可以打开看一下,Ne ...
- opencv2 取二进制数据_百亿数据量下,掌握这些Redis技巧你就能Hold全场
程序猿DD 一.Redis封装架构讲解 实际上NewLife.Redis是一个完整的Redis协议功能的实现,但是Redis的核心功能并没有在这里面,而是在NewLife.Core里面. 这里可以打开 ...
- mysql 百亿数据_从SQL Server到MySQL,近百亿数据量迁移实战
沪江成立于 2001 年,作为较早期的教育学习网站,当时技术选型范围并不大:Java 的版本是 1.2,C# 尚未诞生,MySQL 还没有被 Sun 收购,版本号是 3.23.工程师们选择了当时最合适 ...
最新文章
- Tomcat之the jre_home environment variable is not defined correctly this environment variable is need
- 静默安装oracle
- 维密求变,“自救”还是“挖坟”?
- 信息系统项目管理师题型及题数
- java 数据截断_java – 数据截断:第1行的列’标志’的数据太长
- php存储session更改,php如何修改SESSION的生存存储时间的实例代码_php实例
- some fragments
- 学python需要记笔记吗_开始学python,一些笔记
- 添加文件夹语音_微信语音导出方法大全,微信群语音转发只需3步
- Ubuntu下备份系统的方法
- C语言约瑟夫环(简单版)
- Windows 11 配置使用 Edge 浏览器的 IE 兼容模式(永久)
- 哥德巴赫猜想c#语言,哥德巴赫猜想 C#
- Metasploit Framework(3)Meterpreter
- 高德 infowindow 绑定点击事件_滴滴联合腾讯地图上线聚合打车,开战高德打车 subtitle...
- HackTheGame 游戏全攻略(各关攻略文章汇总)
- 咬肌边上有个滑动疙瘩_腮帮子有个滑动的疙瘩是怎么回事
- 前端基础之CSS复合选择器
- 如何解决Gridea部分主题不渲染Katex的问题
- 战略转型加速推进,中软国际2018年中期净利增长46.2%
热门文章
- WEB小知识学习集锦
- 客户和顾客是一个意思吗_履约保证金和投标保证金是一个意思吗?
- springboot 集成mybatis_SpringBoot快速集成Mybatis并轻松上手调试教程,请查收!
- linux运行库,Linux C 静态库 共享库 运行库
- 更新mysql软件_MySQL软件升级
- C. Molly's Chemicals
- 基于深度学习的信道估计(DL-CE)基础知识
- Struts项目中前端页面向后台页面传参中文出现乱码(Get请求)
- python中numpy函数fft_如何在PyTorch中正确使用Numpy的FFT函数?
- Oracle添加主键和唯一约束最佳实践