We have been having issues with our ColdFusion server and getting the JRE configured properly. In order to troubleshoot what was going on with this, we installed Oracle JRockit and switched over the jvm.config to try and find any memory leaks.
Once we installed JRockit our server was running better than ever. We kept the JRockit Program and Console open for several days and our memory usage stayed under 200mb. We finally closed the program on the server and immediately the memory usage problem returned.
Here is a screen shot of the Java Heap from FusionReactor to illustrate what is going on.
I could not post this directly here since I do not have enough reputation points yet: http://www.weblisters.com/icm/FusionReactorJavaHeap-JRockit-Console.png
Here are the main settings from our jvm.config file:
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
This error was thrown right after we closed the Jrockit console: Error: Not enough storage is available to process this command in 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.
Does anyone know why garbage collection (GC) appears to work so much better with the JRockit Console window open and running? We can't leave it open as a permanent solution.