Glassfish Server JVM Tunning

2

Eu preciso configurar um servidor Oracle Glassfish e depois de algumas pesquisas eu criei uma configuração que gostaria de propor. Quaisquer sugestões e / ou correções são muito bem vindas.

Detalhes do meu hardware / SO (relevante):

  • Ubuntu 12,04 LTS 64bits
  • JDK 7.0.28
  • RAM de 12 GB
  • 4 Processadores (com 6 núcleos cada)

Minhas Opções da JVM

  • -server
  • -Xms9g
  • -Xmn1g ( Q1 )
  • -Xmx9g
  • -Xss128k ( Q2 )
  • -XX: + UseCompressedOops
  • -XX: + DisableExplicitGC
  • -XX: + UseConcMarkSweepGC
  • -XX: ParallelGCThreads = 18
  • -XX: + UseParallelOldGC
  • -XX: SurvivorRatio = 8 ( Q3 )
  • -XX: MaxTenuringThreshold = 15 ( Q4 )
  • -XX: MaxPermSize = 1g ( Q5 )
  • -XX: PermSize = 512 m

Q1 - Alguns sugerem uma razão de 33% ( -XX:NewRatio=3 ) que resultaria em um 3g Eden . Não seria um espaço muito grande para o GC (com seus 18 threads) limpar?

Q2 - Não consegui encontrar um bom valor para isso.

Q3 - Essa é a taxa padrão. Alguns dizem que essa opção não altera o desempenho.

Q4 - igual ao Q3.

Q5 - Nenhuma ideia do que seria um bom valor para isso.

    
por Daniel Camargo 22.05.2013 / 20:35

1 resposta

1

Você deve adicionar opções de criação de log do JVM / GC, isso permitirá que você rastreie as atividades do GC e ajudará você a determinar os valores ideais para Q1, Q3, Q4, Q5. Além disso, o log do GC quase não tem sobrecarga, portanto, você pode usá-lo com segurança no ambiente de produção:

log de JVM / GC ativado por exemplo por: -XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion

Q1: 3 GB não é muito grande para o tamanho YounGen se você considerar que o tamanho total do heap é de 9 GB. Você precisa verificar os registros do GC para ver qual é o tamanho ideal.

Q2: Isso provavelmente é suficiente, você também pode testar -Xss256k .

Q3: A opção -XX:SurvivorRatio é ignorada, a menos que você use -XX-UseAdaptiveSizePolicy , por isso as pessoas não vêem os efeitos dessa opção. Considere também -XX:InitialSurvivorRatio=3 e -XX:TargetSurvivorRatio=90 . Mas tenha cuidado ao desativar o dimensionamento adaptativo e faça isso apenas se você souber o que está fazendo.

Q4: Esse é um valor correto, embora eu não tenha visto o efeito. O GC pode decidir promover os objetos anteriormente. Use -XX:+PrintTenuringDistribution para monitorar isso.

Q5: Você pode determinar isso nos registros do GC, que mostrarão a ocupação do PermGen.

Parâmetros adicionais que você poderia considerar:

  • -XX:+AggressiveOpts
  • -XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC para depurar problemas do GC
  • -XX:-UseBiasedLocking - desabilitar o bloqueio tendencioso geralmente é recomendado para servidores de aplicativos
  • -XX:+UseLargePages - isso ajudará seu desempenho, mas você também precisa configurar isso no sistema operacional.

Algumas dicas úteis podem ser encontradas no livro Desempenho Java .

    
por 22.05.2013 / 21:54