25、JVM实战:GC日志

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

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

1.1 输出GC过程日志

-XX:+PringGC

输出格式
*

[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
*

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

-XX:+PrintGCDetails

*
可以看到比上面的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的耗时?

例子:
*
输出:
*
可以看到增加了gc发生的时间和gc的耗时.

1.4 在GC前后打印堆的信息

-XX:+PrintHeapAtGC

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

2. 图示说明gc日志信息

2.2 YoungGC

*

2.3 FullGC

*

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包,直接点击运行接口
*
导入gc日志文件后可以看到:
*

3.2 GCEasy

GCEasy在线地址: https://gceasy.io/
选择文件
*
可以看到具体的信息
*

3.3 总结

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

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: