【JVM】—G1 GC日志详解

G1 GC日志详解

⭐⭐⭐⭐⭐⭐
Github主页👉https://github.com/A-BigTree
笔记链接👉https://github.com/A-BigTree/Code_Learning
⭐⭐⭐⭐⭐⭐

如果可以,麻烦各位看官顺手点个star~😊

文章目录

  • G1 GC日志详解
    • 1 G1 GC周期
    • 2 G1日志开启与设置
    • 3 Young GC日志
    • 4 Mixed GC
    • 5 Full GC


关于G1回收器的前置知识点:

  • 【JVM】—深入理解G1回收器——概念详解
  • 【JVM】—深入理解G1回收器—回收过程详解
  • 【JVM】—G1中的Young GC、Mixed GC、Full GC详解

1 G1 GC周期

在这里插入图片描述

G1 有两个阶段,它会在这两个阶段往返,分别是 Young-only,Space Reclamation.

  • Young-only阶段包含一系列逐渐填满老年代Regin的 GC
  • Space Reclamation 阶段G1会递进地回收老年代Regin的空间,同时也处理新生代Region

上图来自 oracle 上对GC周期的描述,实心圆都表示一次 GC 停顿

  • 蓝色:Young GC的停顿
  • 黄色:标记过程的停顿
  • 红色:Mixed GC停顿

在几次GC后,老年代Regin的对象占有比超过了 InitiatingHeapOccupancyPercent,GC就会进入并发标记准备(concurrent mark)。

2 G1日志开启与设置

在java程序运行时,加入运行参数来开启GC日志,不同的参数日志打印的精细程度也不同

  • -verbosegc (等同于 -XX:+PrintGC):打印细节(最不细节)GC日志

示例:

[GC pause (G1 Humongous Allocation) (young) (initial-mark) 24M- >21M(64M), 0.2349730 secs]
[GC pause (G1 Evacuation Pause) (mixed) 66M->21M(236M), 0.1625268 secs]  
  • -XX:+PrintGCDetails:打印比较细节的CG日志
    • 显示每个阶段的平均时间、最小时间、和最大时间;
    • 根扫描、RSet 更新(带有已处理的缓冲区信息)、RSet 扫描、对象复制、终止(带有尝试次数);
    • 还显示其他执行时间,例如选择 CSet、引用处理、引用排队和释放 CSet 所花费的时间;
    • 显示Eden区、幸存区和的整个堆的占用情况;

示例:

[Ext Root Scanning (ms): Avg: 1.7 Min: 0.0 Max: 3.7 Diff: 3.7]
[Eden: 818M(818M)->0B(714M) Survivors: 0B->104M Heap: 836M(4096M)->409M(4096M)]
  • -XX:+UnlockExperimentalVMOptions -XX:G1LogLevel=finest :打印最细节的CG日志
    • 在上面配置的基础上多了线程显示

示例:

[Ext Root Scanning (ms): 2.1 2.4 2.0 0.0
           Avg: 1.6 Min: 0.0 Max: 2.4 Diff: 2.3]
       [Update RS (ms):  0.4  0.2  0.4  0.0
           Avg: 0.2 Min: 0.0 Max: 0.4 Diff: 0.4]
           [Processed Buffers : 5 1 10 0
           Sum: 16, Avg: 4, Min: 0, Max: 10, Diff: 10]

还有其他参数可以控制打印日志时间和其他显示项目。

3 Young GC日志

# 开始Young GC
[gc,start     ] GC(78) Pause Young (Normal) (G1 Evacuation Pause)
[gc,task      ] GC(78) Using 10 workers of 10 for evacuation
[gc,phases    ] GC(78)   Pre Evacuate Collection Set: 3.2ms
[gc,phases    ] GC(78)   Evacuate Collection Set: 28.8ms
[gc,phases    ] GC(78)   Post Evacuate Collection Set: 1.8ms
[gc,phases    ] GC(78)   Other: 1.1ms
[gc,heap      ] GC(78) Eden regions: 538->0(871)
[gc,heap      ] GC(78) Survivor regions: 69->33(76)
# 老年代被分配
[gc,heap      ] GC(78) Old regions: 1041->1077
[gc,heap      ] GC(78) Humongous regions: 3->1
[gc,metaspace ] GC(78) Metaspace: 71777K->71777K(1114112K)
[gc           ] GC(78) Pause Young (Normal) (G1 Evacuation Pause) 3300M->2220M(6144M) 34.907ms
[gc,cpu       ] GC(78) User=0.24s Sys=0.05s Real=0.04s

