首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一个案例看懂 G1 GC的日志结构!

一个案例看懂 G1 GC的日志结构!

作者头像
JavaEdge
发布2025-06-01 09:52:06
发布2025-06-01 09:52:06
18600
代码可运行
举报
文章被收录于专栏:JavaEdgeJavaEdge
运行总次数:0
代码可运行

点击下方“JavaEdge”,选择“设为星标”

第一时间关注技术干货!

免责声明~ 任何文章不要过度深思! 万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」; 不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现在的自己处在什么样的阶段」才不为俗人。 怎么想、怎么做,全在乎自己「不断实践中寻找适合自己的大道」

0 前言

G1,Java8可选,Java9已默认的垃圾收集器,G1 垃圾收集器的关键特性之一是能够在不牺牲吞吐量的同时,限制 GC 暂停时间(即可以设置所需的最大停顿时间)。

调优 JVM 大小和排查问题的情况下,须理解 G1 GC 的日志格式。由于 G1 GC 日志中有许多与子任务相关的信息,因此为了更好地理解和利用这些信息,推荐 GC 日志分析工具:http://gceasy.io/。

1 生成详细的GC log

可用如下参数打开 GC 日志:

代码语言:javascript
代码运行次数:0
运行
复制
-Xloggc:/home/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps

GC 日志会写入 /home/gc.log 文件。

2 Minor GC(YGC)日志

Minor GC时,产生的GC 日志文件内容:

06f42d3bf236bb623b54adbdef8332ad.png
06f42d3bf236bb623b54adbdef8332ad.png
2.1 2024-07-10T15:04:37.929+0800: 20197.284

表示 GC 发生时间,其中20197.284 表示 Java 进程启动 20197284ms后发生 GC。

2.2 GC pause (G1 Evacuation Pause)

疏散停顿(Evacuation Pause):将存活对象从一个区域(young or young + old)拷贝到另一个区域的阶段。

2.3 (young)

这是个 YGC 事件。

2.4 GC Workers: 4

表示 GC 的工作线程是 4 个。

2.5 [Eden: 2016.0M(2016.0M)->0.0B(2016.0M) Survivors: 32.0M->32.0M Heap: 2076.8M(4096.0M)->60.0M(4096.0M)]

显示堆的大小变化:

① Eden: 2016.0M(2016.0M)->0.0B(2016.0M)

Eden空间是2016.0M,并且2016.0M空间全被占用。在GC后,年轻代(young generation)空间下降到0,Eden空间增长到2016.0M,但是没有提交。因为要求,额外的空间被添加给Eden。

② Survivors: 0.0B->64.0M

GC 前,幸存者空间是 0 字节,但GC 后,幸存者空间增长到64.0M,表明对象从年轻代(Young Generation)提升到幸存者空间(Survivor space)。

③ Heap: 2048.0M(4096.0M)->62.3M(4096.0M)

堆的大小是4096.0M,被占用2048.0M,GC 后,堆占用率降至62.3M,即(2048.0M – 62.3M)的对象被垃圾回收了,堆大小仍是4096.0M。

④ Times: user=0.12 sys=0.04, real=0.08 secs

real 表示 GC 总共花 0.08s。

usersys 感兴趣,查看:GC LOGGING – USER, SYS, REAL – WHICH TIME TO USE? & GANDHI。

3 Full GC 日志

Full GC 时,产生的GC日志文件内容:

36d32bdb6aab7260a0f1760e58ffc795.png
36d32bdb6aab7260a0f1760e58ffc795.png
2.1 2015-09-14T12:35:27.263-0700: 183.216
  • 2015-09-14T12:35:27.263-0700 表示 GC 发生的时间
  • 183.216 表示 Java 进程启动 183 秒后发生了 GC.
2.2 Full GC (Allocation Failure)

Full GC 事件,触发的原因是因为空间分配失败(allocation failure),当堆中有很多碎片时,在老年代进行直接内存分配也许会失败,即使有许多空闲空间,这通常会导致分配失败。

