JAVA ZGC相关GC日志详情分析

可以通过设置 -Xlog:gc*:gc.log 选项以开启 ZGC 日志。其中 "gc*" 意为打印所有 tag 中以 "gc" 开头的日志,"gc.log" 为日志存储路径。

下面以 AutoMQ 在实际运行时的一次 GC 为例,按照不同的 log tag,解释 ZGC 日志的含义。

"gc,start","gc,task","gc"


[gc,start    ] GC(100) Garbage Collection (Timer)
[gc,task     ] GC(100) Using 1 workers
...
[gc          ] GC(100) Garbage Collection (Timer) 2240M(36%)->1190M(19%)

  •  第 1 行标志了一次 GC 的开始,是进程启动后的第 100 次(从 0 开始计数)GC,触发原因为 "Timer"。ZGC 可能的触发条件有:

    Warmup:ZGC 首次启动后的预热。

    Allocation Rate:由 ZGC 内部自适应的 GC 频率算法触发。如前文所述,其敏感度受 -XX:ZAllocationSpikeTolerance 控制。

    Allocation Stall:在分配对象时,堆可用内存不足时触发。这会导致部分线程阻塞,应尽可能避免该场景。

    Timer:当 -XX:ZCollectionInterval 配置不为 0 时,定时触发的 GC。

    Proactive:当应用程序空闲时由 ZGC 主动触发,受 -XX:+ZProactive 控制。

    System.gc():在代码中显式调用System.gc()时触发。

    Metadata GC Threshold:元数据空间不足时触发。

  • 第 2 行意为该次 GC 使用了 1 个并发线程,受 -XX:ConcGCThreads 与 -XX:+UseDynamicNumberOfGCThreads 控制。

  • 最后 1 行标志了一次 GC 的开始,GC 开始前堆中占用的内存为 2240M,占堆总大小的 36%;GC 完成后为 1190M,占 19%。

"gc,phases"


[gc,phases   ] GC(100) Pause Mark Start 0.005ms
[gc,phases   ] GC(100) Concurrent Mark 1952.113ms
[gc,phases   ] GC(100) Pause Mark End 0.018ms
[gc,phases   ] GC(100) Concurrent Mark Free 0.001ms
[gc,phases   ] GC(100) Concurrent Process Non-Strong References 79.422ms
[gc,phases   ] GC(100) Concurrent Reset Relocation Set 0.066ms
[gc,phases   ] GC(100) Concurrent Select Relocation Set 12.019ms
[gc,phases   ] GC(100) Pause Relocate Start 0.009ms
[gc,phases   ] GC(100) Concurrent Relocate 149.037ms

记录了 ZGC 各个阶段的耗时,其中 "Pause" 与 "Concurrent" 分别标识了 STW 阶段与并发阶段。每次 GC 会存在 3 个 "Pause" 阶段,应主要关注它们的耗时。

  • "gc,load",

[gc,load     ] GC(100) Load: 2.74/2.02/1.54

记录了过去 1 分钟、5 分钟、15 分钟的平均负载,即系统的平均活跃进程数。

  • "gc,mmu"

[gc,mmu      ] GC(100) MMU: 2ms/93.9%, 5ms/97.6%, 10ms/98.8%, 20ms/99.4%, 50ms/99.7%, 100ms/99.9%

记录了 GC 期间的最小可用性(Minimum Mutator Utilization)。以本次 GC 为例,在任何连续的 2ms 的时间窗口中,应用至少能使用 93.9% 的 CPU 时间。

"gc,ref"

[gc,ref      ] GC(100) Soft: 6918 encountered, 0 discovered, 0 enqueued
[gc,ref      ] GC(100) Weak: 8835 encountered, 1183 discovered, 4 enqueued
[gc,ref      ] GC(100) Final: 63 encountered, 3 discovered, 0 enqueued
[gc,ref      ] GC(100) Phantom: 957 encountered, 882 discovered, 0 enqueued

记录了 GC 期间不同类型的引用对象的处理情况。各字段含义如下:

  • "Soft":软引用(SoftReference)。软引用对象会在内存不足时被回收。

  • "Weak":弱引用(WeakReference)。弱引用对象只要被垃圾收集器发现,就会被回收。

  • "Final":终结引用(FinalReference)。终结引用允许对象在被垃圾回收之前执行一些特定的清理操作。

  • "Phantom":幽灵引用(PhantomReference)。幽灵引用通常用于确保对象被完全回收后才执行某些操作,它比终结引用提供了更精确的控制。

  • "encountered":GC 期间遇到的引用对象的数量。

  • "discovered":GC 期间发现需要处理的引用对象的数量。

  • "enqueued":GC 期间加入到引用队列(Reference Queue)中的引用对象的数量。

"gc,reloc"


