java - 当 JRockit Console 窗口打开时,ColdFusion Java 堆工作正常,但当 JRockit Console 关闭时,内存使用量会急剧上升然后崩溃

标签 java coldfusion jvm heap-memory jrockit

我们的 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 控制台窗口打开并运行时似乎工作得更好?我们不能将其作为永久解决方案保持开放。

最佳答案

我想我应该发布一个最终对我们有用的决议的更新。我不确定为什么在使用 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

关于java - 当 JRockit Console 窗口打开时,ColdFusion Java 堆工作正常,但当 JRockit Console 关闭时,内存使用量会急剧上升然后崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11800271/

相关文章:

java - 如何动态更改 tcp-ibound-gateway 使用的端口

java - CoderException : java. io.EOFException 在使用 Jackson 对使用 CustomCoder 编码的 Json 值执行 GroupByKey 时

java - 在 Hadoop 中以序列文件格式写入/读取键/值对。

Java 字节码缺少局部变量表

java - 无法将服务代理 (sun.jvm.hotspot.HSDB) 连接到在 Windows 7(32 位)上运行的 jvm

java - 很长的 GC 周期是否可能导致 "Connection refused"异常?

java - 选择图像时的 NPE

coldfusion - 将空字符串转换为整数

MySQL根据字段值内连接同一个表

coldfusion - 在不使用 cfqueryparam 的情况下防止 SQL 注入(inject)