O desempenho diminui no Java 7

Desempenho lento no Java 7

O desempenho do AEM no Java 7 diminui repentinamente, e os despejos de thread não mostram nenhuma evidência de um thread culpado; muitos threads estão no estado EXECUTÁVEL e executam partes do código que não contêm falhas.

A causa deste problema é que o Java 7 sofre com o problema do CodeCache descrito nesta pergunta e resposta do Stack Overflow.

Em resumo, "no Java 7, quando o CodeCache fica cheio, o JIT é interrompido e quase um terço da área do CodeCache é liberado, mas o JIT não é reativado."

Esse cenário resulta em uma execução muito mais lenta do código Java que foi despejado do cache de código ou nunca foi executado pela JVM. Portanto, algumas solicitações que atingem somente o código JIT compilado ainda responderão com os tempos de resposta usuais, enquanto outras levarão muito mais tempo.

Solução: atualize a versão do Java ou desative a limpeza do cache de código.

Existem três soluções possíveis:

  • Atualize para o Java 8, que não é afetado por esse problema de desempenho. Esta é a solução mais segura.
  • Atualize para o Java 1.7.0_101-b14, que requer o suporte Java SE da Oracle, já que o Java 7 é EOL desde maio de 2015
  • Desative o esvaziamento do cache de código e aumente o tamanho do cache incluindo os seguintes argumentos da JVM no script de inicialização do AEM:
    • -XX:-UseCodeCacheFlushing
    • -XX:ReservedCodeCacheSize=90M

Esses argumentos especificam um tamanho de cache de código de 90 MB (em vez dos 48 MB padrão) e desabilitam a limpeza do cache de código. Assim, se o cache de código estourar, o hot code existente não estará em execução no modo de interpretação (somente o novo código não será mais compilado). Monitore o tamanho do cache de código por algum tempo (por exemplo, usando o jconsole) para garantir que o valor máximo configurado não seja muito baixo. Observe que, depois de atualizar para o Java 8, será necessário remover essas configurações.

 

Logotipo da Adobe

Fazer logon em sua conta