GC日志分析

阅读更多
GC:Garbage Collection 垃圾回收

(1)GC种类:
Scavenge GC 和 Full GC

选择合适的GC收集器(串行、并行、并发)、调整JVM heap的大小、调整young generation的比重。

(2)设置输出GC日志:
引用
CATALINA_OPTS="-server -Xms3072m -Xmx3072m -XX:PermSize=512m -XX:MaxPermSize=1024m -Xloggc:/usr/local/tomcat/logs/gc.log -XX:+PrintClassHistogram -XX:+PrintGCDetails"


堆设置
-Xms:初期Heap大小
-Xmx:最大Heap大小
-Xss:每个线程的堆栈大小
-XX:NewSize
-XX:MaxNewSize
-XX:PermSize
-XX:MaxPermSize
-XX:NewRatio
-XX:SurvivorRatio

垃圾回收统计设置
-Xloggc: GC日志文件输出
-XX:+PrintClassHistogram
-XX:+PrintGCDetails 输出GC详细信息(New、Old)
-XX:+PrintGCDateStamps 输出时间戳

持久代一般固定大小为64m

(3)GC日志例子:
引用
1718.835: [GC [PSYoungGen: 786432K->19883K(917504K)] 786568K->20019K(3014656K), 0.0222160 secs] [Times: user=0.14 sys=0.01, real=0.02 secs]

时间: [GC [<回收器名>: <新生代GC前大小> -> <新生代GC后大小>(<可用容量>)] -> <可用容量>, ]
“1718.835”代表了GC发生的时间(从Java虚拟机启动以来经过的秒数)。

引用
23006.031: [Full GC [PSYoungGen: 8874K->0K(1034752K)] [PSOldGen: 2092515K->135616K(2097152K)] 2101390K->135616K(3131904K) [PSPermGen: 57227K->56746K(524288K)], 0.5162470 secs] [Times: user=0.51 sys=0.00, real=0.52 secs]

时间: [[Full GC,新生代:回收前->回收之后(回收的容量)  老年代:前->后,总  永久区:前,后,总,用时

GC针对New、Full GC针对New/Old/Perm;
Full GC的时候会停止所有线程处理又名“Stop the World”
Full GC如果是调用System.gc()方法所触发的收集,那么在这里将显示“Full GC (System)”。如果间隔3600s的话就是定时GC处理。

GC发生时机:
New对象时Heap内存不足GC
System.gc(),可通过“-XX:+DisableExplicitGC”禁止
定时GC“-Dsun.rmi.dgc.server.gcInterval”默认1小时

(4)工具:
日志查看
GCViewer
HPjmeter

JDK标准工具jconsole、VisualVM
JDK附带命令jps(显示JVM的进程ID)、jstat(监视JVM的GC状况)、jstack(获取JVM堆栈信息)、jmap(获取JVM的HeapDump)、jhat(HeapDump分析工具

HeapDump分析工具
Eclipse Memory Analyzer

参考:
http://pengjiaheng.iteye.com/blog/518623
http://d.hatena.ne.jp/tanakakns/20120508/1336467306

你可能感兴趣的:(GC日志分析)