首页 > 其他分享 >oceanbase-3分钟带你看懂 GC 日志!

oceanbase-3分钟带你看懂 GC 日志!

时间:2024-08-30 09:27:39浏览次数:3  
标签:Old 收集器 oceanbase GC 垃圾 日志 内存

3分钟带你看懂 GC 日志!

------------------------------------------------------------------------------------

 

01、背景介绍

在之前的几篇文章中,我们介绍了 JVM 内部布局对象的创建过程运行期的相关优化手段垃圾对象的回收算法以及垃圾收集器等相关知识。

那么如何分析当前虚拟机性能呢?其中 GC 日志起到至关重要的作用。

实际上,每种垃圾收集器都有它独立的日志格式,尽管如此,虚拟机为了方便用户阅读,将各个收集器的日志都维持在一定的共性状态。

下面我们一起来看看不同的垃圾收集器,相关的 GC 日志内容。

本文是基于 JDK 1.8 版本运行,可能不同的版本各个内存区域的名称略有不同,对知识的理解不会产生明显的误区。

02、触发GC时机

通常,GC 触发的条件有两种:

  • 1.程序调用System.gc时可能会触发,此时会建议 JVM 进行垃圾回收,但不代表一定会进行 GC 动作;
  • 2.系统自身来决定 GC 触发的时机,比如年轻代空间不足、老年代空间不足等就会主动触发 GC 动作

以上两种行为都会产生 GC 日志。

03、GC日志

在介绍之前,我们先看一段代码,下文的 GC 日志都会基于这段代码来分析。

 

运行时加上-verbose:gc参数,以便简要的查看程序的 GC 情况,运行后的输出结果如下!

 

以上代码是一段对象相互引用的场景,但是 JVM 还是将对象回收了,也应证了一点,HotSpot 虚拟机并不是通过引用计数法来判定对象是否存活的。

下面我们还是以上面的代码为例,设置不同的虚拟机参数,看看 GC 日志情况。

3.1、Serial 和 Serial Old 组合垃圾收集器

Serial 和 Serial Old 组合的垃圾收集器,可以在运行时设置如下参数来开启。

运行之后,输出结果如下!

 

各个参数描述介绍:

  • def new generation:表示年轻代的内存使用情况,其中eden space表示Eden空间的内存使用情况;from space表示From Survivor空间的内存使用情况;to space表示To Survivor空间的内存使用情况;
  • tenured generation:表示老年代的内存使用情况
  • Metaspace:表示元空间的内存使用情况,在 JDK1.7 中称为永久代

3.2、ParNew 和 Serial Old 组合垃圾收集器

ParNew 和 Serial Old 组合的垃圾收集器,可以在运行时设置如下参数来开启。

运行之后,输出结果如下!

其中par new generation表示年轻代的内存使用情况,其它表达的内容与上相同。

3.3、Parallel Scavenge 和 Parallel Old 组合垃圾收集器

Parallel Scavenge 和 Parallel Old 组合的垃圾收集器,可以在运行时设置如下参数来开启。

需要注意的是,在 jdk1.8 及之后的版本中,-XX:+UseParallelGC和-XX:+UseParallelOldGC参数效果是一样的,都是用的 Parallel Old 作为老年代收集器;而在 jdk1.7 及之后的版本中,-XX:+UseParallelGC参数用的是 Serial Old 作为老年代收集器。

运行之后,输出结果如下!

3.4、ParNew 和 CMS + Serial Old 组合垃圾收集器

ParNew 和 CMS + Serial Old 组合的垃圾收集器,可以在运行时设置如下参数来开启。

运行之后,输出结果如下!

3.5、G1 垃圾收集器

G1 垃圾收集器,可以在运行时设置如下参数来开启。

运行之后,输出结果如下!

G1 收集器与以上收集器都不同,它会把整个 Java 堆分成若干个大小相等的独立区域,也是日志中的 Region,然后针对优先级高的 Region 区域进行收集。Region 区域可能存放的是年轻代的对象,也可能是老年代的对象。

04、小结

以上的日志输出,会发现很多的共性。

比如,以“GC”开头的,通常表示年轻代的收集情况;以“Full GC”开头的,表示整个堆的收集情况,其中带有“(System.gc()) ”信息的表示调用System.gc()方法所触发的 GC。