4 Mixed GC

# Young GC(并发标记开始,1.初始标记)
[gc,start     ] GC(79) Pause Young (Concurrent Start) (G1 Humongous Allocation)
[gc,task      ] GC(79) Using 10 workers of 10 for evacuation
[gc,phases    ] GC(79)   Pre Evacuate Collection Set: 0.2ms
[gc,phases    ] GC(79)   Evacuate Collection Set: 22.3ms
[gc,phases    ] GC(79)   Post Evacuate Collection Set: 0.9ms
[gc,phases    ] GC(79)   Other: 1.8ms
[gc,heap      ] GC(79) Eden regions: 569->0(656)
[gc,heap      ] GC(79) Survivor regions: 33->55(113)
[gc,heap      ] GC(79) Old regions: 1077->1077
[gc,heap      ] GC(79) Humongous regions: 1->1
[gc,metaspace ] GC(79) Metaspace: 71780K->71780K(1114112K)
[gc           ] GC(79) Pause Young (Concurrent Start) (G1 Humongous Allocation) 3357M->2264M(6144M) 25.305ms
[gc,cpu       ] GC(79) User=0.21s Sys=0.00s Real=0.03s
# 2.开始并发标记
[gc           ] GC(80) Concurrent Cycle
[gc,marking   ] GC(80) Concurrent Clear Claimed Marks
[gc,marking   ] GC(80) Concurrent Clear Claimed Marks 0.147ms
[gc,marking   ] GC(80) Concurrent Scan Root Regions
[gc,marking   ] GC(80) Concurrent Scan Root Regions 16.125ms
[gc,marking   ] GC(80) Concurrent Mark (373.358s)
[gc,marking   ] GC(80) Concurrent Mark From Roots
[gc,task      ] GC(80) Using 4 workers of 4 for marking
[gc,marking   ] GC(80) Concurrent Mark From Roots 57.029ms
[gc,marking   ] GC(80) Concurrent Preclean
[gc,marking   ] GC(80) Concurrent Preclean 0.454ms
[gc,marking   ] GC(80) Concurrent Mark (373.358s, 373.415s) 57.548ms
# 3.SWT 最终标记阶段
[gc,start     ] GC(80) Pause Remark
[gc,stringtable] GC(80) Cleaned string and symbol table, strings: 36361 processed, 315 removed, symbols: 192117 processed, 500 removed
[gc            ] GC(80) Pause Remark 2326M->956M(6144M) 14.454ms
[gc,cpu        ] GC(80) User=0.08s Sys=0.03s Real=0.02s
# 并发构建RSet
[gc,marking    ] GC(80) Concurrent Rebuild Remembered Sets
[gc,marking    ] GC(80) Concurrent Rebuild Remembered Sets 38.843ms
# 4.清楚整理
[gc,start      ] GC(80) Pause Cleanup
[gc            ] GC(80) Pause Cleanup 974M->974M(6144M) 0.660ms
[gc,cpu        ] GC(80) User=0.00s Sys=0.00s Real=0.00s
[gc,marking    ] GC(80) Concurrent Cleanup for Next Mark
[gc,marking    ] GC(80) Concurrent Cleanup for Next Mark 16.673ms
[gc            ] GC(80) Concurrent Cycle 146.748ms
# Mixed GC
[gc,start      ] GC(81) Pause Young (Mixed) (G1 Evacuation Pause)
[gc,task       ] GC(81) Using 10 workers of 10 for evacuation
[gc,mmu        ] GC(81) MMU target violated: 61.0ms (60.0ms/61.0ms)
[gc,phases     ] GC(81)   Pre Evacuate Collection Set: 0.1ms
[gc,phases     ] GC(81)   Evacuate Collection Set: 76.8ms
[gc,phases     ] GC(81)   Post Evacuate Collection Set: 0.9ms
[gc,phases     ] GC(81)   Other: 1.1ms
[gc,heap       ] GC(81) Eden regions: 211->0(136)
[gc,heap       ] GC(81) Survivor regions: 55->17(34)
# Mixed GC 老年代被回收
[gc,heap       ] GC(81) Old regions: 392->312
[gc,heap       ] GC(81) Humongous regions: 3->1
[gc,metaspace  ] GC(81) Metaspace: 71780K->71780K(1114112K)
[gc            ] GC(81) Pause Young (Mixed) (G1 Evacuation Pause) 1320M->919M(6144M) 78.857ms
[gc,cpu        ] GC(81) User=0.41s Sys=0.37s Real=0.08s
  1. GC(79):因为(G1 Humongous Allocation)巨大对象分配开始Young GC同时并发标记开始;
  2. GC(80):GC(79)已完成第一阶段的初始标记,开始并发标记、最终标记、清楚整理;
  3. GC(81):GC(80)已获取新生代和老年代标记信息,开始进行Mixed GC,新生代和老年代Regin同时被回收整理