3.3 [Eden: 3072.0K(194.0M)->0.0B(201.0M) Survivors: 0.0B->0.0B Heap: 3727.1M(4022.0M)->3612.0M(4022.0M)], [Metaspace: 2776K->2776K(1056768K)]

堆的大小变化,由于这是 Full GC 事件:

Eden: 3072.0K(194.0M)->0.0B(201.0M)

表示伊甸园空间(Eden space)是194mb,被占用3072kb。在 GC 发生之后,年轻代(young generation)下降到0。伊甸园空间增长到201mb,但是没有提交。因为要求,额外的空间被添加给伊甸园。

Survivors: 0.0B->0.0B

表示 GC 发生前后,幸存者空间是 0kb。

Heap: 3727.1M(4022.0M)->3612.0M(4022.0M)

表示堆的大小是 4022mb,其中 3727.1mb 空间未被占用。在 GC 发生之后,堆占用率降至 3612mb,115.1mb (即3727.1 – 3612) 的对象被垃圾回收了,堆的大小仍然是 4022mb。

Metaspace: 2776K->2776K(1056768K)

表示在 GC 发生前后,它被占用的空间大小是 2776k。基本上,意味着在这个阶段 metaspace 空间占用率是保持一致的,metaspace 的总大小是 1056768k。

Times: user=19.08, sys=0.01, real=9.74 secs

real 表示 GC 总共花了 9.74 秒,这个停顿时间很长。

参考:

  • https://tech.meituan.com/2016/09/23/g1.html
  • https://www.oracle.com/technetwork/tutorials/tutorials-1876574.html

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。 各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。 负责:

  • 中央/分销预订系统性能优化
  • 活动&券等营销中台建设
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
  • LLM Agent应用开发
  • 区块链应用开发

目前主攻市级软件项目设计、构建服务全社会的应用系统。

写在最后

编程严选网http://www.javaedge.cn/ 专注分享软件开发全生态相关技术文章视频教程资源、热点资讯等,全站资源免费学习,快来看看吧~

12836e5a8f80b7b3375bc56066b602fd.png
12836e5a8f80b7b3375bc56066b602fd.png

欢迎长按图片加好友,我会第一时间和你分享软件行业趋势面试资源学习方法等等。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0 前言
  • 1 生成详细的GC log
  • 2 Minor GC(YGC)日志
    • 2.1 2024-07-10T15:04:37.929+0800: 20197.284
    • 2.2 GC pause (G1 Evacuation Pause)
    • 2.3 (young)
    • 2.4 GC Workers: 4
    • 2.5 [Eden: 2016.0M(2016.0M)->0.0B(2016.0M) Survivors: 32.0M->32.0M Heap: 2076.8M(4096.0M)->60.0M(4096.0M)]
      • ① Eden: 2016.0M(2016.0M)->0.0B(2016.0M)
      • ② Survivors: 0.0B->64.0M
      • ③ Heap: 2048.0M(4096.0M)->62.3M(4096.0M)
      • ④ Times: user=0.12 sys=0.04, real=0.08 secs
  • 3 Full GC 日志
    • 2.1 2015-09-14T12:35:27.263-0700: 183.216
    • 2.2 Full GC (Allocation Failure)
    • 3.3 [Eden: 3072.0K(194.0M)->0.0B(201.0M) Survivors: 0.0B->0.0B Heap: 3727.1M(4022.0M)->3612.0M(4022.0M)], [Metaspace: 2776K->2776K(1056768K)]
      • Eden: 3072.0K(194.0M)->0.0B(201.0M)
      • Survivors: 0.0B->0.0B
      • Heap: 3727.1M(4022.0M)->3612.0M(4022.0M)
      • Metaspace: 2776K->2776K(1056768K)
      • Times: user=19.08, sys=0.01, real=9.74 secs
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档