以下面这个日志为例,来解读一下相关信息。

  • 1.Full GC (System.gc()表示 Full GC 类型的 GC 动作,通过调用System.gc()方法而触发;
  • 2.PSYoungGen: 496K->0K(38400K)表示年轻代 GC 前使用的容量为 496K,GC 后该内存区域使用的容量为 0K,年轻代总容量为 38400K;
  • 3.ParOldGen: 8K->390K(87552K)表示老年代 GC 前使用的容量为 8K,GC 后该内存区域使用的容量为 390K,老年代总容量为 87552K;
  • 4.504K->390K(125952K)表示整个堆 GC 前使用的容量为 504K,GC 后该内存区域使用的容量为 390K,整个堆总容量为 125952K;
  • 5.Metaspace: 3008K->3008K(1056768K)表示元空间 GC 前使用的容量为 3008K,GC 后该内存区域使用的容量为 3008K,整个元空间总容量为 1056768K;
  • 6.0.0045268 secs表示 Full GC 耗时为 0.0045268 秒;
  • 7.Times: user=0.01 sys=0.00, real=0.00 secs表示 Full GC 期间用户的耗时、系统的耗时、实际操作的耗时,单位秒;

Heap 后面列举的是堆的内存使用情况。

本文主要围绕 GC 日志,进行了一次知识内容的整合和总结,内容比较多,如果有描述不对的地方,欢迎大家留言指出,不胜感激。

写到最后

最后感谢各位的阅读,原创不易,如果觉得文章写的不错,欢迎大家转发,点击【在看】让更多的人看到,谢谢大家的支持!

 

 转自: https://mp.weixin.qq.com/s/1O8rxy-MFJg8Hhv2f8AvBA

----- 2024年8月30日09:20:37

-----full gc  

标签:Old,收集器,oceanbase,GC,垃圾,日志,内存
From: https://www.cnblogs.com/bayaim/p/18387985

相关文章

  • OceanBase-OCP-bug之 fgc问题处理
    一、遇到问题时,处理过程关于调整ocp-server的jvm大小解释:1、在docker容器内设置exportJVM_HEAP_SIZE=xxxx,然后重启对应的ocp-server进程(/home/admin/ocp-server/bin/ocp-server),注意这里的大小不要超过docker容器的大小上限。2、在调整完ocp容器的内存大小之后(dockerupdate--......
  • 【愚公系列】《AIGC辅助软件开发》002-AI智能化编程助手:GitHub Copilot
    ......
  • 【愚公系列】《AIGC辅助软件开发》002-AI智能化编程助手:GitHub Copilot
    ......
  • 基于LangChain手工测试用例转Web自动化测试生成工具
    在传统编写Web自动化测试用例的过程中,基本都是需要测试工程师,根据功能测试用例转换为自动化测试的用例。市面上自动生成Web或App自动化测试用例的产品无非也都是通过录制的方式,获取操作人的行为操作,从而记录测试用例。整个过程类似于但是通常录制出来的用例可用性、可维护性......
  • 【专题】中国游戏产业AIGC发展前景报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=37535原文出处:拓端数据部落公众号 近八成头部游戏企业在人工智能、数字孪生、引擎开发、云技术和XR等技术领域布局;有近六成头部游戏企业已构建AI生产管线、赋能虚拟内容生产或智能营销;此外,国内TOP50游戏厂商投资AI企业已超百次。阅读原文,获取专......
  • AGC041D Problem Scores 题解
    在分值不降的条件下,要使任意一个大小为\(k\)的子集\(S\)内题目的分值之和少于任意一个大小为\(k+1\)的子集\(T\)内题目的分值之和,容易发现只需要取\(S\)为后\(k\)道题目,\(T\)为前\(k+1\)道题目时满足限制即可。换而言之,只需要对满足\(a\)的每一段长为\(k+......
  • Dell服务器导出日志
    iDRAC接口为网口准备工作:注:此文档适用于iDRAC接口为网口且与电源接口同侧的Dell服务器,如:R740带网口的笔记本电脑网线跳线操作方法:网线一端连接笔记本电脑,另一端连接服务器的iDRAC接口;查看笔记本电脑是否自动获取到192.168.0.*的ip地址,未获取到需设置同段的固定ip地址,如:1......
  • 基于LangChain手工测试用例转Web自动化测试生成工具
    在传统编写Web自动化测试用例的过程中,基本都是需要测试工程师,根据功能测试用例转换为自动化测试的用例。市面上自动生成Web或App自动化测试用例的产品无非也都是通过录制的方式,获取操作人的行为操作,从而记录测试用例。整个过程类似于但是通常录制出来的用例可用性、可维护......
  • FTP上传日志文件
    1、/***d) 更新上传日志文件(把最新上传的“模号/文件名称”覆盖到LastFtpFile.log),*ftp://10.210.85.249/LastFtpFile.log,log内容举例:P10123-1/mcn-2300707-001.xlsx,*多条数据时换行存储。*/privatevoidupdateLog(String[]modelingNoArr,Li......
  • 虚拟人主播的诞生之AIGC技术原理与未来前景
    虚拟人主播的诞生:技术原理与未来前景随着人工智能技术的迅猛发展,虚拟人主播(VirtualInfluencer)作为AIGC(ArtificialIntelligenceGeneratedContent)的一个重要应用,正逐渐走入大众视野。虚拟人主播不仅在娱乐和广告行业引发了巨大反响,还在教育、医疗等领域展现出广泛的应用前景。本......