浅谈 G1 GC 日志格式

在 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

时间: 2024-11-05 12:13:15

浅谈 G1 GC 日志格式的相关文章

GC日志格式及分析、heapdump文件获取

==仅方便后续参考== GC日志配置 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:servers/%SERVER_NAME%_gc.log -XX:+HeapDumpOnOutOfMemoryError注意,%SERVER_NAME%是win格式,linux下为${SERVER_NAME}. JVM的GC日志的主要参数包括如下几个:-XX:+PrintGC 输出简单GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:

G1 GC日志:Application time: 0.8766273 seconds

启动日志一直循环: 1.159: Application time: 0.8766273 seconds 1.160: Total time for which application threads were stopped:0.0001140 seconds, Stopping threads took: 0.0000351 seconds 搜索结果: 这里表示应用程序执行了0.87秒,GC线程造成的停顿时间大约为0.0001140秒.由于程序运行过程中进行了多次回收,所以你看到这里有多次时

GC日志格式

1.格式: [停顿类型[GC发生区域:内存已使用容量的变化]java堆已使用容量的变化,java堆区域GC耗时][Times:用户态消耗的cpu时间,内核态消耗的cpu时间,操作由始至终消耗的墙钟时间] [GC (System.gc()) [PSYoungGen: 7278K->728K(36864K)] 7278K->736K(121856K), 0.0027642 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] [Full GC (Sys

浅谈MYSQL之日志文件系统

同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等.这些日志可以帮助我们定位mysqld内部发生的事件,数据库性能故障,记录数据的变更历史,用户恢复数据库等等 MySQL日志文件系统的组成 a.错误日志:记录启动.运行或停止mysqld时出现的问题. b.通用日志:记录建立的客户端连接和执行的语句. c.更新日志:记录更改数据的语句.该日志在MySQL 5.1中已不再使用. d.二进制日

浅谈ELK日志分析平台

作者:珂珂链接:https://zhuanlan.zhihu.com/p/22104361来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 小编的话 "技术干货"系列文章意在分享技术牛人的知识干货,每期主题都不一样哟!期待各位读者在文后发表留言,来一场技术上的交流和思想上的碰撞! 2016年7月20日,本期品高云公开课由叶春草带来"可视化案发现场--浅谈ELK日志分析平台"的分享. 分享嘉宾 叶春草现就职于品高云软件技术支持工程师.就职

浅谈 js 数字格式类型

原文:浅谈 js 数字格式类型 很多人也许只知道 123,123.456,0xff 之类的数字格式.其实 js 格式还有很多数字格式类型,比如 1., .1 这样的,也有 .1e2 这样的. 可能有人说这是什么个格式?其实还不止呢.1          //11.2       //1.21.2e3    //12001.2e+3  //12001.2e-3  //0.0012.12e+2 //12-.12e-2 //-0.0012 当然这些只是十进制.我们来说说 八进制 和 十六进制.0x00

浅谈SQL Server中的事务日志(四)----在完整恢复模式下日志的角色

浅谈SQL Server中的事务日志(四)----在完整恢复模式下日志的角色 本篇文章是系列文章中的第四篇,也是最后一篇,本篇文章需要前三篇的文章知识作为基础,前三篇的文章地址如下: 浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色 简介 生产环境下的数据是如果可以写在资产负债表上的话,我想这个资产所占的数额一定不会

浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色

浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色 本篇文章是系列文章中的第二篇,以防你还没有看过第一篇.上一篇的文章地址如下: 浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 简介 每一个SQL Server的数据库都会按照其修改数据(insert,update,delete)的顺序将对应的日志记录到日志文件.SQL Server使用了Write-Ahead logging技术来保证了事务日志的原子性和持久性.而这项技术不仅仅保证了ACID

浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架

浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确保了事务的ACID属性.在SQL Server崩溃时,DBA还可以通过事务日志将数据恢复到指定的时间点.当SQL Server运转良好时,多了解一些事务日志的原理和概念显得并不是那么重要.但是,一旦SQL SERVER发生崩