Ferramentas e registros de diagnóstico

Esta é a documentação do Apigee Edge.
Acesse Documentação da Apigee X.
informações

Este tópico discute ferramentas de rede, ferramentas de JVM e registros de diagnóstico que podem ser usados para solucionar problemas de rede e relacionados à JVM no Apigee Edge.

Utilitário sniffer de pacote TCP/IP (tcpdump)

O tcpdump é um rastreador de pacotes de linha de comando que permite capturam ou filtram pacotes TCP/IP recebidos ou transferidos por uma rede. Disponível em sistemas operacionais Linux/Unix. Você pode instalar esse utilitário usando o yum como da seguinte forma:

yum install tcpdump

A ferramenta tcpdump é útil para solucionar problemas de rede ou SSL. Por exemplo:

  • 502 Erros de gateway inválido (causados devido a uma exceção EOF)
  • Erros 503 de serviço indisponível
  • Falhas de handshake de SSL

Para resolver qualquer um desses problemas, você deve primeiro determinar o par de componentes entre em que o erro ocorreu. No caso do Edge, pode ser um dos seguintes pares:

  • App cliente e roteador
  • Roteador e processador de mensagens
  • Processador de mensagens e servidor de back-end

Depois de identificar o par de componentes com problemas, você pode capturar os pacotes de rede usando tcpdump em um ou em ambos os componentes.

Captura de pacotes enviados/recebidos de um host específico usando tcpdump

Use o seguinte comando tcpdump para capturar todos os pacotes enviados ou recebidos por um especificado (endereço IP) e salve as informações no arquivo especificado:

tcpdump -i any -s 0 host <IP address> -w <File name>

Em que:

Parâmetro Descrição
-i (interface) especifica a interface de onde os pacotes devem ser capturados. Usando o valor de “qualquer” permite capturar pacotes de todas as interfaces.
-s (snarf/Snaplen) especifica a quantidade de cada pacote a ser capturada. Usar o valor de 0 (zero) permite capturar o pacote inteiro.
Endereço IP é o endereço IP do host para capturar os pacotes.
Nome do arquivo é o nome do arquivo no qual o tcpdump deve ser gravado

Exemplo

Digamos que você queira capturar os pacotes entre o processador de mensagens e o back-end Servidor:

  1. Faça login na máquina do processador de mensagens.
  2. Determine o endereço IP do servidor de back-end (suponha que seja 22.22.22.22) para o qual queremos para capturar os pacotes.

Use o comando a seguir para capturar os pacotes de rede de um host com um IP específico endereço:

tcpdump -i any -s 0 host 22.22.22.22 -w rmp-123.pcap

Se o servidor de back-end resolver para vários endereços IP, use o nome do host do back-end no comando tcpdump como mostrado abaixo:

tcpdump -i any -s 0 host <Hostname> -w rmp-123.pcap

Se houver vários servidores de back-end com endereços IP diferentes (22.22.22.22, 33.33.33.33 e 44.44.44.44), use o comando tcpdump abaixo:

tcpdump -i any -s 0 host 22.22.22.22 or host 33.33.33.33 or host 44.44.44.44 -w rmp-123.pcap

Como analisar tcpdumps

É possível visualizar ou analisar o tcpdumps usando o comando tcpdump ou a ferramenta baseada em GUI, o Wireshark.

Referências

Heap dumps

Heap dumps são um instantâneo da memória de um processo Java. Eles contêm as informações sobre os objetos e classes Java na heap no momento em que o heap dump coletados. Eles geralmente são muito grandes, variando entre alguns de 100 MB e GB.

O heap dump é muito útil quando um processo Java, como o processador de mensagens, mostra:

  • Uso elevado da memória
  • OutofMemoryError

Como gerar um heap dump para um processo Java

O Java oferece um utilitário chamado jmap, que permite gerar a memória estatísticas ou heap dumps de um processo Java em execução.

Use o seguinte comando jmap para gerar o heap dump de um processo Java:

sudo -u apigee <JAVA_HOME>/bin/jmap -dump:live,format=b,file=<filename> <pid>

Em que:

Parâmetro Descrição
JAVA_HOME O diretório de instalação do Java
filename É o nome do arquivo no qual o heap dump será gravado
pid É o ID do processo do aplicativo Java cujo head dump precisa ser capturado

Exemplo

Digamos que o processador de mensagens mp-east tenha um alto uso de memória ou esteja gerando Erros de OutOfMemory. Determine o ID do processador de mensagens usando o comando "ps" no Sistema operacional Unix. Digamos que seja 24569.

Execute o utilitário jmap desta forma para gerar o heap dump:

sudo -u apigee <JAVA_HOME>/bin/jmap -dump:live,format=b,file=mp-east-heapdump.bin 24569

Análise de heap dumps

Os heap dumps podem ser analisados usando a ferramenta Eclipse MAT (Memory Analyzer) para determinar possíveis vazamentos de memória ou quais objetos Java estão levando ao alto uso da memória.

Referências

Como coletar um heap dump

Utilitário jmap

jmap man page (link em inglês)

Ferramenta Memory Analyzer (MAT)


Despejos de linhas de execução

Um despejo de linhas de execução é um snapshot do estado de todas as linhas de execução de um processo Java em execução. A estado de cada linha de execução é apresentado com o conteúdo da pilha, conhecido como stack trace. Algumas das linhas de execução farão parte do aplicativo Java em execução, enquanto outras serão Linhas de execução internas da JVM.

Um despejo de linhas de execução revela informações sobre cada uma das atividades de linhas de execução do aplicativo. Essas informações podem ser muito úteis para:

  • Diagnostique problemas como picos de CPU, tempos de resposta lentos ou Java sem resposta aplicativos.
  • Otimize o desempenho do aplicativo e da JVM

Gerar despejos de linhas de execução

O despejo de linhas de execução de um processo Java pode ser gerado com o utilitário jstack, conforme mostrado abaixo:

sudo -u apigee <JAVA_HOME>/bin/jstack -l <pid> > <filename>

Em que:

Parâmetro Descrição
JAVA_HOME É o diretório de instalação do Java.
pid É o ID do processo do aplicativo Java cujo despejo de linhas de execução você quer capturar.
filename É o nome do arquivo em que o despejo de linhas de execução será gravado.

Exemplo

Para gerar um despejo de linhas de execução para o ID de processo 37320 no processador de mensagens mp-east, use o seguinte comando:

sudo -u apigee <JAVA_HOME>/bin/jstack -l 37320 > /opt/apigee/edge-message-processor/mp-east-threadDump.txt

De acordo com o exemplo acima, o despejo de encadeamentos do processo seria salvo no arquivo /opt/apigee/edge-message-processor/mp-east-threadDump.txt.

Como analisar despejos de linhas de execução

É possível visualizar os despejos de linhas de execução em qualquer editor de texto, como o vi (Linux) ou o bloco de notas (Windows). Consulte Dump de linhas de execução para detalhes sobre diferentes seções do despejo de linhas de execução e como interpretar o informações imprecisas ou inadequadas.

Referências