[gc,reloc    ] GC(100) Small Pages: 1013 / 2026M, Empty: 2M, Relocated: 41M, In-Place: 0
[gc,reloc    ] GC(100) Medium Pages: 2 / 64M, Empty: 0M, Relocated: 9M, In-Place: 0
[gc,reloc    ] GC(100) Large Pages: 3 / 150M, Empty: 0M, Relocated: 0M, In-Place: 0
[gc,reloc    ] GC(100) Forwarding Usage: 19M

  • 前 3 行记录了不同大小的区域在 GC 时的表现。以第 1 行为例:

    共有 1013 个小区域,总大小为 2026 MB

    整理过程中发现了 2MB 的未被使用的区域

    迁移了 41MB 的对象

    其中有 0 MB 是原地迁移(该值过大意味着堆可用空间不足)

  • 第 4 行记录了迁移对象时,各区域使用的转发表的总大小。

"gc,heap"

[gc,heap     ] GC(100) Min Capacity: 6144M(100%)
[gc,heap     ] GC(100) Max Capacity: 6144M(100%)
[gc,heap     ] GC(100) Soft Max Capacity: 6144M(100%)
[gc,heap     ] GC(100)                Mark Start          Mark End        Relocate Start      Relocate End           High               Low
[gc,heap     ] GC(100)  Capacity:     6144M (100%)       6144M (100%)       6144M (100%)       6144M (100%)       6144M (100%)       6144M (100%)
[gc,heap     ] GC(100)      Free:     3904M (64%)        3394M (55%)        3372M (55%)        4954M (81%)        4954M (81%)        3340M (54%)
[gc,heap     ] GC(100)      Used:     2240M (36%)        2750M (45%)        2772M (45%)        1190M (19%)        2804M (46%)        1190M (19%)
[gc,heap     ] GC(100)      Live:         -               543M (9%)          543M (9%)          543M (9%)             -                  -
[gc,heap     ] GC(100) Allocated:         -               510M (8%)          534M (9%)          570M (9%)             -                  -
[gc,heap     ] GC(100)   Garbage:         -              1696M (28%)        1694M (28%)          75M (1%)             -                  -
[gc,heap     ] GC(100) Reclaimed:         -                  -                 2M (0%)         1620M (26%)            -                  -

记录了该 GC 周期中,不同阶段(标记前、标记后、迁移前、迁移后)的各类内存的大小。具体地说:
  • Capacity:堆的容量。

  • Free:堆中空闲的内存大小,与 Used 相加即为堆的容量。

  • Used:堆中使用的内存大小,其最大值即为 GC 期间堆的最大使用量。

  • Live:堆中存活的对象,即,可达的对象的总大小。

  • Allocated:和上一阶段相比,新分配的对象的大小。

  • Garbage:堆中垃圾对象的总大小。

  • Reclaimed:和上一阶段相比,回收的垃圾对象的大小。

参考文档:

Java ZGC 深度剖析及其在构建低延迟流系统中的实践心得

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

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

相关文章

植物大战僵尸杂交版v2.1最新直装版,苹果+安卓+PC+防闪退工具+修改工具+高清工具+通关存档整合包更新

今天我要和各位聊聊一款让全网疯狂的游戏——《植物大战僵尸杂交版》。这可不是简单的游戏,它可是让B站的UP主“潜艇伟伟迷”一夜成名的大作,让无数玩家为之疯狂的魔改神作! 记得2009年,《植物大战僵尸》横空出世,那时…

LDO芯片手册,实例应用分析

在进行电路设计时LDO是经常用到的,尤其在为芯片,晶振等敏感电路进行供电时应用更多,下面选取一款比较常用的LDO芯片,一起进行更深入的学习。 SGM2036特点简介 SGM2036,圣邦微一款比较常用的LDO芯片手册 可以先大致看…

【ajax实战04】数据管理平台——富文本编辑器

一:富文本编辑器简介 富文本:带样式,多格式的文本,在前端一般使用标签配合内联样式实现。 富文本编辑器:用于编写富文本内容的容器 二:wangEditor插件 https://www.wangeditor.com/ 对于将富文本编辑器…

MySQL 连接的使用方法与技巧

MySQL 连接是使用 MySQL 数据库的关键步骤之一。它允许用户通过网络与 MySQL 服务器建立通信,并执行各种数据库操作,如查询、插入、更新和删除数据。在本文中,我们将深入探讨 MySQL 连接的使用,包括连接的建立、配置和常见问题的解…

CAN通信协议

文章目录 STM32-CAN1. CAN基础知识2. CAN协议2.1. CAN协议与ISO/OSI基本参照模型的关系2.2. CAN协议及标准规格2.3. CAN协议2.3.1. 帧的种类2.3.2. 数据帧2.3.3. 遥控帧2.3.4. 错误帧2.3.5. 过载帧2.3.6. 间隔帧 2.4. 优先级的决定2.5. 位填充2.6. 错误的种类2.7. 位时序 3. CA…