5 Full GC

下面的日志正好是博主在工作时排查Full GC问题时真实遇到到,生产环境日志比较复杂,这里稍微删减标注了供大家参考~

# 1.Mixed GC尝试分配巨大对象
[gc,start      ] GC(1362) Pause Young (Mixed) (G1 Humongous Allocation)
[gc,task       ] GC(1362) Using 8 workers of 8 for evacuation
[gc,phases     ] GC(1362)   Pre Evacuate Collection Set: 0.3ms
[gc,phases     ] GC(1362)   Evacuate Collection Set: 23.9ms
[gc,phases     ] GC(1362)   Post Evacuate Collection Set: 19.6ms
[gc,phases     ] GC(1362)   Other: 4.3ms
[gc,heap       ] GC(1362) Eden regions: 3->0(755)
[gc,heap       ] GC(1362) Survivor regions: 2->2(74)
[gc,heap       ] GC(1362) Old regions: 1617->1443
[gc,heap       ] GC(1362) Humongous regions: 144->133
[gc,metaspace  ] GC(1362) Metaspace: 419538K->419538K(1300480K)
[gc            ] GC(1362) Pause Young (Mixed) (G1 Humongous Allocation) 7054M->6305M(9832M) 47.441ms
[gc,cpu        ] GC(1362) User=0.27s Sys=0.01s Real=0.05s
# 2.Mixed GC后空间无法满足,Young GC(并发标记)
[gc,start      ] GC(1363) Pause Young (Concurrent Start) (G1 Humongous Allocation)
[gc,task       ] GC(1363) Using 8 workers of 8 for evacuation
[gc,phases     ] GC(1363)   Pre Evacuate Collection Set: 0.6ms
[gc,phases     ] GC(1363)   Evacuate Collection Set: 21.2ms
[gc,phases     ] GC(1363)   Post Evacuate Collection Set: 19.5ms
[gc,phases     ] GC(1363)   Other: 3.1ms
[gc,heap       ] GC(1363) Eden regions: 5->0(735)
[gc,heap       ] GC(1363) Survivor regions: 2->2(95)
[gc,heap       ] GC(1363) Old regions: 1443->1443
[gc,heap       ] GC(1363) Humongous regions: 144->138
[gc,metaspace  ] GC(1363) Metaspace: 419538K->419538K(1300480K)
[gc            ] GC(1363) Pause Young (Concurrent Start) (G1 Humongous Allocation) 6365M->6325M(9832M) 43.719ms
[gc,cpu        ] GC(1363) User=0.25s Sys=0.00s Real=0.05s
# 3.开始并发标记
[gc            ] GC(1364) Concurrent Cycle
[gc,marking    ] GC(1364) Concurrent Clear Claimed Marks
[gc,marking    ] GC(1364) Concurrent Clear Claimed Marks 0.509ms
[gc,marking    ] GC(1364) Concurrent Scan Root Regions
[gc,marking    ] GC(1364) Concurrent Scan Root Regions 5.111ms
[gc,marking    ] GC(1364) Concurrent Mark From Roots
[gc,task       ] GC(1364) Using 2 workers of 2 for marking
# 4.第一次Young GC仍然空间不够,为在年轻代分配巨大对象,继续引发Young GC
[gc,start      ] GC(1365) Pause Young (Normal) (G1 Humongous Allocation)
[gc,task       ] GC(1365) Using 8 workers of 8 for evacuation
[gc,phases     ] GC(1365)   Pre Evacuate Collection Set: 3.0ms
[gc,phases     ] GC(1365)   Evacuate Collection Set: 9.0ms
[gc,phases     ] GC(1365)   Post Evacuate Collection Set: 17.9ms
[gc,phases     ] GC(1365)   Other: 2.3ms
# 回收无效果
[gc,heap       ] GC(1365) Eden regions: 0->0(735)
[gc,heap       ] GC(1365) Survivor regions: 2->2(93)
[gc,heap       ] GC(1365) Old regions: 1443->1443
[gc,heap       ] GC(1365) Humongous regions: 138->138
[gc,metaspace  ] GC(1365) Metaspace: 419538K->419538K(1300480K)
[gc            ] GC(1365) Pause Young (Normal) (G1 Humongous Allocation) 6325M->6325M(9832M) 28.565ms
[gc,cpu        ] GC(1365) User=0.18s Sys=0.00s Real=0.02s
# 5.开始Full GC
[gc,task       ] GC(1366) Using 8 workers of 8 for full compaction
[gc,start      ] GC(1366) Pause Full (G1 Humongous Allocation)
[gc,phases,start] GC(1366) Phase 1: Mark live objects
[gc,stringtable ] GC(1366) Cleaned string and symbol table, strings: 141014 processed, 117 removed, symbols: 838192 processed, 0 removed
[gc,phases      ] GC(1366) Phase 1: Mark live objects 246.403ms
[gc,phases,start] GC(1366) Phase 2: Prepare for compaction
[gc,phases      ] GC(1366) Phase 2: Prepare for compaction 56.600ms
[gc,phases,start] GC(1366) Phase 3: Adjust pointers
[gc,phases      ] GC(1366) Phase 3: Adjust pointers 148.139ms
[gc,phases,start] GC(1366) Phase 4: Compact heap
[gc,phases      ] GC(1366) Phase 4: Compact heap 138.928ms
[gc,heap        ] GC(1366) Eden regions: 0->0(450)
[gc,heap        ] GC(1366) Survivor regions: 2->0(93)
# 效果显著
[gc,heap        ] GC(1366) Old regions: 1443->320
[gc,heap        ] GC(1366) Humongous regions: 138->130
[gc,metaspace   ] GC(1366) Metaspace: 419538K->419538K(1300480K)
[gc             ] GC(1366) Pause Full (G1 Humongous Allocation) 6325M->1769M(6000M) 744.919ms
[gc,cpu         ] GC(1366) User=4.18s Sys=0.19s Real=0.75s
# 6. Full GC后巨大对象已分配,停止并发标记
[gc,marking     ] GC(1364) Concurrent Mark From Roots 777.174ms
[gc,marking     ] GC(1364) Concurrent Mark Abort
[gc             ] GC(1364) Concurrent Cycle 782.954ms

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/929122.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ADBC 查询语法介绍:EXECUTE_QUERY

