各位小弟最近在工程中遇到一gc问题,在tomcat中配制的是并发收集,但总会过段时间就出现一次full gc。
以下是配制
JAVA_OPTS="$JAVA_OPTS -d64 -server -Xmx8g -Xms8g -Xmn3g -XX:PermSize=128m -XX:MaxPermSize=1024m -Xss512k -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:SurvivorRatio=1 -XX:+CMSClassUnloadingEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseBiasedLocking -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSParallelReEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+PrintGCDetails -Xloggc:../logs/rifmgt/gc.log"
这是出现full gc前后部分日志
3596.017: [GC 3596.017: [ParNew: 1049595K->1177K(2097152K), 0.0381990 secs] 1236620K->188203K(7340032K), 0.0386920 secs] [Times: user=0.05 sys=0.00, real=0.04 secs]
3597.455: [GC 3597.455: [ParNew: 1049753K->1197K(2097152K), 0.0381020 secs] 1236779K->188222K(7340032K), 0.0386080 secs] [Times: user=0.04 sys=0.00, real=0.04 secs]
3598.784: [GC 3598.784: [ParNew: 1049763K->1209K(2097152K), 0.0388750 secs] 1236788K->188235K(7340032K), 0.0393930 secs] [Times: user=0.06 sys=0.00, real=0.04 secs]
3599.944: [GC 3599.945: [ParNew: 1049785K->1579K(2097152K), 0.0392930 secs] 1236811K->188605K(7340032K), 0.0397810 secs] [Times: user=0.05 sys=0.00, real=0.04 secs]
3601.118: [Full GC (System) 3601.118: [CMS: 187025K->113740K(5242880K), 0.8019600 secs] 1129480K->113740K(7340032K), [CMS Perm : 57763K->50540K(131072K)], 0.8024830 secs] [Times: user=0.80 sys=0.00, real=0.80 secs]
3603.034: [GC 3603.034: [ParNew: 1048576K->3321K(2097152K), 0.0288210 secs] 1162316K->117061K(7340032K), 0.0293470 secs] [Times: user=0.03 sys=0.00, real=0.03 secs]
3604.046: [GC 3604.046: [ParNew: 1051897K->2217K(2097152K), 0.0280370 secs] 1165637K->115958K(7340032K), 0.0285450 secs] [Times: user=0.03 sys=0.00, real=0.03 secs]
3605.153: [GC 3605.154: [ParNew: 1050793K->1283K(2097152K), 0.0265540 secs] 1164534K->115023K(7340032K), 0.0270500 secs] [Times: user=0.03 sys=0.00, real=0.03 secs]
3606.494: [GC 3606.494: [ParNew: 1049859K->1338K(2097152K), 0.0278910 secs] 1163599K->115078K(7340032K), 0.0283100 secs] [Times: user=0.04 sys=0.00, real=0.03 secs]
361,在jconsole监控过程中,看到Perm 区远远没有满足触发full gc的条件
2,old区设置触发gc的比值 (Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn 算出为60,应该也不会出现空间不够而触发上面配制怎么有误了,要如何设置才能避免老出现full gc (大概1~2钟头出现一次)
以下是配制
JAVA_OPTS="$JAVA_OPTS -d64 -server -Xmx8g -Xms8g -Xmn3g -XX:PermSize=128m -XX:MaxPermSize=1024m -Xss512k -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:SurvivorRatio=1 -XX:+CMSClassUnloadingEnabled -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseBiasedLocking -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSParallelReEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+PrintGCDetails -Xloggc:../logs/rifmgt/gc.log"
这是出现full gc前后部分日志
3596.017: [GC 3596.017: [ParNew: 1049595K->1177K(2097152K), 0.0381990 secs] 1236620K->188203K(7340032K), 0.0386920 secs] [Times: user=0.05 sys=0.00, real=0.04 secs]
3597.455: [GC 3597.455: [ParNew: 1049753K->1197K(2097152K), 0.0381020 secs] 1236779K->188222K(7340032K), 0.0386080 secs] [Times: user=0.04 sys=0.00, real=0.04 secs]
3598.784: [GC 3598.784: [ParNew: 1049763K->1209K(2097152K), 0.0388750 secs] 1236788K->188235K(7340032K), 0.0393930 secs] [Times: user=0.06 sys=0.00, real=0.04 secs]
3599.944: [GC 3599.945: [ParNew: 1049785K->1579K(2097152K), 0.0392930 secs] 1236811K->188605K(7340032K), 0.0397810 secs] [Times: user=0.05 sys=0.00, real=0.04 secs]
3601.118: [Full GC (System) 3601.118: [CMS: 187025K->113740K(5242880K), 0.8019600 secs] 1129480K->113740K(7340032K), [CMS Perm : 57763K->50540K(131072K)], 0.8024830 secs] [Times: user=0.80 sys=0.00, real=0.80 secs]
3603.034: [GC 3603.034: [ParNew: 1048576K->3321K(2097152K), 0.0288210 secs] 1162316K->117061K(7340032K), 0.0293470 secs] [Times: user=0.03 sys=0.00, real=0.03 secs]
3604.046: [GC 3604.046: [ParNew: 1051897K->2217K(2097152K), 0.0280370 secs] 1165637K->115958K(7340032K), 0.0285450 secs] [Times: user=0.03 sys=0.00, real=0.03 secs]
3605.153: [GC 3605.154: [ParNew: 1050793K->1283K(2097152K), 0.0265540 secs] 1164534K->115023K(7340032K), 0.0270500 secs] [Times: user=0.03 sys=0.00, real=0.03 secs]
3606.494: [GC 3606.494: [ParNew: 1049859K->1338K(2097152K), 0.0278910 secs] 1163599K->115078K(7340032K), 0.0283100 secs] [Times: user=0.04 sys=0.00, real=0.03 secs]
361,在jconsole监控过程中,看到Perm 区远远没有满足触发full gc的条件
2,old区设置触发gc的比值 (Xmx-Xmn)*(100-CMSInitiatingOccupancyFraction)/100>=Xmn 算出为60,应该也不会出现空间不够而触发上面配制怎么有误了,要如何设置才能避免老出现full gc (大概1~2钟头出现一次)
解决方案 »
- MAVEN总是新弹出个java.exe命令框执行
- JBPM4.4 用户组问题,急急急!
- 求助各位大神,关于ORACLE JDBC驱动的PreparedStatement setString方法处理char字段的问题
- 禁止通过地址栏直接访问后台
- JBoss:javax.naming.NameNotFoundException: AccountBean not bound
- 求救。。。。。。
- 问个关于PO转VO的问题。
- 使用 import javax.xml.parsers.DocumentBuilder 读取XML配置文件路径问题??
- 大家谈一谈struts里的actionform
- 那位能给一点关于 hibernate 经典文章 80分
- Spring配置文件在tomcat启动时报错
- SSH整合的常见异常SessionFactory问题
http://hllvm.group.iteye.com/group/topic/27945
这个参数也可以,不可这个参数有一定的危险性,可用下面参数代替
-XX:+ExplicitGCInvokesConcurrent jdk1.6
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses jdk1.6 update4后可用(如果可以建议用此参数)这两参数不会禁用System.gc(),而是把full gc用cms代替,在CMS中,并发GC不对old gen做压缩,而full GC是stop-the-world的并且会做压缩