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:
- Faça login na máquina do processador de mensagens.
- 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
- Página do manual do tcpdump
- Comandos TCPdump: uma ferramenta de filtros de rede
- Wireshark (link em inglês)
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
Utilitário jmap (link em inglês)
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.