Ferramentas e registros de diagnóstico

Você está vendo a documentação do Apigee Edge.
Veja a documentação da Apigee X.

Neste tópico, abordamos ferramentas de rede, ferramentas de JVM e registros de diagnóstico que podem ser usados para solucionar problemas de rede e de JVM no Apigee Edge.

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

tcpdump é uma ferramenta sniffer de pacote de linha de comando que permite capturar ou filtrar pacotes TCP/IP 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 maneira:

yum install tcpdump

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

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

Para solucionar qualquer um desses problemas, primeiro é necessário determinar o par de componentes entre o qual o erro ocorreu. No caso do Edge, pode ser um dos seguintes pares:

  • Aplicativo 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, é possível capturar os pacotes de rede usando o tcpdump em um ou ambos os componentes.

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

Use o comando tcpdump a seguir para capturar todos os pacotes enviados ou recebidos de um host (endereço IP) especificado 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 da qual 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 de 0 (zero) permite capturar o pacote inteiro.
Endereço IP é o endereço IP do host para o qual desejamos 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 servidor de back-end:

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

Use o seguinte comando para capturar os pacotes de rede de 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, conforme 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 o tcpdumps

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

Referências

Despejos de heap

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

O despejo de heap é muito útil quando um processo Java como o Processador de mensagens mostra:

  • Alto uso de memória
  • Erro de memória externa

Como gerar heap dump para um processo Java

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

Use o seguinte comando jmap para gerar o despejo de heap 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_INÍCIO É o diretório de instalação do Java
filename É o nome de arquivo no qual o despejo de heap será gravado
pid É o ID do processo do aplicativo Java cujo despejo principal precisa ser capturado

Exemplo

Digamos que o mp-east do processador de mensagens tenha alto uso de memória ou esteja gerando erros OutOfMemory. Determine o código do processo do processador de mensagens usando o comando ps no sistema operacional Unix. Digamos que seja 24569.

Execute o utilitário jmap para gerar o despejo de heap:

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

Como analisar despejos de heap

Os despejos de heap podem ser analisados com o Eclipse MAT (Memory Analyzer Tool) para determinar os possíveis vazamentos de memória ou quais objetos Java levam ao alto uso de memória.

Referências

Como coletar um despejo de heap

utilitário jmap

página do jmap man

Ferramenta Memory Analyzer (MAT)


Despejos de linha de execução

Um despejo de encadeamentos é um instantâneo do estado de todos os encadeamentos de um processo Java em execução. O estado de cada linha de execução é apresentado com o conteúdo da pilha, conhecido como rastreamento de pilha. Algumas linhas de execução farão parte do aplicativo Java que está sendo executado, enquanto outras serão linhas de execução internas do JVM.

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

  • Diagnosticar 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 encadeamentos

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_INÍCIO É o diretório de instalação do Java.
pid É o ID do processo do aplicativo Java cujo despejo de encadeamento você quer capturar.
filename É o nome de arquivo no qual o despejo de linhas de execução será gravado.

Exemplo

Para gerar um despejo de linhas de execução para o código 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 linha de execução do processo seria salvo no arquivo /opt/apigee/edge-message-processor/mp-east-threadDump.txt.

Como analisar dumps de linhas de execução

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

Referências