Ferramentas e registros de diagnóstico

Você está vendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

Neste tópico, discutimos ferramentas de rede, ferramentas da JVM e registros de diagnóstico que podem ser usados para resolver problemas relacionados à rede e à JVM no Apigee Edge.

Utilitário de detecção de pacote TCP/IP (tcpdump)

A ferramenta tcpdump é um rastreador de pacotes de linha de comando que permite capturar ou filtrar pacotes TCP/IP que são recebidos ou transferidos por uma rede. Ele está disponível em sistemas operacionais baseados em Linux/Unix. Você pode instalar esse utilitário usando o yum da seguinte forma:

yum install tcpdump

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

  • 502 Erros de gateway (causados devido à exceção EOF)
  • 503 Erros de serviço indisponível
  • Falhas de handshake de SSL

Para resolver qualquer um desses problemas, primeiro é preciso determinar o par de componentes entre os quais 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 problemático, capture os pacotes de rede usando o tcpdump em um ou em ambos.

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

Use o seguinte comando tcpdump para capturar todos os pacotes enviados ou recebidos de um host especificado (endereço IP) e salvar 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. Usar o valor "any" permite capturar pacotes de todas as interfaces.
-s (snarf/snaplen) especifica a quantidade de cada pacote a ser capturada. Usar o valor 0 (zero) permite capturar todo o pacote.
Endereço IP é o endereço IP do host para o qual queremos capturar os pacotes
Nome do arquivo é o nome do arquivo em que o tcpdump precisa ser gravado

Exemplo

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

  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 capturar os pacotes.

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

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 servidor de 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 tcpdumps usando o comando tcpdump ou a ferramenta baseada em GUI Wireshark.

Referências

Despejos de heap

Os despejos de heap são um snapshot da memória de um processo Java. Eles contêm as informações sobre os objetos e as classes Java no heap no momento em que o heap dump é coletado. Eles geralmente são muito grandes, variando de 100 MB a poucos GB.

O despejo de heap é muito útil quando um processo Java, como o Message Processor, mostra:

  • Alto uso da memória
  • OutofMemoryError

Como gerar heap dump para um processo Java

O Java oferece um utilitário chamado jmap, que permite gerar as estatísticas de memória 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 em que 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 tem alto uso de memória ou está gerando erros OutOfMemory. Determine o ID do processo do processador de mensagens usando o comando ps no sistema operacional Unix. Digamos que é 24.569.

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

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

Como analisar despejos de heap

É possível analisar os despejos de heap usando a ferramenta Eclipse MAT (Memory Analyzer) para determinar possíveis vazamentos de memória ou quais objetos Java estão gerando alto uso de memória.

Referências

Como coletar um heap dump

Utilitário jmap (link em inglês)

Página do manual do jmap

Ferramenta Analisador de memória (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. O estado de cada linha de execução é apresentado com o conteúdo da pilha, chamado de stack trace. Algumas das linhas de execução farão parte do aplicativo Java que está 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 aplicativos Java que não respondem
  • Otimizar o desempenho do aplicativo e da JVM

Como gerar despejos de linhas de execução

O despejo de linhas de execução para um processo Java pode ser gerado usando 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 com o despejo de linhas de execução que 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 do 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 linhas de execução do processo seria salvo no arquivo /opt/apigee/edge-message-processor/mp-east-threadDump.txt.

Como analisar despejos de Threads

Você pode ver despejos de linhas de execução em qualquer editor de texto, como o vi (Linux) e o bloco de notas (Windows). Consulte Thread Dump para ver detalhes sobre diferentes seções de Thread Dump e como interpretar as informações.

Referências