031、动手实验:线上系统部署如果采用G1垃圾回收器,应该如何设置参数?

本文是个人内容总结,详细内容扫描二维码

1、前文回顾

1、G1中有新 、老、大三种Region

2、新生代回收条件:新生代Eden区满的时候

3、新生代GC仍然采用复制算法

4、控制停顿时间,对Region进行挑选回收

5、进入老年的条件:

(1)熬过了一定次数的GC

(2)动态年龄判定规则

(3)存活对象在Survivor放不下

2、什么时候触发新生代+老年代的混合垃圾回收?

-XX:InitiatingHeapOccupancyPercent,默认值是45%,表示如果老年代占据了堆内存的45%的Region的时候,触发混合回收

??问题:默认老年代占40%,而混合回收的条件是‘老年代占堆的45%’,也就是说默认情况下永远不会触发混合回收?

答:没说老年代默认是40%,新生代不足60%的时候,老年代会到达45%的。DS:默认设置下,老年代并不是1-60%=40%,而应该是堆内存的40%到95%(1-5%=95%)

3、G1垃圾回收的过程

老年代:

初始标记 - STW,标记一下GC  Roots直接能引用的对象,很快

并发标记 - 和应用并行,进行GC Roots追踪存活对象,并记录新建和失去引用对象

最终标记 - STW,根据并发标记阶段的结果,最终标记垃圾对象

混合回收:

1、预估:这个阶段计算老年代中每个Region中的存活对象数量,存活对象的占比,垃圾回收的预期性能和效率

2、STW回收:选择性价比最高的Region进行回收,这个阶段会为了降低对应用的影响, 将回收操作默认分成了8次(-XX:G1MixedGCCountTarget控制),即MaxGCPauseMills = 8次回收时间之和

3、细分8次,5%停止:默认情况下,有可能回收次数不会达到8次,因为回收过程中,回收的Region数量到达了堆空间的5%(-XX:G1HeapWastePercent控制)就会停止回收。意思是:回收空间应该够用了,停下来让应用程序去执行吧。

??文中没有提到什么时候进行老年代单独GC,是不是可以认为和CMS一样,每次MajorGC都会伴随着一次MinorGC,在G1里就是MixedGC?

答:对的,可以这么认为。

??文中提到混合回收阶段,会对老年代进行计算和评估,那么什么时候对新生代空间中对象和大对象Region的计算和评估?

答:就在混合回收阶段的过程中,几次标记之后就会计算

4、G1垃圾回收器的一些参数

-XX:G1MixedGCLiveThresholdPercent 必须是存活对象低于85%的Region才可以进行回收,回收存活大于85%的复制成本很高。

5、回收失败时的Full GC

新/老代进行回收采用的都是复制算法,如果空闲的Region不够用,则STW,然后采用单线程进行标记、清理和压缩整理,速度极其慢

??回收失败时进行FullGC ,此时回收时间受MaxGCPauseMills次数约束么,什么时候会结束?

答:不受影响,务必回收完毕再说

6、本文总结

触发MixedGC条件:老年代占堆的45%;

G1的GC过程:

老年代GC:

初始标记STW,并发标记,最终标记

MixedGC:

预估;细分8次STW回收;回收到堆的5%停止

原文地址:https://www.cnblogs.com/csldm/p/11294644.html

时间: 2024-08-29 11:11:59

031、动手实验:线上系统部署如果采用G1垃圾回收器,应该如何设置参数?的相关文章

Netty简单应用与线上服务器部署_netty视频

Netty简单应用与线上服务器部署 课程学习地址:http://www.xuetuwuyou.com/course/198 课程出自学途无忧网:http://www.xuetuwuyou.com 一.开发环境 4.1.11.Final   jdk1.8 maven 3.2 Spring 4.3.9 二.适合人群 ①想深入学习java ClassLoader ②想在线上linux服务器上运行netty或Springboot服务 三.课程目标 ①掌控ClassLoader ②学会编写shell脚本

rsync实现负载均衡集群文件同步,搭建线上测试部署环境

闲来无事,搭建一个负载均衡集群,至于负载均衡集群搭建过程,找时间写下.这次主要写集群之间的文件同步,以及线上测试环境的搭建. 笔者看过很多公司都没有线上测试环境,真是崩溃了,不造怎么确保线上线下环境一致的. 笔者此次使用三台服务器: 192.168.138.3   web服务器 192.168.138.4   web服务器 192.168.138.10  web服务器+线上测试环境+源站 其中3 4 服务器作为集群中的web服务器,对外开放,是负载均衡集群的部分. 其中10 服务器不对外开放,代