可使用 CL_SQL_STATEMENT 类的以下实例方法执行查询: EXECUTE_QUERY 该方法有一个字符串类型的强制输入参数 STATEMENT,必须向其传递语法正确的 SELECT 语句。与 DML 语句一样,SET_PARAM 方法可用于将 ABAP 数据对象绑定到占位符。 查询结…

线程信号量 Linux环境 C语言实现

既可以解决多个同类共享资源的互斥问题&#xff0c;也可以解决简易的同步问题 头文件&#xff1a;#include <semaphore.h> 类型&#xff1a;sem_t 初始化&#xff1a;int sem_init(sem_t *sem, int pshared, unsigned int value); //程序中第一次对指定信号量调用p、v操…

springboot+mybatis对接使用postgresql中PostGIS地图坐标扩展类型字段

方案一&#xff08;完全集成和自动解析&#xff09;&#xff1a; <dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId></dependency> 使用 org.postgresql.geometric包下的 PGpoint 类来接收数据库中POINT…

21个Python脚本自动执行日常任务(1)

引言 作为编程领域摸爬滚打超过十年的老手&#xff0c;我深刻体会到&#xff0c;自动化那些重复性工作能大大节省我们的时间和精力。 Python以其简洁的语法和功能强大的库支持&#xff0c;成为了编写自动化脚本的首选语言。无论你是专业的程序员&#xff0c;还是希望简化日常工…

