我正在设法让Full GC每10分钟运行一次。 在过去的早期版本的ColdFusion中,我使用了gcInterval JVM arg,但是我已经用详细的GC日志证实了Full GCs仍然在小时内发生(除非老一代得到如此充足以至于强制完全收集) 。
以下是来自ColdFusion10 \ cfusion \ bin \ jvm.config的完整JVM参数(为了便于阅读,添加了换行符)
还有什么我需要做的,以使这个工作在ColdFusion 10?
java.args= -server -Xms4072m -Xmx4072m -XX:PermSize=512m -XX:MaxPermSize=512m -Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000 -XX:+UseParallelGC -XX:+UseParallelOldGC -Xloggc:gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=1024K -Xbatch -Dcoldfusion.home={application.home} -Dcoldfusion.rootDir={application.home} -Dcoldfusion.libPath={application.home}/lib -Dorg.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER=true -Dcoldfusion.jsafe.defaultalgo=FIPS186Random -Dcoldfusion.classPath={application.home}/lib/updates,{application.home}/lib,{application.home}/lib/axis2,{application.home}/gateway/lib/,{application.home}/wwwroot/WEB-INF/flex/jars,{application.home}/wwwroot/WEB-INF/cfform/jars
为了任何人在Google上发现这一点,这里是Adobe工程师Rupesh Kumar在上面链接的票上给我的答案。
Brad,一般来说,JVM不会以固定的时间间隔运行GC。 决定何时运行完整的GC完全取决于JVM。 在RMI的情况下,由于对象被其他VM导出和使用,垃圾收集是分布式的,因此名称为dgc。 查看以下链接了解什么是DGC http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/index.jsp?topic=%2Fcom.ibm.java.doc.diagnostics.50%2Fdiag%2Funderstanding %2Frmi_dgc.html http://java.sys-con.com/node/35865
由于其性质,DGC需要运行GC的频率才能收集未使用的对象。 在JDK 1.6之前,这个默认的时间间隔是60秒,而从JDK 1.6开始,这个默认时间增加到了1个小时。
现在来谈谈为什么这个设置现在不工作,通过默认的RMI服务器不会在Tomcat中运行,因此DGC没有运行。 使用CF 9时,内置的服务器是JRun,它是一个堆栈应用程序服务器,当然会有一个RMI服务器在运行。
– 鲁佩什·库马尔
1小时Full Gc似乎是CF10使用它的Tomcat的一个function,是的,我也有试图获得定时的问题全GC出现; 我觉得最后这个东西很奇怪,因为这是一个不是Tomcat特性的JVM特性,除非它被Tomcat中的某个地方压住。 我也发现,CFpipe理员中的度量logging设置不会创build非常有用的度量标准; 就像他们在JRun一样。
让我开始说,我绝不是垃圾收集或JVMconfiguration方面的专家。 这是我的理解,你不能控制垃圾收集你正在尝试的事情。 您可以“询问”垃圾收集器以一定的时间间隔运行,但如果垃圾收集器不是必需的,则不会运行。
这里有两个对我来说非常有用的链接:
JVM内存pipe理和ColdFusion日志分析
性能调整
从上面的第一个链接:
垃圾收集运行的确切时间无法控制。 应用程序可能会要求JVM运行GC,但JVM不一定会在请求时运行GC,但会在下一个时机安排它。 通常,应用程序不要求JVM执行GC。 相反,JVM被configuration为使用关于如何最好地执行垃圾收集的几种可能的algorithm之一。 该algorithm的select是基于应用程序的需求,并可能以不同的方式影响性能。 目标是select一种适合您的硬件资源和应用需求的algorithm。 理想情况下,对于Web应用程序,希望select一种对用户体验产生最小干扰的algorithm。 在这里,-XX:+ UseParallelGC是安装ColdFusion时的默认configuration。