欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GC日志分析

程序员文章站 2022-05-01 09:19:03
...
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:<file_path> 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后大小>(<可用容量>)] <Heap在GC前大小> -> <Heap在GC后大小><可用容量>, <GC中jvm暂停时间>]
“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