GC 日志分析

不一样的JVM及其选项会输出不一样的日志。tomcat

GC 日志

生成下面日志使用的选项:-XX:+PrintGCTimeStamps   -XX:+PrintGCDetails  -Xloggc:d:/GClogs/tomcat6-gc.log多线程

4.231: [GC 4.231: [DefNew: 4928K->512K(4928K), 0.0044047 secs] 6835K->3468K(15872K), 0.0045291 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
 
4.445: [Full GC (System) 4.445: [Tenured: 2956K->3043K(10944K), 0.1869806 secs] 4034K->3043K(15872K), [Perm : 3400K->3400K(12288K)], 0.1870847 secs] [Times: user=0.05 sys=0.00, real=0.19 secs]

最前面的数字 4.2314.445 表明虚拟机启动以来的秒数。spa

[GC[Full GC 是垃圾回收的停顿类型,而不是区分是新生代仍是年老代,若是有 Full 说明发生了 Stop-The-World 。若是是调用 System.gc() 触发的,那么将显示的是 [Full GC (System)线程

接下来的 [DefNew,  [Tenured,  [Perm 表示 GC 发生的区域,区域的名称与使用的 GC 收集器相关。
Serial 收集器中新生代名为 “Default New Generation”,显示的名字为 “[DefNew”。对于ParNew收集器,显示的是 “[ParNew”,表示 “Parallel New Generation”。 对于 Parallel Scavenge 收集器,新生代名为 “PSYoungGen”。年老代和永久代也相同,名称都由收集器决定。日志

方括号内部显示的 “4928K->512K(4928K)” 表示 “GC 前该区域已使用容量  -> GC 后该区域已使用容量 (该区域内存总容量) ”。code

再日后的 “0.0044047 secs” 表示该区域GC所用时间,单位是秒。内存

再日后的 “6835K->3468K(15872K)” 表示 “GC 前Java堆已使用容量  ->  GC后Java堆已使用容量 (Java堆总容量)”。虚拟机

再日后的 “0.0045291 secs” 是Java堆GC所用的总时间。io

最后的 “[Times: user=0.00 sys=0.00, real=0.00 secs]” 分别表明 用户态消耗的CPU时间、内核态消耗的CPU时间 和 操做从开始到结束所通过的墙钟时间。墙钟时间包括各类非运算的等待耗时,如IO等待、线程阻塞。CPU时间不包括等待时间,当系统有多核时,多线程操做会 叠加这些CPU时间,因此user或sys时间会超过real时间。垃圾回收

相关文章
相关标签/搜索