【Python网络爬虫笔记】6- 网络爬虫中的Requests库

一、概述 Requests 是一个用 Python 语言编写的、简洁且功能强大的 HTTP 库。它允许开发者方便地发送各种 HTTP 请求&#xff0c;如 GET、POST、PUT、DELETE 等&#xff0c;并且可以轻松地处理请求的响应。这个库在 Python 生态系统中被广泛使用&#xff0c;无论是简单的网页数…

网站维护记录

服务器重启&#xff0c;网站打不开&#xff1a;chown -R manager:manager /run/php-fpm/www.sock wordpress升级需设置ftp&#xff1a; // 设置权限0777 //define("FS_METHOD", "direct"); //define("FS_CHMOD_DIR", 0777); //define("…

利用Python爬虫精准获得Amazon商品详情数据

在大数据时代&#xff0c;精准的数据获取是电商分析、市场研究和竞争情报收集的关键。Amazon作为全球最大的电商平台之一&#xff0c;其商品详情页面蕴含着丰富的信息。本文将详细介绍如何使用Python爬虫技术精准获取Amazon商品详情数据&#xff0c;并提供实用的代码示例。 1. …

AIGC开始进军网络微短剧!AI会成为影视赛道的新风口吗?

“部分AI元素微短剧更像是一系列炫丽的幻灯片堆砌&#xff0c;技术驱动下的华丽和动感&#xff0c;难以掩盖其作品在内容深度和人文关怀上的缺失&#xff0c;AI微短剧警惕沦为空洞的视觉糖衣。”日前&#xff0c;有专家一针见血地指出。 当下&#xff0c;影视行业正经历着一场…

Kruskal 算法在特定边权重条件下的性能分析及其实现

引言 Kruskal 算法是一种用于求解最小生成树(Minimum Spanning Tree, MST)的经典算法。它通过逐步添加权重最小的边来构建最小生成树,同时确保不会形成环路。在本文中,我们将探讨在特定边权重条件下 Kruskal 算法的性能,并分别给出伪代码和 C 语言实现。特别是,我们将分…

MySQL初学之旅(5)详解查询

目录 1.前言 2.正文 2.1聚合查询 2.1.1count() 2.1.2sum() 2.1.3avg() 2.1.4max() 2.1.5min() 2.1.6总结 2.2分组查询 2.2.1group by字句 2.2.2having字句 2.2.3group by与having的关系 2.3联合查询 2.3.1笛卡尔积 2.3.2内连接 2.3.3外连接 2.3.4自连接 2.3…

【WPS】【EXCEL】将单元格中字符按照分隔符拆分按行填充到其他单元格

问题&#xff1a;实现如下图的效果 解答&#xff1a; 一、函数 IFERROR(TRIM(MID(SUBSTITUTE($A$2,",",REPT(" ",LEN($A$2))),(ROW(A1)-1)*LEN($A$2)1,LEN($A$2))),"") 二、在单元格C2中填写如下函数 三、全选要填充的单元格并且按CTRLD 函数…

