Почему полные GC не работают на моем gcInterval, который я установил?

  • ColdFusion 10, обновление 10
  • Windows Server 2008 R2
  • Java 1.7.0_21

Я пытаюсь рассчитать, что Full GC будут запускаться каждые 10 минут. В прошлом я успешно использовал аргумент gcInterval JVM в более ранних версиях ColdFusion, но с подробными журналами GC я подтвердил, что Full GC все еще происходят в час (если Old Gen не становится настолько полным, что он вызывает полную коллекцию),

Вот полные аргументы JVM из ColdFusion10\cfusion\bin\jvm.config (разрывы строк добавлены для удобства чтения)

Есть ли что-то еще, что мне нужно сделать, чтобы это работало на ColdFusion 10?

java.args=
-server
-Xms4072m
-Xmx4072m
-XX:PermSize=512m
-XX:MaxPermSize=512m
-Dsun.rmi.dgc.client.gcInterval=600000
-Dsun.rmi.dgc.server.gcInterval=600000
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-Xloggc:gc.log
-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=1024K
-Xbatch
-Dcoldfusion.home={application.home}
-Dcoldfusion.rootDir={application.home}
-Dcoldfusion.libPath={application.home}/lib
-Dorg.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER=true
-Dcoldfusion.jsafe.defaultalgo=FIPS186Random
-Dcoldfusion.classPath={application.home}/lib/updates,{application.home}/lib,{application.home}/lib/axis2,{application.home}/gateway/lib/,{application.home}/wwwroot/WEB-INF/flex/jars,{application.home}/wwwroot/WEB-INF/cfform/jars

3 ответа

Решение

Ради того, чтобы кто-нибудь нашел это в Google, вот ответ, предоставленный мне инженером Adobe Рупешем Кумаром на билет, который я связал выше.


Брэд, в общем, JVM не запускает GC на фиксированном регулярном интервале. Решение о том, когда запускать полный сборщик мусора, полностью зависит от JVM. В случае RMI, поскольку объекты экспортируются и используются другими ВМ, сборка мусора распределяется и, следовательно, называется dgc. Проверьте следующие ссылки, чтобы понять, что такое DGC http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/index.jsp?topic=%2Fcom.ibm.java.doc.diagnostics.50%2Fdiag%2Funderstanding%2Frmi_dgc.html http://java.sys-con.com/node/35865

Из-за своей природы DGC должна иметь частоту, когда GC может работать, чтобы неиспользуемые объекты можно было собирать. До JDK 1.6 этот интервал по умолчанию составлял 60 секунд, а с JDK 1.6 и далее он был увеличен до 1 часа по умолчанию.

Теперь перейдем к тому, почему этот параметр сейчас не работает, по умолчанию RMI-сервер не будет работать в Tomcat и, следовательно, DGC не работает. В CF 9 встроенным сервером был JRun, который является сервером стековых приложений, на котором, разумеется, будет работать сервер RMI.

--Рупеш Кумар

1 час Full Gc, кажется, является особенностью использования Tomcat из CF10, и да, у меня тоже были проблемы, пытавшиеся получить синхронизированные Full GC; Я нахожу этот последний элемент странным, поскольку это функция JVM, а не функция Tomcat, если только она не подавлена ​​где-то внутри Tomcat. Я также обнаружил, что настройка ведения журнала метрик в CF Admin не создает метрики, которые очень полезны; ничего, как они были в JRun.

Позвольте мне начать с того, что я ни в коем случае не являюсь экспертом в области сборки мусора или конфигурации JVM. Насколько я понимаю, вы не можете контролировать сборку мусора в том случае, если вы пытаетесь. Вы можете "попросить" сборщик мусора запускаться с определенным интервалом, но если он, сборщик мусора, не нужен, он не запустится.

Вот две ссылки, которые оказались очень полезными для меня:

Управление памятью JVM и анализ журнала ColdFusion

Настройка производительности

С первой ссылки выше:

Точное время сбора мусора не контролируется. Приложение может попросить JVM запустить GC, но JVM не обязательно будет запускать GC при запросе, но запланирует это при следующей возможности. Обычно приложения не просят JVM выполнить GC. Вместо этого JVM настроен на использование одного из нескольких возможных алгоритмов о том, как лучше всего выполнять сборку мусора. Выбранный алгоритм основан на потребностях приложения и может по-разному влиять на производительность. Цель состоит в том, чтобы выбрать алгоритм, который хорошо работает для ваших аппаратных ресурсов и потребностей приложений. В идеале для веб-приложений желательно выбрать алгоритм, обеспечивающий минимальное вмешательство в работу пользователя. Здесь -XX:+UseParallelGC - это конфигурация по умолчанию, когда установлена ​​ColdFusion.

Другие вопросы по тегам