版权声明:本文为博主原创文章,未经博主允许不得转载。 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