总结来说,目前有两个问题会自动触发系统fullgc.
一: tomcat6.0.35的server.xml配置的
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
会触发1小时一次fullgc.
Class<?> clazz = Class.forName("sun.misc.GC");
Method method = clazz.getDeclaredMethod( "requestLatency", new Class[] {long.class});
method.invoke(null, Long.valueOf(3600000)); # 一个小时3万六千秒 #反射方式调了一把
tomcat6.0.43以后fix了这个问题。
tomcat7高版本【 现在线上镜像tomcat7.0.61】 也不会有这个问题。
二: cxf-common-utilities-2.5.2-sources.jar的 org.apache.cxf.common.logging.JDKBugHacks
代码和上面差不多,
默认也会触发一小时fullgc一次.
对于性能要求高的高并发的系统,一小时一次fullgc,会周期性影响性能。
1建议升级tomcat到7以上
2 如果一定要用cxf的话,升级cxf到2.8.0,并且在jvm启动参数添加,- Dorg.apache.cxf.JDKBugHacks.gcRequestLatency=true
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->