Diagnosetools und -protokolle

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

In diesem Thema werden Netzwerktools, JVM-Tools und Diagnoselogs beschrieben, mit denen Sie Netzwerk- und JVM-bezogene Probleme in Apigee Edge beheben können.

Dienstprogramm für TCP/IP-Paket-Sniffer (tcpdump)

Das tcpdump-Tool ist ein Befehlszeilen-Paket-Sniffer-Tool, mit dem Sie TCP/IP-Pakete erfassen oder filtern können, die über ein Netzwerk empfangen oder übertragen werden. Er ist auf Linux/Unix-basierten Betriebssystemen verfügbar. So können Sie dieses Dienstprogramm mit yum installieren:

yum install tcpdump

Das Tool tcpdump eignet sich zur Behebung von Netzwerk- oder SSL-Problemen. Beispiel:

  • 502 Bad Gateway-Fehler (durch EOF-Ausnahme verursacht)
  • Fehler 503 „Dienst nicht verfügbar“
  • SSL-Handshakefehler

Um eines dieser Probleme zu beheben, müssen Sie zuerst das Komponentenpaar ermitteln, in dem der Fehler aufgetreten ist. Im Fall von Edge kann es eines der folgenden Paare sein:

  • Client-App und Router
  • Router und Message Processor
  • Nachrichtenprozessor und Back-End-Server

Nachdem Sie das fehlerhafte Komponentenpaar identifiziert haben, können Sie die Netzwerkpakete mit tcpdump auf einer oder beiden dieser Komponenten erfassen.

Mit „tcpdump“ Pakete erfassen, die an einen bestimmten Host gesendet oder von diesem empfangen wurden

Verwenden Sie den folgenden tcpdump-Befehl, um alle Pakete zu erfassen, die an einen bestimmten Host (IP-Adresse) gesendet oder von diesem empfangen wurden, und speichern Sie die Informationen in der angegebenen Datei:

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

Wobei:

Parameter Beschreibung
-i (interface) gibt die Schnittstelle an, von der die Pakete erfasst werden sollen. Mit dem Wert „any“ können Pakete von allen Schnittstellen erfasst werden.
-s (snarf/snaplen) gibt die Menge der aufzunehmenden Pakete an. Mit dem Wert 0 (null) können Sie das gesamte Paket erfassen.
IP-Adresse ist die IP-Adresse des Hosts, für den die Pakete erfasst werden sollen.
Dateiname ist der Name der Datei, in die „tcpdump“ geschrieben werden soll.

Beispiel

Angenommen, Sie möchten die Pakete zwischen dem Nachrichtenprozessor und dem Back-End-Server erfassen:

  1. Melden Sie sich auf dem Message Processor-Computer an.
  2. Bestimmen Sie die IP-Adresse des Back-End-Servers (z. B. 22.22.22.22), für den die Pakete erfasst werden sollen.

Verwenden Sie den folgenden Befehl, um die Netzwerkpakete für einen Host mit einer bestimmten IP-Adresse zu erfassen:

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

Wenn der Back-End-Server in mehrere IP-Adressen aufgelöst wird, verwenden Sie den Hostnamen des Back-End-Servers im Befehl „tcpdump“ wie unten dargestellt:

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

Wenn es mehrere Back-End-Server mit unterschiedlichen IP-Adressen gibt (22.22.22.22, 33.33.33.33 und 44.44.44.44), verwenden Sie den folgenden tcpdump-Befehl:

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

tcpdumps werden analysiert

Sie können tcpdumps mit dem Befehl „tcpdump“ oder dem GUI-basierten Tool Wireshark ansehen und analysieren.

Verweise

Heap-Dumps

Heap-Dumps sind Snapshots des Arbeitsspeichers eines Java-Prozesses. Sie enthalten die Informationen über die Java-Objekte und -Klassen im Heap zum Zeitpunkt der Erfassung des Heap-Dumps. Sie sind in der Regel ziemlich groß und reichen zwischen wenigen 100 MB und wenigen GB.

Der Heap-Dump ist sehr nützlich, wenn ein Java-Prozess wie Message Processor Folgendes anzeigt:

  • Hohe Arbeitsspeichernutzung
  • OutofMemoryError

Heap-Dump für einen Java-Prozess generieren

Java bietet ein Dienstprogramm namens jmap, mit dem Sie die Speicherstatistiken oder Heap-Dumps eines laufenden Java-Prozesses generieren können.

Verwenden Sie den folgenden jmap-Befehl, um den Heap-Dump eines Java-Prozesses zu generieren:

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

Wobei:

Parameter Beschreibung
JAVA_HOME Ist das Installationsverzeichnis von Java
filename Ist der Dateiname, in den der Heap-Dump geschrieben wird
pid Ist die Prozess-ID der Java-Anwendung, deren Head-Dump erfasst werden muss

Beispiel

Nehmen wir an, der Message Processor mp-east hat eine hohe Speicherauslastung oder gibt OutOfMemory-Fehler aus. Ermitteln Sie die Prozess-ID des Message Processor mithilfe des ps-Befehls auf einem Unix-Betriebssystem. Nehmen wir an, es lautet 24569.

Führen Sie das jmap-Dienstprogramm wie folgt aus, um den Heap-Dump zu generieren:

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

Heap-Dumps analysieren

Heap-Dumps können mit Eclipse MAT (Memory Analyzer-Tool) analysiert werden, um potenzielle Speicherlecks oder die Java-Objekte zu ermitteln, die zu einer hohen Speichernutzung führen.

Verweise

Heap-Dump erfassen

jmap-Dienstprogramm

jmap-manpage

Memory Analyzer-Tool (MAT)


Thread-Dumps

Ein Thread-Dump ist ein Snapshot des Status aller Threads eines laufenden Java-Prozesses. Der Status jedes Threads wird mit dem Inhalt seines Stacks angezeigt. Dieser wird als Stacktrace bezeichnet. Einige der Threads werden Teil der ausgeführten Java-Anwendung sein, während andere interne JVM-Threads sein werden.

Ein Thread-Dump enthält Informationen zu allen Threadaktivitäten der Anwendung. Diese Informationen können für Folgendes nützlich sein:

  • Probleme wie CPU-Spitzen, langsame Antwortzeiten oder nicht reagierende Java-Anwendungen diagnostizieren
  • Anwendungs- und JVM-Leistung optimieren

Thread-Dumps generieren

Der Thread-Dump für einen Java-Prozess kann wie unten gezeigt mit dem jstack-Dienstprogramm generiert werden:

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

Wobei:

Parameter Beschreibung
JAVA_HOME Ist das Installationsverzeichnis von Java.
pid Ist die Prozess-ID der Java-Anwendung, deren Thread-Dump Sie erfassen möchten.
filename Der Name der Datei, in die der Thread-Dump geschrieben wird.

Beispiel

Um einen Thread-Dump für die Prozess-ID 37320 auf dem Message Processor mp-east zu generieren, verwenden Sie den folgenden Befehl:

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

Wie im obigen Beispiel wird der Thread-Dump des Prozesses in der Datei /opt/apigee/edge-message-processor/mp-east-threadDump.txt gespeichert.

Thread-Dumps analysieren

Sie können Thread-Dumps in jedem Texteditor wie vi (Linux) oder Notepad (Windows) anzeigen. Weitere Informationen zu den verschiedenen Abschnitten des Thread-Dumps und zur Interpretation der Informationen finden Sie unter Thread-Dump.

Verweise