Node.js线上服务器部署与发布

第1章 课程预热对整个部署思路进行全流程介绍,通过 5 个不同类型项目,来演示从本地的仓库到最终线上稳定运行的整个项目部署发布流程,来帮助始终编程在一线的前端或者后端工程师,甚至是有 Coding 能力的产品经理,从操作流程和架构形态上,掌握从零开始的项目上线环节,掌握这关键一步,跨过去前端到后端,本地到线上,开发到生产...1-1 为什么是全栈最后一公里1-2 搭建线上生产环境需要做什么 第2章 待部署的 5 个本地 Nodejs 项目分别介绍五个技术架构和产品形态的项目背景,一个 Nodej

Docker + node(koa) + nginx + mysql 线上环境部署

在上一篇 Docker + node(koa) + nginx + mysql 开发环境搭建,我们进行了本地开发环境搭建 现在我们就来开始线上环境部署 如果本地环境搭建没有什么问题,那么线上部署的配置也就很简单了 我所使用的环境,Linux Mint,命令有不同可以适当更改 目录结构 - compose 新建,线上环境配置 - data - conf - node_modules - static - docker-compose.yml - docker-compose-prod.yml 新建

Nodejs线上日志部署

Nodejs 被越来越多的使用到线上系统中,但线上系统没有日志怎么行呢. 一.forever记录日志 我的线上系统使用forever来启动服务,最开始就直接使用了forever来记录 forever start -a -l ./logs/forever.log -a 表示追加日志文件      -l 指定日志文件 -s 忽略console.log输出的日志记录(使用log4j时要用这个) 最开始还挺好的,所有日志都能记录下来,但是既然是线上环境,日志比较多,跑着跑着就出问题了. forever.

036、糟糕!运行着的线上系统突然卡死无法访问,万恶的JVM GC!

本文是个人学习<从 0 开始带你成为JVM实战高手>内容总结,详细内容扫描二维码 1.前文回顾 前5周分析了JVM核心原理.出现GC的问题情形. 2.基于JVM运行的系统最怕什么? STW 造成的卡顿问题 3.年轻代gc到底多久一次对系统影响不大? 多久一次需要根据业务来定.年轻代gc对系统影响大不大?相对于FullGC,对系统影响是不大的 4.什么时候新生代gc对系统影响很大? 系统部署部署在大内存机器上,给你的应用分配了几十个G,同时负载很高情况下(比如每秒几万请求),这时积压的请求多,大

(转) 线上环境部署MongoDB的官方建议

本文主要内容来自MongoDB官方文档http://docs.mongodb.org/manual/administration/production-notes/.并结合了实际工作情况进行分享. 1)软件包的选择 确保使用最新的稳定版本.目前我们线上使用的版本是2.4.6.MongoDB软件包下载页面http://www.mongodb.org/downloads. 确保线上环境总是使用64位版本.32位版本只能用于测试和开发使用,因为32位版本最大只能存储2GB的数据.启动MongoDB的时

Node.js项目的线上服务器部署与发布

课程目录:第1章 课程预热对整个部署思路进行全流程介绍,通过 5 个不同类型项目,来演示从本地的仓库到最终线上稳定运行的整个项目部署发布流程,来帮助始终编程在一线的前端或者后端工程师,甚至是有 Coding 能力的产品经理,从操作流程和架构形态上,掌握从零开始的项目上线环节,掌握这关键一步,跨过去前端到后端,本地到线上,开发到生产...第2章 待部署的 5 个本地 Nodejs 项目分别介绍五个技术架构和产品形态的项目背景,一个 Nodejs 静态网站,普通的带数据库电影网站,手机 App 场景

线上系统架构设计 之 【数据库篇-主主从】

双主一从架构,从服务器在本地,用于备份和研发测试.两台线上服务器进行数据库相互同步,保证数据一致性,采用xtrabackup备份数据库+脚本每天1点异地备份到从服务器. 一.对线上的一台主服务器数据进行备份,并恢复到另外两台服务器上. innobackupex --defaults-file=/wqdata/mysql/my.cnf --user=bkuser --password='123456' /wqdata/mofidbbak/fullbackup/    备份 scp -P 8022