Technical Article

Este artigo foi actualizado para incluir o software GC Portal para Linux e Java Desktop System (JDS), disponível tanto para Sun Java System Application Server 7 (anteriormente Sun ONE Application Server 7 (S1AS7)) como para os servidores Tomcat. Originalmente, ele foi disponibilizado apenas para Solaris e Windows. Esta versão do software do Portal GC também inclui VisualGC integrado dentro do Portal GC.

O Portal GC permite a análise e ajuste de desempenho de aplicações Java a partir de uma perspectiva de coleta de lixo (GC), minerando os verbose:gc logs gerados pela JVM. O Portal de GC é uma página única para questões de GC e inclui uma extensa coleção de whitepapers, estudos de caso e outros materiais. O Portal destina-se a ser utilizado com o HotSpot JVM da Sun Microsystems, distribuído como parte do Java 2, Edição Padrão (J2SE). O uso do Portal GC permite aos desenvolvedores modelar aplicações e comportamentos JVM a partir de uma perspectiva de GC. Este artigo introduz o design e os recursos do Portal de GC, para permitir que os desenvolvedores o utilizem como ferramenta de análise e ajuste de GC.

O Portal de GC requer o uso dos seguintes switches pelo JVM para a geração de verbose:gc logs que são processados pelo Portal para análise.

 -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails 

Outros switches JVM não são necessários para a geração dos logs apropriados para o Portal de GC, mas podem ser adicionados como considerados apropriados para o ajuste e dimensionamento da JVM e da aplicação. Nota: -XX switches não são padrão e também estão sujeitos a alterações sem aviso prévio em futuros lançamentos JVM.

Modelagem de Aplicações e Ajuste de Performance da Perspectiva de GC

Modelagem de aplicações Java permite aos desenvolvedores remover imprevisibilidade atribuída à frequência e duração das pausas para coleta de lixo. Essas pausas estão diretamente relacionadas a:

  • Número e tamanho total de objetos criados e vivos
  • Vida média desses objetos
  • Tamanho da pilha de JVM

Baseado na análise fornecida pelo Portal GC para um conjunto específico de verbose:gc arquivos de log alimentados ao Portal, os desenvolvedores podem construir um modelo que os ajuda a entender melhor a aplicação e o comportamento da JVM.

Os verbose:gc logs contêm informações valiosas sobre:

  • Tempos de pausa do GC
  • Frequência do GC Tempos de execução da aplicação

  • Tamanho dos objetos criados e destruídos
  • Tampos de criação de objetos Memória reciclada em cada GC

O comportamento da aplicação pode ser mapeado e analisado para determinar as diferentes relações entre a duração da pausa, frequência de pausas, taxa de criação de objectos e memória libertada. A análise dessas informações pode permitir que os desenvolvedores ajustem o desempenho de um aplicativo, otimizando a freqüência e os tempos de coleta de GC especificando os melhores tamanhos de pilha, outras opções de JVM e algoritmos de GC alternativos para uma determinada situação.

Informação Derivada de verbose:gc Logs para Análise e Modelagem do Comportamento de GC

Este tipo de informação pode ser usada para ajustar o desempenho do processo de coleta de lixo.

Média de pausas de GC na geração jovem e na geração velha

O tempo médio em que a aplicação é suspensa enquanto a coleta de lixo é feita na JVM.

Média de frequência de GC na geração jovem e na geração velha

A periodicidade em que o coletor de lixo funciona na geração jovem e na geração velha. Isto pode ser obtido desde que a instância temporal de cada atividade de GC seja logada.

GC seqüencialmente

A porcentagem de tempo do sistema para a qual a aplicação é suspensa para que a coleta de lixo ocorra. Calculado como Avg. GC pausa * Avg. GC frequência * 100%

GC custos indiretos simultâneos

A porcentagem de tempo do sistema para o qual a coleta de lixo acontece concomitantemente com a aplicação. Calculado como tempo médio de GC concorrente (fase de varredura) * Frequência média de GC concorrente / nº de CPUs

Memória reciclada por cada GC na geração jovem e velha

O total de lixo coletado durante cada GC.

Taxa de alocação

A taxa na qual os dados são alocados pela aplicação na geração jovem. Se a ocupação da pilha da geração jovem_na_início_da_corrente_gc=x, ocupação_no_fim_da_gc_anterior = y e a freqüência de GC é 1 por segundo, então a taxa de alocação é aproximadamente x-y por segundo.

Taxa de promoção

A taxa na qual os dados são promovidos para a geração antiga.

Total de dados alocados pela aplicação

Este é o total de dados que é alocado pela aplicação por transação.

Os dados totais podem ser divididos em dados de curto prazo e dados de longo prazo

Dados de longo prazo é o que sobrevive aos ciclos de CG da geração jovem e é promovido para a geração velha.

Dados de curto prazo

Os dados de curto prazo que morrem muito rapidamente e são coletados na geração jovem. Isto pode ser calculado como Dados totais – Dados de longo prazo.

Dados totais ativos

Estes são os dados totais vivos em qualquer instância do tempo. Isto é crítico para construir um modelo de dimensionamento da pilha da JVM. Por exemplo, para uma carga de 100 transações por segundo, com dados de longo prazo de 50K por transação com duração mínima de 40 segundos, a área mínima de memória da geração antiga teria que ser

50K*40s*100 = 200M

Vazamentos de memória

Estes podem ser detectados e erros “fora de memória” podem ser melhor compreendidos monitorando o lixo coletado em cada varredura como mostrado por estes logs.

Flags and Switches for Generating GC Logs

Existem muitas informações úteis relacionadas a GC que a JVM pode acessar em um arquivo. Esta informação é usada pelo Portal GC para sintonizar e dimensionar aplicações e a JVM a partir de uma perspectiva de GC. Logs contendo informações detalhadas de GC são gerados quando uma aplicação Java é executada com as seguintes chaves:

verbose:gc Esta bandeira ativa o registro de informações de GC. Disponível em todos os JVMs.

-XX:+PrintGCTimeStamps Imprime os horários em que os GCs acontecem em relação ao início da aplicação. Disponível apenas a partir de J2SE1.4.0.

-XX:+PrintGCDetails Dá detalhes sobre os GCs, tais como:

  • Tamanho da geração jovem e velha antes e depois dos GCs
  • Tamanho da pilha total Tempo necessário para um GC acontecer na geração jovem e velha Tamanho dos objetos promovidos em cada GC

Disponível apenas na JVM1.4.0.

Usando o Portal GC para Modelagem de Aplicações e Ajuste de Performance

O Portal GC pode ser usado para entender melhor o comportamento de uma Aplicação de GC de forma a ajustar a performance e o tamanho das aplicações para rodar de forma otimizada sob condições enxutas, de pico e de explosão. Ele suporta J2SE1.2.2, J2SE1.3, J2SE1.4 e J2SE1.4.1 em diante, incluindo as duas novas implementações de coleta de lixo, o Coletor Paralelo e o Coletor Concorrente. Ele permite aos desenvolvedores enviar arquivos de log GC e analisar o comportamento da aplicação, com base nestes arquivos de log. Também considera algumas informações específicas da aplicação e do ambiente, incluindo:

  • Transaction Rate ou Server Load

    Isto se aplica a aplicações típicas do lado do servidor que operam em uma configuração Cliente-Servidor. Para tais aplicações, esta é a taxa na qual o cliente pode estar gerando uma carga estável para o servidor processar e é útil para uma análise de estado estável do servidor. A análise em estado estacionário pode incluir vários cenários, como a pior situação de caso/pico/ruptura ou uma situação média. Esta informação não é obrigatória. Se não estiver disponível ou não for aplicável, ela pode ser ignorada. Neste caso, algumas das informações apresentadas pelo Portal também devem ser ignoradas o que inclui:

    • Resultado teórico
    • Dados de curto prazo

  • Dados de longo prazo

Número de processadores na máquina alvo

Esta informação é usada para fazer certos cálculos pelo Portal como a sobrecarga de GC concorrente.

Versão JVM utilizada pela aplicação (1.2.2_xx, 1.3.x, 1.4.0, 1.4.1)

Uma vez que o formato verbose:gc log não é padrão, e houve alterações da JVM, esta informação é necessária pelo Portal GC.

Design do Portal GC

O Portal GC é composto por quatro motores:

  • Analizador e motor de relatórios
  • Motor gráfico
  • Motor de Inteligência
  • Motor de sessão e armazenamento VisualGC

Analizador e motor de relatórios

    Cargas verbose:gcArquivos de registo, minas e relatórios:

      Pausas GC na geração jovem e velha

    • Frequência GC na geração jovem e velha
    • Taxa de alocação de objetos
    • Taxa de promoção de objetos da geração jovem para a geração velha
    • Total GC time Total Application time

    • Initial and Final heap sizes of young and old generations
    • GC sequential overhead GC overhead simultâneo

  • Calcula e apresenta informações relacionadas com a aplicação
      Dados de curto prazo por transacção
  • Dados de longo prazo por transacção Máximo rendimento teórico Eficiência da CPU

Esta informação pode ser ignorada para aplicações que não são baseadas na transacção, mas é relevante para aplicações do lado do cliente ou aquelas que podem exibir um comportamento extremamente faseado. Apresenta comportamento detalhado de GC relacionado à aplicação e JVM ao longo do tempo

  • O usuário pode visualizar os dados de GC, amostrados em intervalos de tempo escolhidos para toda a execução.

Esta informação detalhada de GC amostrada em intervalos escolhidos para toda a execução é extremamente útil onde aplicações exibem comportamento variado ao longo do tempo, tais como aplicações em fase, cíclicas ou reativas aleatoriamente, e a média de informações resumidas pode ser distorcida como resultado. Esta informação detalhada e amostrada pode ser usada para ver o comportamento da aplicação e da JVM à medida que ela muda ao longo do tempo. Informação detalhada de reciclagem de memória ao longo do tempo em gerações jovens e velhas

    Memória antes de GC Memória após GC Memória libertada em cada GC
  • Informação sobre o envelhecimento de objectos na geração jovem
    • Disponível se -XX:+PrintTenuringDistribution interruptor for usado para gerar logs.
  • Figure 1 é um instantâneo de um relatório de exemplo apresentado pelo motor Analisador do Portal GC.

    Figura 1. Instantâneo do Motor de Análise do Portal GC

    Motor Gráfico

    A maior parte da informação que é apresentada pelo motor Analisador em forma tabular pode ser plotada graficamente. Vários gráficos podem ser plotados no mesmo gráfico para auxiliar nas comparações.

    • Apresentação gráfica da Análise Detalhada da Linha do Tempo da GC
    • Apresentação gráfica da Informação de Reciclagem de Memória em cada GC Comparação gráfica da informação de GC de vários arquivos de log Apresentação gráfica da informação de Tenuring da Idade do Objeto para cada “Age”

    Figure 2. Instantâneo do Motor Gráfico do Portal GC

    Motor de Inteligência

    O Motor de Inteligência é composto por:

      Recomendações Gerais

      Esta seção fornece artigos cobrindo informações gerais e recomendações sobre o ajuste do desempenho de GC. O Portal não fornece recomendações dinâmicas ou de afinação automática. As recomendações incluem informações gerais sobre como:

      • Reduzir pausa e frequência de GC
      • Reduzir sobrecarga sequencial de GC Dimensionar os montes da geração jovem e velha para lidar com uma determinada carga

      • Detectar fugas de memória
      • Seleccionar colectores
      • Seleccionar diferentes opções de JVM e interruptores.

    • Modelagem Empírica

      Classificar a aplicação executada com base nos dados analisados a partir de múltiplos verbose:gc logs. O usuário pode escolher os arquivos (entre todos os que foram carregados) para modelagem baseado nas seguintes escolhas:

      • Taxa de transação
      • Número de processadores

    • Tamanho da geração anterior Tamanho da geração anterior Versão JDK Tamanhos de pilha

    O usuário pode classificar o ambiente JVM ideal com base nos seguintes critérios:

      Pausas GC Série GC Frequência GC Eficiência da CPU

    O usuário também pode ver a comparação gráfica das várias execuções.

    Figure 3. Instantâneo do motor de Inteligência do Portal GC

  • Projeções para dimensionamento e ajuste através de cenários “what-if”

    Como o comportamento do GC pode mudar com a mudança de tamanho da geração jovem. Esta funcionalidade é atualmente limitada e funciona apenas em J2SE1.4.1 em diante usando o Colector Concorrente. A projeção de saída mostra mudanças potenciais:

    • Pausa GC
    • Frequência GC

  • Carga sequencial GC Utilização da CPU (%) Velocidade

  • Taxa de alocação
  • Taxa de promoção Tamanho de Curtodados vividos

  • Tamanho dos dados de vida longa
  • Estudos de caso

    Alguns estudos de caso do mundo real sobre como afinar a partir de uma perspectiva de CG.

  • Livros Brancos

    Apontadores para alguns livros brancos com detalhes profundos sobre afinação de GC.

  • Motor de sessão e armazenamento

    • Gerenciar sessões de usuário
    • Gerenciar e armazenar perfis de usuário Gerenciar e armazenar dados/logs de usuário com segurança

    • Disponibilizar os logs de usuário/dados para visualização de referência, e modelagem empírica

    >

    Figure 4. Instantâneo do Motor de Armazenamento do Portal GC

    VisualGC

    A ferramenta visualgc se prende a um JVM HotSpot instrumentado e coleta e exibe graficamente os dados de coleta de lixo, carregador de classe, e dados de desempenho do compilador HotSpot. Ele é incorporado ao Portal GC para coleta de informações relacionadas a GC em tempo de execução da JVM. O Portal GC usa a ferramenta webstart para executar e exibir as informações do VisualGC em um navegador. Mais detalhes sobre esta ferramenta estão disponíveis na página CoolStuff – jvmstat. O arquivo ReadMe para rodar o VisualGC dentro do Portal GC está embutido no Software do Portal GC.

    Acknowledgments:

    O autor gostaria de agradecer ao Mayank Srivastava, Nagendra Nagarajayya, Nandula Narasimham e S.R.Venkatramanan por sua contribuição ao Portal GC. O autor também gostaria de agradecer aos arquitetos e especialistas em coleta de lixo da Sun JVM John Coomes, David Detlefs, Steve Heller, Peter Kessler, Ross Knippel, Jon Masamitsu, James Mcilree e Y.S. Ramakrishna por sua ajuda e orientação neste trabalho. O autor também gostaria de agradecer aos membros da equipe de performance da JVM da Sun, Timothy Cramer e Brian Doherty (autor de VisualGC e ferramentas jvmstat) por sua ajuda na integração do VisualGC no Portal GC.

    Sobre o Autor:

    Alka Gupta é um membro da equipe técnica da Sun Microsystems. Ela é responsável por trabalhar com os ISV’s da Sun e parceiros para ajudá-los a adotar as tecnologias e plataformas emergentes da Sun de forma rápida e eficiente. Ela tem trabalhado na área de ajuste de desempenho em plataformas Sun por quase 7 anos, e está nesta indústria há quase 10 anos. Alka se formou no Instituto Indiano de Tecnologia (IIT), Índia.

    Leave a Reply