1

我们的 ColdFusion 服务器和正确配置 JRE 时遇到问题。为了解决这个问题,我们安装了 Oracle JRockit 并切换了 jvm.config 以尝试查找任何内存泄漏。

安装 JRockit 后,我​​们的服务器运行得比以往任何时候都好。我们将 JRockit 程序和控制台打开了几天,内存使用量保持在 200mb 以下。我们最终关闭了服务器上的程序,并且立即返回了内存使用问题。

这是来自 FusionReactor 的 Java 堆的屏幕截图,用于说明正在发生的事情。

由于我还没有足够的声誉点,所以我无法直接在此处发布此内容: 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.

有谁知道为什么垃圾收集 (GC) 在 JRockit 控制台窗口打开并运行的情况下工作得更好?我们不能将其作为永久解决方案开放。

4

1 回答 1

0

我想我会发布一个最终为我们工作的决议的更新。我不确定为什么在使用 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 如何调优 JVM 第 1 部分

Trunkful.com CF_GEMS 如何调优 JVM 第 2 部分

于 2012-09-05T23:02:00.310 回答