JVM-GC 日志-27

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ryo1060732496/article/details/88848123

情境导入

产线一个问题:业务系统调用后台超时,问是不是 FULL GC 的问题。

查看方式

  • 知道 GC 文件的位置

···
locate xxx.log
···

  • 知道如何查看 FULL GC 日志
cat /XXX/gc.log | grep -a 'Full'| more

简单分析

直接根据 full gc 的关键词查看。

一般在并发较高的系统中会出现这种日志,且几天出现一次。

但是一旦出现,一次 FULL GC 可能时间多达 10S,就会导致外部调用超时。

教训

你应该知道如何让系统打印 GC 日志,并且当系统调用超时的时候,可以联系到 FULL GC,并会排查。

  • 问题2

线上每台机器去看的效率实在不高,建议有一个监控系统。

可以在第一时间获取到 FULL GC 的日志,并且发送邮件/短信通知给相关负责人。

IDEA 中打印 GC 日志

编写测试类

public class Main {

    public static void main(String[] args) throws InterruptedException {
        List<String> stringList = new ArrayList<>();
        while (true) {
            for(int i = 0; i < 10000; i++) {
                stringList.add(UUID.randomUUID().toString());
            }
            TimeUnit.SECONDS.sleep(1);
            System.out.println(stringList.size());
        }
    }
}

配置运行 jvm 参数

【run】=>【Edit Configration】=>【vm option】

  • 打印 GC 日志信息
-XX:+PrintGCDetails

测试日志如下:

10000
20000
30000
[GC (Allocation Failure) [PSYoungGen: 33280K->4689K(38400K)] 33280K->4697K(125952K), 0.0032247 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
40000
50000
60000
70000
[GC (Allocation Failure) [PSYoungGen: 37969K->5112K(38400K)] 37977K->9224K(125952K), 0.0046176 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
80000

简单分析

[GC (Allocation Failure) [PSYoungGen: 33280K->4689K(38400K)] 33280K->4697K(125952K), 0.0032247 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 

GC 日志

GC 原因:Allocation Failure

GC 类型:PSYoungGen

GC 效果: 33280K->4689K(38400K)

GC 消耗时间:Times: user=0.00 sys=0.00, real=0.00 secs

参考资料

在IDE的后台打印GC日志

JVM的GC日志的主要参数

【GC分析】Java GC日志查看

目录

java 内存模型入门系列教程-00

猜你喜欢

转载自blog.csdn.net/ryo1060732496/article/details/88848123