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 .