Outils de diagnostic et journaux

Vous consultez la documentation d'Apigee Edge.
Consultez la documentation Apigee X.
en savoir plus

Cette rubrique traite des outils réseau, des outils JVM et des journaux de diagnostic que vous pouvez utiliser pour résoudre les problèmes de réseau et liés à la machine virtuelle Java dans Apigee Edge.

Utilitaire de détection de paquets TCP/IP (tcpdump)

L'outil tcpdump est un outil de détection de paquets de ligne de commande qui vous permet de capturer ou de filtrer les paquets TCP/IP reçus ou transférés sur un réseau. Il est disponible sur les systèmes d'exploitation Linux/Unix. Vous pouvez installer cet utilitaire à l'aide de yum comme suit:

yum install tcpdump

L'outil tcpdump est utile pour résoudre les problèmes liés au réseau ou au protocole SSL. Exemple :

  • Erreurs 502 de passerelle incorrecte (provoquées en raison d'une exception EOF)
  • 503 Erreurs "Service non disponible"
  • Échecs de handshake SSL

Pour résoudre l'un de ces problèmes, vous devez d'abord déterminer la paire de composants avec laquelle l'erreur s'est produite. Dans le cas d'Edge, il peut s'agir de l'une des paires suivantes:

  • Application cliente et routeur
  • Routeur et processeur de messages
  • Processeur de messages et serveur backend

Une fois que vous avez identifié la paire de composants problématique, vous pouvez capturer les paquets réseau à l'aide de tcpdump sur l'un de ces composants ou sur les deux.

Capturer les paquets envoyés vers et reçus depuis un hôte spécifique à l'aide de tcpdump

Utilisez la commande tcpdump suivante pour capturer tous les paquets envoyés ou reçus par un hôte spécifié (adresse IP) et enregistrez les informations dans le fichier spécifié:

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

Où :

Paramètre Description
-i (interface) spécifie l'interface à partir de laquelle les paquets doivent être capturés. L'utilisation de la valeur "any" permet de capturer les paquets de toutes les interfaces.
-s (snarf/snaplen) spécifie la quantité de chaque paquet à capturer. L'utilisation de la valeur 0 (zéro) vous permet de capturer l'intégralité du paquet.
Adresse IP est l'adresse IP de l'hôte pour lequel nous voulons capturer les paquets
Nom du fichier est le nom du fichier dans lequel tcpdump doit être écrit

Exemple

Supposons que vous souhaitiez capturer les paquets entre le processeur de messages et le serveur backend:

  1. Connectez-vous à la machine du processeur de messages.
  2. Déterminez l'adresse IP du serveur de backend (en supposant qu'il s'agit de 22.22.22.22) dont nous souhaitons capturer les paquets.

Exécutez la commande suivante pour capturer les paquets réseau pour un hôte avec une adresse IP spécifique:

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

Si le serveur backend résout plusieurs adresses IP, utilisez le nom d'hôte du serveur backend dans la commande tcpdump, comme indiqué ci-dessous:

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

S'il existe plusieurs serveurs backend avec différentes adresses IP (22.22.22.22, 33.33.33.33 et 44.44.44.44), utilisez la commande tcpdump ci-dessous:

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

Analyser tcpdumps

Vous pouvez afficher ou analyser des tcpdumps à l'aide de la commande tcpdump ou de l'outil basé sur une IUG Wireshark.

Références

Empreinte de la mémoire

Les empreintes de la mémoire sont un instantané de la mémoire d'un processus Java. Ils contiennent des informations sur les objets et les classes Java dans le tas de mémoire au moment où l'empreinte de la mémoire est collectée. Ils sont généralement assez volumineux, allant de quelques 100 Mo à quelques Go.

L'empreinte de la mémoire est très utile lorsqu'un processus Java tel qu'un processeur de messages indique:

  • Utilisation élevée de la mémoire
  • OutofMemoryError

Générer une empreinte de la mémoire pour un processus Java

Java fournit un utilitaire appelé jmap, qui vous permet de générer les statistiques de mémoire ou les empreintes de la mémoire d'un processus Java en cours d'exécution.

Utilisez la commande jmap suivante pour générer l'empreinte de la mémoire d'un processus Java:

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

Où :

Paramètre Description
JAVA_HOME Répertoire d'installation de Java
filename Est le nom du fichier dans lequel l'empreinte de la mémoire sera écrite
pid Est l'identifiant de processus de l'application Java dont le vidage de la tête doit être capturé.

Exemple

Imaginons que le processeur de messages mp-east utilise beaucoup de mémoire ou génère des erreurs de mémoire insuffisante. Déterminez l'identifiant de processus du processeur de messages à l'aide de la commande ps sous le système d'exploitation Unix. Imaginons que la valeur soit 24569.

Exécutez l'utilitaire jmap comme suit pour générer l'empreinte de la mémoire:

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

Analyser des empreintes de mémoire

Les empreintes de mémoire peuvent être analysées à l'aide d'Eclipse MAT (Memory Analyzer Tool) pour déterminer les éventuelles fuites de mémoire ou les objets Java conduisant à une utilisation intensive de la mémoire.

Références

Collecter une empreinte de la mémoire

Utilitaire jmap

Page de manuel jmap

Outil d'analyse de mémoire (MAT)


Empreinte de thread

Une copie de thread est un instantané de l'état de tous les threads d'un processus Java en cours d'exécution. L'état de chaque thread est présenté avec le contenu de sa pile, appelé "trace de pile". Certains threads feront partie de l'application Java en cours d'exécution, tandis que d'autres seront des threads internes JVM.

Une copie de thread révèle des informations sur chacune des activités des threads de l'application. Ces informations peuvent être très utiles pour:

  • Diagnostiquez des problèmes tels que des pics de processeur, des temps de réponse lents ou des applications Java qui ne répondent pas.
  • Optimiser les performances des applications et de la JVM

Générer des empreintes de thread

La copie de thread d'un processus Java peut être générée à l'aide de l'utilitaire jstack, comme indiqué ci-dessous:

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

Où :

Paramètre Description
JAVA_HOME Répertoire d'installation de Java.
pid correspond à l'identifiant de processus de l'application Java dont vous souhaitez capturer la copie de thread.
filename Correspond au nom du fichier dans lequel la copie de thread sera écrite.

Exemple

Pour générer une copie de thread pour l'ID de processus 37320 sur le processeur de messages mp-east, utilisez la commande suivante:

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

Selon l'exemple ci-dessus, une copie de thread du processus serait enregistrée dans le fichier /opt/apigee/edge-message-processor/mp-east-threadDump.txt.

Analyser les empreintes de thread

Vous pouvez afficher les copies de threads dans n'importe quel éditeur de texte tel que vi (Linux) ou le Bloc-notes (Windows). Consultez la section Empreinte de thread pour en savoir plus sur les différentes sections de cette opération et pour découvrir comment interpréter ces informations.

Références