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

由于 G1 GC 正在逐渐成为默认的垃圾收集器,它的使用与关注度也会逐渐增加。因此在调整 JVM 大小和排查问题的情况下,必须先理解 G1 GC 的日志格式,接下来将介绍如何理解 G1 GC 的日志格式。由于 G1 GC 日志中有许多与子任务相关的信息,因此为了更好地理解和利用这些信息,我推荐使用 GC 日志分析工具:http://gceasy.io/。

打开 GC 日志

可以使用下面的参数打开 GC 日志:

-Xloggc:/home/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps

在这里 GC 日志会写入到 /home/gc.log 文件里。

Minor GC 日志

当发生 Minor GC 时,在 GC 日志文件里会有以下内容:

上图展示了在 G1 垃圾收集日志中的 Young GC 事件。

1、 2015-09-14T12:32:24.398-0700: 0.356 — 在这里 2015-09-14T12:32:24.398-0700: 0.356 表示 GC 发生的时间,其中 0.356 表示 Java 进程启动 356 毫秒之后发生了 GC。

2、GC pause (G1 Evacuation Pause) — 疏散停顿(Evacuation Pause)是将活着的对象从一个区域(young or young + old)拷贝到另一个区域的阶段。

3、(young) — 表示这是一个 Young GC 事件。

4、GC Workers: 8 – 表示 GC 的工作线程是 8 个。

5、[Eden: 12.0M(12.0M)->0.0B(14.0M) Survivors: 0.0B->2048.0K Heap:12.6M(252.0M)->7848.3K(252.0M)] — 这里显示了堆的大小变化:

  • Eden: 12.0M(12.0M)->0.0B(14.0M) — 表示伊甸园(Eden)空间是 12mb,并且 12mb 空间全部被占用。在 GC 发生之后,年轻代(young generation)空间下降到0,伊甸园的空间增长到 14mb,但是没有提交。因为要求,额外的空间被添加给伊甸园。

  • Survivors: 0.0B->2048.0K - 表示在 GC 发生之前,幸存者空间(Survivor space)是 0 个字节,但是在 GC 发生之后,幸存者空间增长到 2048 kb,它表明对象从年轻代(Young Generation)提升到幸存者空间(Survivor space)。

  • Heap: 12.6M(252.0M)->7848.3K(252.0M) – 表示堆的大小是 252mb,被占用 12.6mb,GC 发生之后,堆占用率将至 7848.3kb(即5mb (12.6mb – 7848.3kb)的对象被垃圾回收了),堆的大小仍然是 252mb。

6、Times: user=0.08, sys=0.00, real=0.02 secs – 注意这里的 real 时间,它表示 GC 总共花了 0.02 秒,如果你对 user 和 sys 感兴趣,请查看这篇文章:GC LOGGING – USER, SYS, REAL – WHICH TIME TO USE? & GANDHI。

Full GC 日志

当发生 Full GC 时,在 GC 日志文件里会有以下内容:

上图展示了在 G1 垃圾收集日志中的 Full GC 事件。

1、2015-09-14T12:35:27.263-0700: 183.216 – 在这里 2015-09-14T12:35:27.263-0700 表示 GC 发生的时间,其中 183.216 表示 Java 进程启动 183 秒后发生了 GC.

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

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。

4、Times: user=19.08, sys=0.01, real=9.74 secs – real 表示 GC 总共花了 9.74 秒,这个停顿时间很长。

本文基本概括了 G1 GC 日志的内容,如果你想看到可视化图形和指标,我建议使用 GC 分析工具:http://gceasy.io/。

编译自:https://dzone.com/articles/understanding-g1-gc-log-format。

转载于:https://www.cnblogs.com/felixzh/p/11526306.html

浅谈 G1 GC 日志格式相关推荐

  1. G1 GC 日志格式

    在 Java9 中,G1 GC 将成为默认的垃圾收集器,G1 垃圾收集器的关键特性之一是能够在不牺牲吞吐量的同时,限制 GC 暂停时间(即可以设置所需的最大停顿时间). 由于 G1 GC 正在逐渐成为 ...

  2. JVM 调优实战--常用命令参数及PS收集器的GC日志格式

    目录 了解JVM常用命令行参数 Parallel Scavenge(PS)的GC日志格式 了解JVM常用命令行参数 JVM的命令行参数参考:https://docs.oracle.com/javase ...

  3. jvm中GC日志格式详解(十)

    一.日志相关参数 1.-XX:+PrintGCDetails 2.-XX:+PrintGCTimeStamps 打印时间戳 3.-XX:+PrintGCDateStamps 4.-Xloggc:/tm ...

  4. mysql下日志_浅谈mysql下日志记录

    1,如何查看mysql执行命令历史 #.mysql_history     此文件记录了在mysql中执行命令的历史 2,事务日志: transaction log:事务型存储引擎自行的管理和使用. ...

  5. oracle归档日志的概念,浅谈Oracle归档日志

    什么是归档日志 归档日志(Archive Log)是非活动的重做日志备份.通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换式,后台进程ARCH会将重做日志 ...

  6. 浅谈管理系统操作日志设计(附操作日志类)

    原文地址:http://www.cnblogs.com/hooray/archive/2012/09/05/2672133.html 相关文章链接:<系统操作日志设计> 在开始做之前,必须 ...

  7. 浅谈精准提取日志中的URL

    背景 在分析日志的时候发现有些日志中参数中包含其他的URL,例如: http://www.xxx.cn/r/common/register_tpl_shortcut.php?ico_url=http: ...

  8. 浅谈Win10装机磁盘格式问题:windows无法安装到这个磁盘 选中的磁盘采用GPT分区形式

    1.问题描述 如图所示,windows无法安装,无论是格式化还是删除分区都没有办法搞定. 2.原因分析 win8/win10系统均添加快速启动功能,预装的win8/win10电脑默认都是UEFI引导和 ...

  9. jvm调优:GC日志格式

最新文章

  1. 计算机专业词典_好书优选:实用英汉汉英计算机词典
  2. Spring源码版本命名规则及下载安装(下)笔记
  3. linux配置服务器心得体会,linux 学习 linux上搭建dhcp服务器
  4. 收发邮件服务器错误,邮件系统收发邮件报错汇总——错误代码550
  5. Python批量Excel文件数据导入SQLite数据库的优化方案
  6. 人工智能作业——搜索树博弈树一阶逻辑表达式CNF范式
  7. 前端主流的 Javascript,缺失了哪些技能?
  8. messagehub讲解,如何获取MessageHub的其余管理API的API密钥?
  9. 第一次作业:对于Linux2.6.0源码中进程模型的分析
  10. 发力多人在线游戏!PS5有望2020年E3展会亮相!
  11. split-lapply-cbind模式--R语言
  12. Java库转oc,(java转行oc)什么是block,用java来解释oc中的block
  13. 数据结构 —— 静态链表
  14. php连接mysql 实现登录_php如何连接mysql实现简单注册登陆页面
  15. 神武手游哪个服务器人最多,神武4端游什么老区人最多
  16. 如何将两个excel表格合并
  17. 批量爬取上交所上市公司报告
  18. ping pong buffer
  19. 博客鼠标特效代码|鼠标特效代码
  20. Java分页导出Excel文件

热门文章

  1. hdu 6579 Operation (在线线性基)
  2. Flask 系列之 Blueprint
  3. easyUI 学习网站
  4. python之路_计算机编码及运算符介绍
  5. 1489 蜥蜴和地下室
  6. Struts2 入门
  7. WebConfig配置 文件加密处理
  8. shm_overview(7)
  9. javascript弹出div(一)
  10. android启动的阅读笔记