十三、分析 GC 日志
GC 日志分析
GC 分类:
针对HotSpot VM的实现,它里面的GC按照回收区域又分为两大种类型:一种是部分收集(Partial GC),一种是整堆收集(Full GC)
参见:5、Minor GC、Major GC、Full GC详解
💡 内存分配与垃圾回收的参数列表:
-XX:+PrintGC:输出 GC 日志(或 -verbose:gc);
-XX:+PrintGCDetails:输出 GC 详细日志;
-XX:+PrintGCTimeStamps:输出 GC 的时间戳
-XX:+PrintGCDateStamps:输出 GC 的时间戳(以日期形式)
-XX:+PrintHeapAtGC:在进行 GC 的前后打印出堆的信息
-Xloggc:…/logs/gc.log:日志文件的输出路径
日志分析工具:GCViewer、GCEasy
建议用 GCEasy
日志分析:
-XX:+PrintGC:输出 GC 日志(或 -verbose:gc)
-verbose:gc -XX:+PrintGCDetails
-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStmps
- “[ GC” 和 “[ Full GC” 表示这次垃圾收集的停顿类型,如果有 Full GC 说明发生了 STW;
- 使用 Serial 收集器在新生代的名字是 Default New Generation,因此显示的是 “[ DefNew ”
- 使用 ParNew 收集器在新生代显示的是 “[ ParNew ”
- 使用 Parallel Scavenge 收集器在新生代显示的是 “[ PSYoungGen”
- 老年代的收集和新生代道理一样,名字也是收集器决定的;
- 使用 G1 收集器的话,会显示 ”garbage - first heap”
- Allocation Failure:表明本次引起 GC 的原因是因为在年轻代中没有足够的空间能够存储新的数据
- [PSYoungGen:5986K → 696K(8704K)] 5986K → 704K(9216K):
- 中括号内:GC 回收前年轻代大小 → 回收后大小 (年轻代总大小)
- 括号外:GC 回收前年轻代和老年代大小 → 回收后大小(年轻代和老年代总大小)
- user 代表用户态回收耗时,sys 内核态回收耗时,rea 实际耗时。由于多核的原因,实际总和可能会超过 real 时间