什么是GC日志?

yizhihongxing

GC日志是指GC(Garbage Collection,垃圾回收)的记录日志,主要用于排查JVM内存问题和性能调优。在GC发生时,JVM会记录下当前内存使用情况、GC时间、GC原因、GC类型、GC前后各个内存区域的使用情况等信息,并输出到GC日志中。

常见的GC日志有以下几种格式:

  1. -Xloggc:filename [可简写为 -verbose:gc,从JDK 9开始不再支持],以输出文件方式记录GC日志。

    例如:java -Xloggc:/home/user/gc.log -jar myapp.jar

这条命令会将GC日志输出到/home/user/gc.log文件中。

  1. -XX:+PrintGC 和 -XX:+PrintGCDetails,以输出到标准输出流方式记录GC日志。

    例如:java -XX:+PrintGC -XX:+PrintGCDetails -jar myapp.jar

这条命令会将GC日志输出到控制台。

另外,还有一些其他的GC日志参数,如-XX:+PrintGCDateStamps、-XX:+PrintGCTimeStamps、-XX:+PrintHeapAtGC等,可以根据需要进行使用。

下面是两个GC日志示例:

  1. 短时间间隔内多次Young GC的日志:
[GC (Allocation Failure) [PSYoungGen: 59905K->8704K(68608K)]
 59905K->18005K(220160K), 0.0132214 secs] 
[Times: user=0.02 sys=0.01, real=0.01 secs] 
[GC (Allocation Failure) [PSYoungGen: 68608K->8704K(68608K)]
 77909K->35012K(220160K), 0.0142372 secs] 
[Times: user=0.03 sys=0.01, real=0.01 secs] 

以上日志中,发生了两次Young GC,原因是分配内存失败。每次Young GC后,PSYoungGen内存从59905K、68608K分别降到了8704K,分别为内存使用情况、内存空间总大小、Young GC后整个堆内存的使用情况、堆内存总大小。两次GC中,整个堆内存的使用情况分别从59905K、77909K增加到了18005K、35012K,整个Young GC的耗时分别为0.0132214s、0.0142372s。

  1. Full GC的日志:
[Full GC (System.gc()) [PSYoungGen: 4128K->0K(6144K)] 
[ParOldGen: 27007K->16943K(34944K)] 31135K->16943K(41088K), [Metaspace: 266K->266K(1056768K)], 0.0362059 secs] 
[Times: user=0.10 sys=0.01, real=0.03 secs] 

以上日志中,发生了一次Full GC,原因是手动调用了System.gc()。在此次GC中,Young Gen完全被清空,Old Gen恢复了一部分内存,整个堆内存从31135K缩减到了16943K。Metaspace没有任何变化。此次GC的耗时为0.0362059s,其中,user=0.10秒代表用户态CPU的消耗时间,sys=0.01秒代表内核态CPU的消耗时间,real=0.03代表实际花费的时间。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:什么是GC日志? - Python技术站

(1)
上一篇 2023年5月11日
下一篇 2023年5月11日

相关文章

  • 在js文件中如何获取basePath处理js路径问题

    获取basePath处理js路径问题是一个常见的需求。以下是如何在JS文件中获取basePath的完整攻略: 首先,在HTML文件中设置meta标签,将basePath存储到meta标签中: <head> <meta name="basePath" content="http://www.example.com…

    Java 2023年6月15日
    00
  • 记一次Flink遇到性能瓶颈

    前言 这周的主要时间花在Flink上面,做了一个简单的从文本文件中读取数据,然后存入数据库的例子,能够正常的实现功能,但是遇到个问题,我有四台机器,自己搭建了一个standalone的集群,不论我把并行度设置多少,跑起来的耗时都非常接近,实在是百思不得其解。机器多似乎并不能帮助它。 把过程记录在此,看后面随着学习的深入能不能解答出这个问题。 尝试过的修复方法…

    Java 2023年4月17日
    00
  • java 中用split分割字符串,最后的空格等不被拆分的方法

    让我来详细讲解一下如何在Java中使用split方法分割字符串,同时可以让最后的空格等不被拆分。 1. 使用正则表达式指定分隔符 在Java中,使用split方法分割字符串时,可以通过正则表达式来指定字符串的分隔符。如果要保留最后的空格,可以在分隔符字符串中使用”\s*$”,表示以零个或多个空格结尾。具体的代码如下: String str = "T…

    Java 2023年5月27日
    00
  • Java实现读取resources目录下的文件路径的九种方式

    Java实现读取resources目录下的文件路径通常有以下九种方式: 1. 使用ClassLoader的getResource()方法 在Java中,可以使用ClassLoader的getResource()方法获取resources目录下的文件路径。示例代码如下: URL resource = getClass().getClassLoader().ge…

    Java 2023年6月15日
    00
  • 使用IDEA配置Mybatis-Plus框架图文详解

    下面是使用IDEA配置Mybatis-Plus框架的完整攻略。 步骤一:创建Maven项目并导入依赖 首先,我们需要在IDEA中创建一个Maven项目。创建项目后,我们需要在pom.xml文件中添加Mybatis-Plus相关的依赖。 <dependencies> <dependency> <groupId>com.bao…

    Java 2023年5月20日
    00
  • 6000+字讲透ElasticSearch 索引设计

    ElasticSearch 索引设计 在MySQL中数据库设计非常重要,同样在ES中数据库设计也是非常重要的 概述 我们创建索引就像创建表结构一样,必须非常慎重的,索引如果创建不好后面会出现各种各样的问题 索引设计的重要性 索引创建后,索引的分片只能通过_split和_shrink接口对其进行成倍的增加和缩减 主要是因为es的数据是通过_routing分配到…

    Java 2023年5月11日
    00
  • Java中ByteArrayInputStream和ByteArrayOutputStream用法详解

    Java中ByteArrayInputStream用法详解 ByteArrayInputStream是Java中处理字节数组的输入流,其用法和普通的输入流相类似。下面是ByteArrayInputStream的基本用法: // 创建一个字节数组 byte[] buf = new byte[]{1,2,3,4,5}; // 将字节数组包装为输入流 ByteAr…

    Java 2023年5月20日
    00
  • Java实现学生管理系统(控制台版本)

    Java实现学生管理系统的控制台版本是一个常见的练手项目,同时也是Java编程语言的入门级别的练习项目,其主要目的是通过实现一个简单的学生信息管理系统来训练Java编程的基本能力。 以下是实现Java学生管理系统的大致步骤: 1. 设计学生类 学生类是整个学生信息管理系统的核心,需要包含学生的基本信息,例如姓名、学号、性别、年龄等。 示例代码: public…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部