JVM深入学习(二十四)-GC日志

垃圾回收的时候可以输出垃圾回收的详细信息,帮助我们分析垃圾回收的具体内容,了解一下gc日志的相关内容

1. 输出GC日志的相关参数

1.1 输出GC过程日志

-XX:+PringGC

输出格式

JVM深入学习(二十四)-GC日志


[GC (Allocation Failure)  2073K->784K(98304K), 0.0006580 secs]


GC: gc的类型 GC表示新生代gc FullGC表示新生代/老年代/方法去

Allocation Failure: 出现gc操作的原因,比如这个原因就是分配失败,就是分配内存的时候空间不足,就触发了GC

2073K->784K(98304K) 第一个是当前的内存,> 后的是回收后的内存大小 ()里的是需要的内存大小,即为了存放对象需要多少内存.

可以看到我们为了存放98304K大小的对象,进行了好几次GC,都没办法满足(我设置了最大堆内存),最终就会出现Java heap space

JVM深入学习(二十四)-GC日志


1.2 输出GC详细信息,包含堆内存空间信息

-XX:+PrintGCDetails

JVM深入学习(二十四)-GC日志

可以看到比上面的gc日志又增加了堆内存的详细信息

JVM深入学习(二十四)-GC日志


其中垃圾回收日志也增加了部分输出

[GC (Allocation Failure) [PSYoungGen: 2073K->744K(29696K)] 2073K->752K(98304K), 0.0005600 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
PSYoungGen: 代表着新生代回收 PS是垃圾回收器 Parallel Scavenge的缩写
Heap
 PSYoungGen      total 29696K, used 1280K [0x00000000fdf00000, 0x0000000100000000, 0x0000000100000000)
  eden space 25600K, 5% used [0x00000000fdf00000,0x00000000fe0401a8,0x00000000ff800000)
  from space 4096K, 0% used [0x00000000ff800000,0x00000000ff800000,0x00000000ffc00000)
  to   space 4096K, 0% used [0x00000000ffc00000,0x00000000ffc00000,0x0000000100000000)
 ParOldGen       total 68608K, used 567K [0x00000000f9c00000, 0x00000000fdf00000, 0x00000000fdf00000)
  object space 68608K, 0% used [0x00000000f9c00000,0x00000000f9c8dda8,0x00000000fdf00000)
 Metaspace       used 3165K, capacity 4496K, committed 4864K, reserved 1056768K
  class space    used 345K, capacity 388K, committed 512K, reserved 1048576K

这个堆内存的信息主要就是展示新生代/老年代/永久代(jdk1.8元空间)的总大小/使用率的情况

1.3 输出GC的耗时和时间信息

# 打印GC耗时
-XX:+PrintGCTimeStamps
# 打印GC发生的时间
-XX:+PrintGCDateStamps

这两个参数要配合上面的输出GC日志使用,单独使用没有效果,很好理解,没有输出gc日志,怎么打印gc的耗时?

例子:

JVM深入学习(二十四)-GC日志

输出:

JVM深入学习(二十四)-GC日志

可以看到增加了gc发生的时间和gc的耗时.

1.4 在GC前后打印堆的信息

-XX:+PrintHeapAtGC

可以看到有具体的详细信息:

JVM深入学习(二十四)-GC日志




2. 图示说明gc日志信息


2.2 YoungGC

JVM深入学习(二十四)-GC日志

2.3 FullGC

JVM深入学习(二十四)-GC日志



3. 工具分析GC日志

首先需要存储gc日志,参数如下:

-Xloggc:[路径]

#例:

-Xloggc:./gclogs/gc.log

使用的工具有多种:

GCViewer,GCEasy,GCHisto,GCLogViewer,Hpjmeter,garbagecat等.

3.1 GCViewer

GCViewer下载地址: https://github.com/chewiebug/GCViewer/releases

GCViewer下载后的jar包,直接点击运行接口

JVM深入学习(二十四)-GC日志

导入gc日志文件后可以看到:

JVM深入学习(二十四)-GC日志

3.2 GCEasy

GCEasy在线地址: https://gceasy.io/

选择文件

JVM深入学习(二十四)-GC日志

可以看到具体的信息

JVM深入学习(二十四)-GC日志




3.3 总结

工具的作用是帮助我们分析日志,要知道在生产环境很长时间才会出现一次FullGC,认为排查比较困难,这个时候就需要依赖工具了.

上一篇:深入理解JVM(一)——JVM内存模型


下一篇:JVM深入学习(二十)-开创并发回收的CMS垃圾回收器