У нас возникли проблемы с нашим сервером ColdFusion и с правильной настройкой JRE. Чтобы выяснить, что с этим происходит, мы установили Oracle JRockit и переключили jvm.config, чтобы попытаться найти любые утечки памяти.
После того, как мы установили JRockit, наш сервер стал работать лучше, чем когда-либо. Мы держали программу и консоль JRockit открытыми в течение нескольких дней, а объем используемой памяти не превышал 200 МБ. Наконец, мы закрыли программу на сервере, и проблема с использованием памяти сразу же вернулась.
Вот снимок экрана Java Heap из FusionReactor, чтобы проиллюстрировать, что происходит.
Я не мог опубликовать это здесь, так как у меня пока недостаточно очков репутации: 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 Console? Мы не можем оставить его открытым в качестве постоянного решения.