我们的ColdFusion服务器一直存在问题,并且无法正确配置JRE。为了解决此问题,我们安装了Oracle JRockit并切换了jvm.config尝试查找任何内存泄漏。
一旦安装了JRockit,我们的服务器就会比以往更好地运行。我们将JRockit程序和控制台保持打开状态数天,并且内存使用量保持在200mb以下。我们最终关闭了服务器上的程序,并立即返回了内存使用问题。
这是FusionReactor的Java Heap的屏幕截图,以说明发生了什么。
由于尚无足够的声望点,因此无法直接在此处发布:
http://www.weblisters.com/icm/FusionReactorJavaHeap-JRockit-Console.png
以下是jvm.config文件中的主要设置:
java.home=C:/Progra~2/Java/jrockit-jdk1.6.0_33-R28.2.4-4.1.0/jre
java.args=-server -Xms1024m -Xmx1024m -Xgc:parallel -Dsun.io.useCanonCaches=false -Dcoldfusion.rootDir={application.home}/ -XX:+HeapDumpOnOutOfMemoryError -Xmanagement:ssl=false,authenticate=false,autodiscovery=true
关闭Jrockit控制台后,便立即抛出此错误:
错误:tsStartJavaThread(src / jvm / threads / vmthread / lifecycle.c:1096)中没有足够的存储空间来处理此命令。
Attempting to allocate 1G bytes There is insufficient native memory for the Java Runtime Environment to continue.
有谁知道为什么在JRockit Console窗口打开并运行时垃圾收集(GC)看起来能更好地工作?我们不能将其作为永久解决方案开放。
最佳答案
我以为我会发布解决方案的更新,最终为我们工作。我不确定为什么使用JRockit时GC似乎运行得更好(特别是在内存泄漏测试期间),但是我们发现了JVM机器的设置似乎可以控制我们调用GC的频率。 。
-Dsun.rmi.dgc.client.gcInterval=27000 -Dsun.rmi.dgc.server.gcInterval=27000
这两个设置允许我们根据需要频繁或不频繁地专门调用GC,并且需要从默认设置进行更改。我们还根据一些很棒的博客文章(在底部链接)更新了整个java.args行。这是我们更新的java.args,它使我们的服务器正常运行。
java.args= -server -DJINTEGRA_NATIVE_MODE -DJINTEGRA_PREFETCH_ENUMS -Xmx1024m -Xms1024m -XX:MaxPermSize=192m -XX:PermSize=192m -XX:+UseParallelGC -Dsun.rmi.dgc.client.gcInterval=27000 -Dsun.rmi.dgc.server.gcInterval=27000 -Dcoldfusion.rootDir={application.home}/ -Djava.compiler=NONE -Xnoagent -Xdebug
博客文章:
Trunkful.com CF_GEMS How to Tune the JVM Part 1
Trunkful.com CF_GEMS How to Tune the JVM Part 2