[ https://issues.apache.org/jira/browse/CXF-4313?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Kulp resolved CXF-4313. ------------------------------ Resolution: Fixed Fix Version/s: 2.3.11 2.4.8 2.5.4 2.6.1 Assignee: Daniel Kulp Added some flags/hooks in there to be able to turn off each hack (or turn off all of them). > Hourly GC Caused by Framework - Unable to GC tune application if using > framework. > --------------------------------------------------------------------------------- > > Key: CXF-4313 > URL: https://issues.apache.org/jira/browse/CXF-4313 > Project: CXF > Issue Type: Bug > Components: Core > Affects Versions: 2.5 > Reporter: Michael André Pearce > Assignee: Daniel Kulp > Fix For: 2.6.1, 2.5.4, 2.4.8, 2.3.11 > > > After looking into why our application GC tuning wasn't working/taking any > effect and full gc continued to occur every hour, and saw from the GC logs > that System.GC was being called, traced it down to our use of CXF framework, > where we are using it for HTTP WS-SOAP Service calls. > Seems that the following is being set code-ally by the JDKBugHacks, looking > through the code history seems this got added on the 28th Feb 2011. > From the comments it seems this has been added due to RMI. Not 100% sure why > you're wanting to codally override RMI setting this up (especially as in jdk > 6 + it by default is the same value 1 hour) and it is well documented for > developers who want to tweek their application (especially if they're on > earlier java versions) with regards to GC how to change this setting using > the following two jvm switches to change the interval anyhow. > > -Dsun.rmi.dgc.server.gcInterval > -Dsun.rmi.dgc.client.gcInterval > And can actually turn off completely by setting it to 0x7ffffffffffffffe but > that is by the by. > The issues i have is that as a user of the framework, > a) i am unable to turn off the hard coding by any feature flag, and this > affects my gc turning of my application. > b) If a user is using CXF with no RMI why set this up? Only setup if using > RMI if it is really need so that it doesnt effect users of the framework > using it for http service calls. > I take it that these "hacks" are influenced heavily from tomcat, but this is > because of its servlet hot deployable class loading features. Even so for > that tomcat do allow two options to disable this feature if you wish, i.e. u > don't want hot deploy to tomcat thus not worried about this leak prevention > with the class loader and you want to fine tune your applications gc for the > applications requirements and SLA. They provide the following nice features: > Configure to not add the gcDaemonProtection > <Listener > className="org.apache.catalina.core.JreMemoryLeakPreventionListener" > gcDaemonProtection="false"/> > And the ability to Disable the listener altogether > Code in question in the JDKBugHacks class. > // Several components end up calling: > // sun.misc.GC.requestLatency(long) > // > // Those libraries / components known to trigger memory leaks > due to > // eventual calls to requestLatency(long) are: > // - javax.management.remote.rmi.RMIConnectorServer.start() > try { > Class<?> clazz = Class.forName("sun.misc.GC"); > Method method = clazz.getDeclaredMethod("requestLatency", > new Class[] {Long.TYPE}); > method.invoke(null, Long.valueOf(3600000)); > } catch (Throwable e) { > //ignore > } -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira