Exercício 1.2: Capturando Dumps de Heap

Antes de iniciar, você deve concluir o Exercício 1.1: Importando o Recurso Requerido.

Cenário

Sua organização possui um sistema de enfileiramento de três camadas que faz parte de um aplicativo de proxy da Web. Cada camada do sistema de enfileiramento possui sua própria fila. A equipe de testes determinou que o aplicativo possui uma fuga de memória e suspeita que ela esteja no sistema de enfileiramento. Como o desenvolvedor de uma das fila, você recebeu a tarefa de determinar qual camada é responsável pela fuga de memória.

Visão Geral

Para executar a análise de fuga de memória, é necessário capturar dois dumps de heap do Java.

O heap é um bloco de memória que o JVM (Java Virtual Machine), ao executar, utiliza para armazenar objetos Java. A memória heap do Java é gerenciada por um coletor de lixo, que desaloca automaticamente a memória de objetos Java aos quais não existem referências remanescentes.

Um dump de heap é uma imagem do conteúdo do heap em um momento específico.

São necessários dois dumps de heap para que seja possível ver como o uso da memória se altera entre dois pontos na execução do aplicativo. Um algoritmo interno compara os heaps e identifica os objetos que permanecem na memória quando não deveriam. O algoritmo analisa os seguintes indicadores para identificar fugas potenciais: Objetos que estão na memória por todo o intervalo de tempo entre os dois dumps de heap, um aumento na quantidade de objetos de uma determinada classe no segundo heap e a quantidade de referências a um objeto.

Preparando para Capturar os Dumps de Heap

Para capturar dumps de heap, é necessário alternar para a perspectiva Criação de Perfis e de Logs:

  1. Na barra de menus do Software Development Platform, clique em Window (Janela) > Open Perspective (Abrir Perspectiva) > Outra (Other). A caixa de diálogo Select Perspective é aberta.
  2. Na parte inferior esquerda da caixa de diálogo, clique em Show all (Mostrar tudo). Uma marca aparece na caixa de opções.
  3. A partir da lista de perspectivas, selecione Profiling and Logging (Definição de Perfil e Log) e clique em OK.
  4. Se a caixa de diálogo Confirmar Ativação for aberta, clique em Always enable capabilities and don't ask me again (Sempre ativar os recursos e não perguntar novamente) e, em seguida, clique em OK.
  5. A Plataforma de Desenvolvimento de Software é alternada para a perspectiva de Profiling and Logging (Definição de Perfil e Log).

Capturando os Dumps de Heap

Para este tutorial, você irá capturar manualmente os dumps de heap. (Alternativamente, você poderia definir intervalos de tempo para capturar automaticamente os dumps de heap ou importar dumps de heap existentes.)

Para capturar os dumps de heap:

  1. Execute o aplicativo:
    1. Na barra de menus, clique em Run (Executar) > Profile (Perfil). A caixa de diálogo Profile (Perfil) é aberta.
    2. Na lista Configurações, dê um clique duplo em Aplicativo Java. Uma entrada Nova_configuração aparece na lista.
    3. No campo Nome, digite ThreeTierQueue_MemLkAnalysis.
    4. Na guia Principal, ao lado do campo Projeto, clique em Browse (Procurar). A caixa de diálogo Seleção de Projeto é aberta.
    5. Selecione ThreeTierQueue e, em seguida, clique em OK.
    6. Ao lado do campo "Classe principal", clique em Browse (Procurar).
    7. Na caixa de diálogo Escolher Tipo Principal, selecione TestThreeTierQueue e, em seguida, clique em OK.
    8. Na caixa de diálogo Profile (Perfil), clique na guia Criação de Perfis.
    9. Na subguia Visão Geral, marque a caixa de opções para o conjunto de criação de perfil "Análise de Fuga de Memória - Dumps de heap manuais". (Um conjunto de criação de perfis define o tipo de dados da criação de perfis que devem ser coletados para a execução.)
    10. Clique em Profile (Perfil). O aplicativo é executado e a exibição é alterada como a seguir:
      • Um recurso de "Traçado de Perfil" para o processo e uma entrada representando o tipo de traçado de perfil "Análise de Fuga Automática" aparecem no Profiling Monitor (Monitor de Traçado de Perfil).
      • A visualização Candidatos à Fuga é aberta e exibe uma mensagem Status Atual com instruções sobre o que fazer em seguida.
        Nota: Se você obtiver uma Mensagem de Segurança informando que o Agent Controller não está disponível, leia Se não for possível coletar dados.
  2. Capture os dumps de heap:
    1. Na barra de menus, clique em Window (Janela) > Mostrar Visualização > Console para abrir a visualização Console, para que você possa seguir o aplicativo durante seu processamento.
    2. Deixe o aplicativo "aquecer" por aproximadamente meio minuto, para certificar-se de que todas as classes para as quais deseja criar perfil sejam carregadas e inicializadas.
    3. Siga as instruções na visualização Candidatos à Fuga: Clique no botão da barra de ferramentas Capturar Dump de Heap para capturar o dump de heap de baseline, o ponto de início para a comparação de heap. Uma entrada adicional para representar o dump do heap aparece no Profiling Monitor (Monitor de Traçado de Perfil).
    4. Deixe o aplicativo executar por mais um minuto e, novamente, siga as instruções na visualização Candidatos à Fuga; capture um segundo dump de heap da mesma forma. Uma entrada para o segundo dump do heap aparece no Profiling Monitor (Monitor de Traçado de Perfil).
    5. Clique no botão Finalizar na visualização do Console para finalizar o processo.

Se Você Não Pôde Coletar Dados

Antes que você possa coletar qualquer tipo de dados de definição de perfil, o Agent Controller deve estar em execução. Se você receber uma mensagem avisando que o Agent Controller não está disponível, certifique-se de que o Agent Controller foi instalado, inicie-o manualmente e tente novamente. Para obter instruções, consulte o guia de instalação. É possível acessar o guia de instalação utilizando a barra de lançamento, ou ainda é possível encontrá-lo no CD do produto em disk1/install.html.

Após coletar os dados, você estará pronto para começar o Exercício 1.3: Analisando Candidatos à Fuga.

Feedback
(C) Copyright IBM Corporation 2000, 2005. Todos os Direitos Reservados.