Por que os Full GCs não estão em execução no meu gcInterval que eu configurei?

1
  • Atualização 10 do ColdFusion 10
  • Windows Server 2008 R2
  • Java 1.7.0_21

Estou tentando descobrir que o Full GCs é executado a cada 10 minutos. Eu usei o gcInterval JVM arg no passado em versões anteriores do ColdFusion com sucesso, mas eu confirmei com logs detalhados de GC que os Full GCs ainda estão acontecendo na hora (a menos que o Old Gen fique tão cheio que force uma coleção completa) .

Aqui estão os argumentos completos da JVM do ColdFusion10 \ cfusion \ bin \ jvm.config (quebras de linha adicionadas para facilitar a leitura)

Há algo mais que eu preciso fazer para que isso funcione no 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
    
por Brad Wood 25.06.2013 / 19:51

3 respostas

1

Para qualquer pessoa que encontre isso no Google, aqui está a resposta que me foi dada pelo engenheiro da Adobe Rupesh Kumar no ticket ao qual eu estava vinculado.

Brad, em geral, a JVM não executa o GC em um intervalo regular fixo. É completamente da responsabilidade da JVM decidir quando executar o GC completo. No caso do RMI, uma vez que os objetos são exportados e usados por outra VM, a coleta de lixo é distribuída e, portanto, o nome dgc. Confira os seguintes links para entender o que o DGC é link link

Devido à sua natureza, o DGC precisa ter uma frequência quando o GC pode ser executado para que os objetos não utilizados possam ser coletados. Antes do JDK 1.6, esse intervalo padrão era de 60 segundos e, a partir do JDK 1.6, isso foi aumentado para 1 hora por padrão.

Agora, por que essa configuração não está funcionando agora, por defaulu o servidor RMI não estaria sendo executado no Tomcat e, portanto, o DGC não está sendo executado. Com o CF 9, o servidor embutido era o JRun, que é o servidor de aplicativos de pilha que, é claro, teria um servidor RMI em execução.

- Rupesh Kumar

    
por 12.12.2013 / 12:25
0

1 hora Full Gc parece ser uma característica do uso do Tomcat of CF10 e sim eu também tive problemas tentando obter Full GC's cronometrados; Acho esse último item estranho, já que esse é um recurso da JVM que não é um recurso do Tomcat, a menos que esteja sendo suprimido em algum lugar dentro do Tomcat. Eu também descobri que a configuração de registro de métricas no CF Admin não cria métricas que são muito úteis; nada como eles estavam em JRun.

    
por 26.06.2013 / 02:26
0

Deixe-me começar dizendo que não sou de forma alguma um especialista em coleta de lixo ou configuração da JVM para esse assunto. É meu entendimento que você não pode controlar a coleta de lixo no assunto que você está tentando. Você pode "pedir" ao coletor de lixo que execute em um determinado intervalo, mas se ele, coleta de lixo, não for necessário, ele não será executado.

Aqui estão dois links que se mostraram muito úteis para mim:

Gerenciamento de memória da JVM e ColdFusion Análise de Log

Ajuste de desempenho

Do primeiro link acima:

The exact time Garbage Collection is run can't be controlled. An application could ask the JVM to run GC, but the JVM will not necessarily run GC when requested but will schedule it at the next opportunity. Normally, applications don't ask the JVM to perform GC. Instead, the JVM is configured to use one of several possible algorithms about how best to perform Garbage Collection. The algorithm is chosen is based on needs of the application and can affect performance in different ways. The goal is to choose an algorithm that works well for your hardware resources and application needs. Ideally for web applications it is desirable to choose an algorithm that produces minimal interruption to the user experience. The one here, -XX:+UseParallelGC, is the default configuration when ColdFusion is installed.

    
por 26.06.2013 / 18:07