【JVM】—G1 GC日志详解

news2024/11/27 22:39:14

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

老牌Trans也放量灌水中?年刊文量1000+,网友分享3个月可录,0版面费!

【SciencePub学术】今天给大家推荐的是一本计算机领域的SCI—《IEEE TRANSACTIONS ON ELECTRON DEVICES》,IEEE-Trans系列,虽然常年只能位居2区,不过投稿难度相对较低,所以还是深受大家喜爱的。 期刊概况 IF:2.9 分…

【计算机网络 - 基础问题】每日 3 题(五十四)

✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…

Spring事务的七种传播行为

Spring事务的七种传播行为 1.事务的传播行为是什么?2.具体传播行为2.1 REQUIRED ,默认,存在事务则加入该事务,不存在则新建一个事务2.2 REQUIRES_NEW,每次新开启事务,新老事务相互独立2.3 NESTED&#xff0…

ArcGIS无插件加载(无偏移)在线天地图高清影像与街道地图指南

在地理信息系统(GIS)的应用中,加载高清影像与街道地图对于地图制图、影像查阅、空间数据分析等工作至关重要。天地图作为官方出品的地图服务,以其标准的数据、较快的影像更新速度等特点受到广泛欢迎。以下是如何在ArcGIS中无插件加…

创建项目模版

一 Vite创建Vue3项目 1.1.创建Vue3项目 1.1.1.运行创建项目命令 # 使用 npm npm create vitelatest 1.1.2、填写项目名称 1.1.3、选择前端框架 1.1.4、选择语法类型 1.1.5、按提示运行代码 1.1.6浏览器问 localhost:5173 预览 1.2项目结构 1.2.1vite.config.ts 1.2.2 pac…

【股票】——1-50篇,第一本

一、背景 偶然间在朋友圈看到了雪球花甲老头的公众号,里面的宏观观点和微观观点讲的都太好了;因为作者有那样的经历,所以才能写出来那样的内容;关于股市的,总共500篇,自己也计划系统性的看一看;…

MissingSemester-版本控制系统Git

title: Git的底层及基础使用 date: 2024-05-16 12:00:00 categories: MissingSemester tags: 版本控制系统Git 版本控制系统Git 什么是Git ​ 版本控制系统 (VCSs) 是一类用于追踪源代码(或其他文件、文件夹)改动的工具。顾名思义,这些工具…

2024年第九期 | CCF ODC《开源战略动态月报》

点击蓝字 关注我们 CCF Opensource Development Committee 导 读 2024年第九期CCF ODC《开源战略动态月报》共摘选33篇文章,分为8个版块:ODC专栏、开源政策、理论观点、产业动态、技术项目、开源组织与机构、开源报告通讯会议以及RISC-V专栏,…

Webserver(1)Linux开发环境搭建

目录 配置软件虚拟机中安装ubuntu安装ubuntu18的操作系统 安装VM tools安装XshellVscode远程连接到虚拟机 配置软件 VMwareVScodeg安装ubuntu 18.04.iso 或者镜像版本 XShellXFTP 虚拟机中安装ubuntu 安装ubuntu18的操作系统 开启虚拟机 选择中文简体 安装VM tools 打开v…

V2X介绍

文章目录 什么是V2XV2X的发展史早期的DSRC后起之秀C-V2XC-V2X 和DSRC 两者的对比 什么是V2X 所谓V2X,与流行的B2B、B2C如出一辙,意为vehicle to everything,即车对外界的信息交换。车联网通过整合全球定位系统(GPS)导…

Java基础-注解机制详解

文章目录 注解基础Java内置注解内置注解- Override内置注解 - Deprecated内置注解 - SuppressWarnings 元注解元注解 - Target元注解 - Retention & RetentionTarget元注解 - Documented元注解 - Inherited 注解与反射接口自定义注解 深入理解注解Java8提供了哪些新的注解&…

如何高效集成聚水潭数据至MySQL-技术案例解析

如何高效集成聚水潭数据至MySQL-技术案例解析 聚水潭数据集成到MySQL的技术案例分享 在本次技术案例中,我们将探讨如何通过轻易云数据集成平台,将聚水潭的店铺信息高效地集成到MySQL数据库中。具体方案为“聚水潭-店铺信息查询-->BI崛起-店铺信息表”…

NewStarCTF 2023 公开赛道 Web week1-week2

目录 week1 泄漏的秘密 Begin of Upload Begin of HTTP ErrorFlask ​Begin of PHP R!C!E! EasyLogin ​week2 游戏高手 include 0。0 ez_sql ​Unserialize? Upload again! R!!C!!E!! week1 泄漏的秘密 使用ctf-scan.py(https://gith…

随身 WiFi 通过 USB 连接路由器共享网络 扩展网络覆盖范围

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 之前几期随身 WiFi 的玩法都是关于骁龙 410 板子的随身 WiFi,可以刷 Debian 之后作为小型家庭服务器,跑跑 Docker,当当打印服务器什么的。而今天介绍的玩法用的是正儿八…

LockBit多版本简单对比

LockBit家族介绍 LockBit是一种非常知名且活跃的勒索软件家族,自2019年首次被发现以来,已经经历了多个版本的演变。它以其高效的加密速度和自动化攻击能力而闻名,对各类组织构成了严重威胁。 发展时间线如下: 时间 事件 2019年…

linux之网络子系统-路由子系统(3)路由表

一、路由表 linux 路由子系统代码量虽说不是很多,但是难度还是有的,最近在分析路由子系统这一块,对它的框架有了基本的了解。 路由子系统可以划分为三个部分:路由缓存、路由策略、路由表。前两个部分已经分析完,这里…

解决Vmware自动调整分辨率的问题

打开菜单:虚拟机→设置→硬件→显示器→显示缩放比例→勾选拉伸模式 Virtual Machine

【Linux】————磁盘与文件系统

作者主页: 作者主页 本篇博客专栏:Linux 创作时间 :2024年10月17日 一、磁盘的物理结构 磁盘的物理结构如图所示: 其中具体的物理存储结构如下: 磁盘中存储的基本单位为扇区,一个扇区的大小一般为512字…

【python爬虫实战】爬取全年天气数据并做数据可视化分析!附源码

由于篇幅限制,无法展示完整代码,需要的朋友可在下方获取!100%免费。 一、主题式网络爬虫设计方案 1. 主题式网络爬虫名称:天气预报爬取数据与可视化数据 2. 主题式网络爬虫爬取的内容与数据特征分析: - 爬取内容&am…

【软件工程】软件工程入门

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…