WPF+LibVLC开发播放器-进度条显示和拖动控制

进度条显示和拖动控制 视频教程界面上代码实现进度条显示进度进度条拖动视频进度 效果 视频教程 WPFLibVLC开发播放器-进度条控制 界面上 界面上线增加一个Slider控件&#xff0c;当做播放进度条 <SliderName"PlaySlider"Grid.Row"1"Width"800&qu…

可供参考的GitHub国内镜像

在配置了本地hosts文件和魔法后仍存在无法访问的问题 针对如上问题&#xff0c;可以使用国内的镜像地址做替换 例如: https://github.com/bubbliiiing/detr-pytorch改成 https://hub.nuaa.cf/bubbliiiing/detr-pytorch推荐使用的镜像 https://hub.yzuu.cf/ https://hub.nua…

Docker--Docker Registry(镜像仓库)

什么是Docker Registry&#xff1f; 镜像仓库&#xff08;Docker Registry&#xff09;是Docker生态系统中用于存储、管理和分发Docker镜像的关键组件。 镜像仓库主要负责存储Docker镜像&#xff0c;这些镜像包含了应用程序及其相关的依赖项和配置&#xff0c;是构建和运行Doc…

TDesign:Button按钮

Button 按钮 文档地址 view TDButton(text: 确认支付, // 按钮文案isBlock: true, // 是否时Blockwidth:345.w, // 自定义宽度height: 43.w, // 自定义高度padding: EdgeInsets.all(0), // 默认的paddingmargin: EdgeInsets.all(0), // 默认的margin// 文案左侧图标&#xff0c…

DR.KNOWS:医疗图谱UMLS + 图神经网络 + LLM 模拟医生的诊断推理过程, 从症状出发找到可能的诊断结果

DR.KNOWS&#xff1a;医疗图谱UMLS 图神经网络 LLM 模拟医生的诊断推理过程, 从症状出发找到可能的诊断结果 理解要点解法拆解全流程分析图神经网络的训练论文大纲核心模式真实应用中&#xff0c;为什么说俩跳推理过于简化&#xff1f; 论文&#xff1a;Leveraging A Medical…

【Maven系列】深入解析 Maven 镜像配置

前言 Maven 是一个流行的 Java 项目管理和构建工具&#xff0c;可以自动化构建项目、管理依赖、生成报告等。在Maven构建项目时&#xff0c;通常经常需要下载各种依赖。默认情况下&#xff0c;Maven 会从中央仓库下载这些依赖&#xff0c;但在某些情况下&#xff0c;这个过程可…

从智能合约到去中心化AI:Web3的技术蓝图

Web3正在成为互联网发展的重要方向&#xff0c;其核心理念是去中心化、用户主权和自治。随着区块链技术、智能合约以及人工智能&#xff08;AI&#xff09;等技术的发展&#xff0c;Web3不仅重新定义了数据存储和交易方式&#xff0c;还为更智能化、去中心化的数字生态系统铺平…

A1228 php+Mysql旅游供需平台的设计与实现 导游接单 旅游订单 旅游分享网站 thinkphp框架 源码 配置 文档 全套资料

旅游供需平台 1.项目描述2. 开发背景与意义3.项目功能4.界面展示5.源码获取 1.项目描述 随着社会经济的快速发展&#xff0c;生活水平的提高&#xff0c;人们对旅游的需求日益增强&#xff0c;因此&#xff0c;为给用户提供一个便利的查看导游信息&#xff0c;进行导游招募的平…

魔改版kali分享(新增50多种渗透工具)

网盘链接 我用夸克网盘分享了「Kali Linux 定制化魔改系统」&#xff0c;点击链接即可保存。打开「夸克APP」&#xff0c;无需下载在线播放视频&#xff0c;畅享原画5倍速&#xff0c;支持电视投屏。 链接&#xff1a;https://pan.quark.cn/s/dda56f7e3431 提取码&#xff1a;…