ColdFusion Java Heap прекрасно работает, когда открыто окно JRockit Console, но при использовании JRockit Console происходит сбой памяти, а затем происходит сбой
У нас были проблемы с нашим сервером 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? Мы не можем оставить это открытым как постоянное решение.
1 ответ
Я думал, что я опубликую обновление резолюции, которая в конечном итоге работает на нас. Я не совсем уверен, почему GC, кажется, работает намного лучше при использовании JRockit (особенно во время теста на утечку памяти), но мы нашли настройку для машины 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
Статьи блога: