GC日志分析

目录

  • 一、日志打印
  • 二、GC日志分析Demo
  • 三、gceasy可视化GC日志
  • 四、JVM参数汇总查看命令

一、日志打印

1.JVM中增加参数

‐Xloggc:./gc‐%t.log ‐XX:+PrintGCDetails ‐XX:+PrintGCDateStamps ‐XX:+PrintGCTimeStamps ‐XX:+PrintGCCause ‐XX:+UseGCLogFileRotation ‐XX:NumberOfGCLogFiles=10 ‐XX:GCLogFileSize=100M

2.Tomcat 加在JAVA_OPTS变量里

二、GC日志分析Demo

本地起一个服务,参数如下:

java -jar -Xloggc:./gc-%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCCause -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M .\microservice-eureka-server.jar

在这里插入图片描述

项目启动,打开日志文件,内容如下:
项目的配置参数
这里不仅配置了打印GC日志,还有相关的VM内存参数。
GC日志分析_第1张图片
GC情况分析
GC日志分析_第2张图片

2022-06-04T14:42:00.589+0800: 2.829: [Full GC (Metadata GC Threshold) [PSYoungGen: 4997K->0K(129024K)] [ParOldGen: 2890K->7520K(94720K)] 7887K->7520K(223744K), [Metaspace: 20864K->20864K(1069056K)], 0.0381591 secs][Times: user=0.16 sys=0.00, real=0.04 secs] 

1、2.829 :从jvm启动开始计算到这次GC经过的时间
2、Full GC(Metadata GC Threshold):指这是一次full gc,括号里是gc的原因, PSYoungGen是年轻代的GC, ParOldGen是老年代的GC,Metaspace是元空间的GC。
3、[PSYoungGen: 4997K->0K(129024K)] :三个数字分别对应GC之前占用年轻代的大小,GC之后年轻代占用,以及整个年轻代的大 小。
4、[ParOldGen: 2890K->7520K(94720K)] :三个数字分别对应GC之前占用老年代的大小,GC之后老年代占用,以及整个老年代的大小。
5、7887K->7520K(223744K):三个数字分别对应GC之前占用堆内存的大小,GC之后堆内存占用,以及整个堆内存 的大小。
6、[Metaspace: 20864K->20864K(1069056K)]:三个数字分别对应GC之前占用元空间内存的大小,GC之后元空间内存占用,以 及整个元空间内存的大小。
7、0.0381591 secs:该时间点GC总耗费时间

优化
从日志可以发现fullgc都是由于元空间不够导致的,所以我们可以将元空间调大点。

java -jar -Xloggc:./gc‐adjust-%t.log ‐XX:MetaspaceSize=256M ‐XX:MaxMetaspaceSize=256M -XX:+PrintGCDetails -XX:+PrintGCDateStamps ‐XX:+PrintGCTimeStamps -XX:+PrintGCCause -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M .\microservice-eureka-server.jar

调整完我们再看下gc日志发现已经没有因为元空间不够导致的fullgc了

三、gceasy可视化GC日志

上传gc文件利用可视化的界面来展现GC情况
官网地址:https://gceasy.io/
将上面生成的GC日志文件导入分析
1、可以看到年轻代、老年代、以及永久代的内存分配和最大使用情况。
GC日志分析_第3张图片
2、可以看到堆内存在GC之前和之后变化以及其他信息
GC日志分析_第4张图片

四、JVM参数汇总查看命令

打印出所有参数选项的默认值

java -XX:+PrintFlagsInitial

打印出所有参数选项在运行程序时生效的值

java -XX:+PrintFlagsFinal

文章仅供学习交流,侵权联系删除。

你可能感兴趣的:(JVM,java,JVM)