鸿蒙系统最简单安装谷歌服务及软件的方法

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 近日,华为开发者大会在东莞松山湖召开,发布了盘古大模型5.0和纯血版的鸿蒙 HarmonyOS NEXT 全场景智能操作系统,而根据研究机构 Counterpoint Resea…

【linux/shell案例实战】awk实现浮点数四舍五入

使用printf格式化输出,实现保留小数位数四舍五入的功能 awk {printf "%.2f",$0}

ITSG、COST-G、Tongji和WHU Level-2数据产品读取绘图(Matlab)

数据介绍: ICGEM International Center for Global Gravity Field Models (gfz-potsdam.de) ITSG 2018:Institute of Geodesy at Graz University of Technolog(格拉茨理工大学大地测量研究所) 2018版本,最高60阶球谐…

Java导出excel合并行功能

导出的excel需要上下行相同的数据进行行合并的功能。如图显示 这里我使用的是项目框架自带的导出模板代码,是在这套模板基础之上做的修改。 // 我主要演示的就是mergeRows方法的操作,dataList是导出数据的集合。 workbook ExcelTools.expData(workbook…

【Linux】性能分析器 perf 详解(二)

上一篇:【Linux】性能分析器 perf 详解(一) 1、perf命令列表 annotate 读取perf.data(由perf record生成)并结合源代码展示详细的性能分析结果,包括CPU执行热点、函数调用栈等信息。archive 使用perf.data文件中找到的带构建标识符的对象文件创建归档文件,便于后续对这…

大厂面试官问我:Redis中热key和大key是怎么解决的?【后端八股文五:Redis热key和大key八股文合集】

往期内容: 大厂面试官问我:Redis处理点赞,如果瞬时涌入大量用户点赞(千万级),应当如何进行处理?【后端八股文一:Redis点赞八股文合集】-CSDN博客 大厂面试官问我:布隆过滤…

【OceanBase诊断调优】—— 如何缩短OceanBase 数据库执行 count(*) 的时间

本文介绍影响 OceanBase 数据库执行 count(*) 时间的因素以及缩短 count(*) 执行时间的方法。 适用版本 OceanBase 数据库所有版本 执行 count(*) 的时间 OceanBase 数据库中,执行 count(*) 的时间不仅与选择的行数,还与行的长度相关。这是由于对主表…

振兴黄河新生力 打造文旅新地标——全国首家黄河会客厅在山东济南启幕

6月26日,由黄河文化发展工作站组织实施的全国首家黄河会客厅平台发布会暨山东基地启动仪式在济南成功召开。黄河会客厅以“民生黄河、生态动能、中华文明”为核心主题,融汇黄河智库、黄河文明、黄河产域、黄河金融、黄河科创、黄河物贸六大振兴赋能体系&…

计算机视觉:项目实战

目录 SSD1.安装ananconda2.安装cuda和cudnn3.配置Pytorch环境3.1 pytorch环境的配置与激活3.2 pytorch库的安装3.3 其它依赖库的安装 遇到的问题:1.EOFError: Ran out of input.2.No module named dlib. SSD 1.安装ananconda 见另一篇博文:https://blo…

【LeetCode】每日一题:LRU缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 …

maven-jar-plugin在springboot中打包成普通引用的jar

如果您想要创建一个不包含Spring Boot特定结构的普通jar包(例如,一个可以被其他项目作为依赖引用的库),您需要在pom.xml中添加maven-jar-plugin的配置。这里是一个示例配置,它将创建一个带有lib分类器的jar包&#xff…

OpenAI API一键搬家,天工推出开发者迁移计划

6月25日,OpenAI宣布称将于今年7月9日开始封锁来自非支持国家和地区的API流量。此后,来自中国大陆、中国香港等地的开发者将无法使用OpenAI API提供服务。 为了助力开发者高效切换至国内大模型,天工开放平台(https://model-platfo…

Java项目分层(持续更新中)

第一次更新时间2024.6.26 分包 实体类 功能类 工具类 分层 实体类层 我们要操作的对象,Book,Student... 控制层 控制请求转发 业务层 处理业务 数据层 连接数据库 处理数据 工具类层 JDBC等工具类 测试层 最终启动项目 明确我们所要做的业务之后&a…

[深度学习] 图神经网络GNN

图神经网络(Graph Neural Network, GNN)是一类用于处理图结构数据的深度学习模型。图是一种重要的数据结构,广泛应用于社交网络、分子化学、推荐系统、交通网络等领域。GNN的出现使得能够有效地在图结构数据上进行学习和推理。以下是GNN的详细…

电脑突然提示dll文件丢失,怎么选择正确的恢复方法?

电脑突然提示dll文件丢失?其实当你的电脑使用久了,出现这种dll文件丢失是非常的正常的,毕竟你总会有不恰当的操作吧?这些操作都是会导致dll文件丢失的。丢失了,我们直接进行相关的修复就好了,还是比较简单的…