Tracefunktion
Mit der Tracefunktion können Sie Systemprobleme eingrenzen, indem Sie ausgewählte Systemereignisse oder ausgewählte Prozesse überwachen. Zu den Ereignissen, die überwacht werden können, gehören: Eintritt und Austritt aus ausgewählten Subroutinen, Kernelroutinen, Kernelerweiterungsroutinen und Interrupt-Handler.
Die Traceerstellung kann auch auf die Traceerstellung für eine Gruppe aktiver Prozesse oder Threads beschränkt werden oder sie kann verwendet werden, um ein Programm einzuleiten und zu verfolgen.
Wenn die Tracefunktion aktiv ist, werden Informationen in einer Systemtraceprotokolldatei aufgezeichnet. Die Tracefunktion umfasst Befehle zum Aktivieren und Steuern von Traces und zum Generieren von Traceberichten. Anwendungen und Kernelerweiterungen können mehrere Subroutinen verwenden, um zusätzliche Ereignisse aufzuzeichnen.
Weitere Informationen zur Tracefunktion finden Sie unter:
Übersicht über die Tracefunktion
Die Tracefunktion befindet sich in der Dateigruppe bos.sysmgt.trace . Geben Sie Folgendes in die Befehlszeile ein, um festzustellen, ob diese Dateigruppe installiert ist:
lslpp -l | grep bos.sysmgt.trace
Wenn eine Zeile erzeugt wird, die bos.sysmgt.trace enthält, wird die Dateigruppe installiert. Andernfalls muss sie installiert werden.
Die Systemtracefunktion zeichnet Traceereignisse auf, die später mit dem Befehl trace report formatiert werden können. Traceereignisse werden in Kernel-oder Anwendungscode kompiliert, aber nur verfolgt, wenn die Traceerstellung aktiv ist.
Die Traceerstellung wird mit dem Befehl trace oder der Subroutine trcstart aktiviert. Die Traceerstellung wird entweder mit dem Befehl trcstop oder mit der Subroutine trcstop gestoppt. Im aktiven Zustand kann die Traceerstellung mit den Befehlen trcoff und trcon oder den Subroutinen trcoff und trcon ausgesetzt oder fortgesetzt werden.
Sobald der Trace mit trcstopgestoppt wurde, kann mit dem Befehl trcrpt ein Tracebericht generiert werden. Dieser Befehl verwendet eine Vorlagendatei, /etc/trcfmt, um zu wissen, wie die Einträge formatiert werden. Die Vorlagen werden mit dem Befehl trcupdate installiert. Eine Beschreibung der Vorlagen finden Sie unter dem Befehl trcupdate .
Trace steuern
Der Befehl trace startet die Traceerstellung für Systemereignisse und steuert die Größe des Tracepuffers und der Protokolldateien.
Es gibt drei Methoden zum Erfassen von Tracedaten.
- Die Standardmethode ist die Verwendung von zwei Puffern zum kontinuierlichen Sammeln von Tracedaten, wobei ein Puffer geschrieben wird, während Daten in den anderen Puffer gestellt werden. Die Protokolldatei wird umgebrochen, wenn sie voll wird.
- Die Umlaufmethode erfasst kontinuierlich Tracedaten, schreibt die Daten jedoch nur in die Protokolldatei, wenn der Trace gestoppt wird. Dies ist besonders nützlich für das Debugging eines Problems, bei dem Sie wissen, wann das Problem auftritt und Sie nur die Daten zu diesem Zeitpunkt erfassen möchten. Sie können den Trace jederzeit starten und sofort stoppen, nachdem das Problem aufgetreten ist und Sie die Ereignisse rund um das Problem erfasst haben. Diese Methode wird mit dem Tracedämonflag -l aktiviert.
- Die dritte Option verwendet nur einen Tracepuffer und beendet die Traceerstellung, wenn dieser Puffer voll ist, und schreibt den Puffer in die Protokolldatei. Der Trace wird zu diesem Zeitpunkt nicht gestoppt, sondern inaktiviert, als wäre ein Befehl trcoff abgesetzt worden. An diesem Punkt möchten Sie den Trace normalerweise mit dem Befehl trcstop stoppen. Diese Option wird am häufigsten verwendet, um Leistungsdaten zu erfassen, bei denen kein Trace für die Ein-/Auslagerung oder Pufferauslagerung durchgeführt werden soll, bis die Daten erfasst wurden. Verwenden Sie das Flag -f , um diese Option zu aktivieren.
Normalerweise möchten Sie den Tracebefehl asynchron ausführen, d. h., Sie möchten den Tracebefehl eingeben und dann mit anderen Arbeiten fortfahren. Verwenden Sie das Flag -a oder das Flag -x , um den Trace asynchron auszuführen. Wenn Sie das Flag -a verwenden, dann müssen Sie den Trace mit dem Befehl trcstop stoppen. Wenn Sie das Flag -x verwenden, wird der Trace automatisch gestoppt, wenn das Programm beendet ist.
Normalerweise ist es wünschenswert, die Informationen, für die ein Trace erstellt wird, zu begrenzen. Verwenden Sie die Flags -j Ereignisse oder -k Ereignisse , um eine Gruppe von einzuschließenden (-j) oder auszuschließenden (-k) Ereignissen anzugeben.
Um die Programmnamen anzuzeigen, die Trace-Hooks zugeordnet sind, müssen bestimmte Hooks aktiviert sein. Diese werden mithilfe der Traceereignisgruppe tidhk angegeben. Wenn Sie beispielsweise einen Trace für den Hook mbuf 254 erstellen und Programmnamen anzeigen möchten, müssen Sie trace wie folgt ausführen:
trace -aJ tidhk -j 254
Die Traceerstellung erfolgt. Geben Sie zum Stoppen der Traceerstellung Folgendes in einer Befehlszeile ein:
trcstop
trcrpt -O exec=on
Die Option -O exec=on trcrpt zeigt die Programmnamen. Weitere Informationen finden Sie in der Beschreibung des Befehls trcrpt .
Häufig ist es wünschenswert, die Puffergröße und die maximale Protokolldateigröße anzugeben. Die Tracepuffer erfordern, dass Realspeicher verfügbar ist, damit kein Paging erforderlich ist, um Trace-Hooks aufzuzeichnen. Die Protokolldatei wird mit der angegebenen maximalen Größe gefüllt und anschließend umgebrochen, wobei die ältesten Tracedaten gelöscht werden. Die Flags -T Größe und -L Größe geben die Größe der Speicherpuffer und die maximale Größe der Tracedaten in der Protokolldatei in Byte an.
Die Traceerstellung kann auch über eine Anwendung gesteuert werden. Weitere Informationen finden Sie in den Artikeln zu trcstartund trcstop .
Traceereignisdaten aufzeichnen
Es gibt zwei Typen von Tracedaten.
- Generische Daten
- besteht aus einem Datenwort, einem Puffer aus nicht transparenten Daten und der Länge der nicht transparenten Daten. Dies ist nützlich für die Verfolgung von Elementen wie Pfadnamen. Weitere Informationen finden Sie im Artikel "Generic Trace Channels" unter Trace Facility Overview. Sie finden sie unter Tracefunktion.Hinweis: Die Traceerstellung für bestimmte Prozesse oder Threads wird nur für Kanal 0 unterstützt. Sie wird für generische Tracekanäle nicht unterstützt.
- Nicht generische Daten
- Dies ist das, was normalerweise vom AIX® verfolgt wird. Jeder Eintrag dieses Typs besteht aus einem Hook-Wort und bis zu 5 Wörtern Tracedaten. Für eine 64-Bit-Anwendung sind dies 8-Byte-Wörter. Der C-Programmierer sollte die Makros TRCHKL0 bis TRCHKL5verwenden. und TRCHKL0T durch TRCHKL5T , das in der Datei /usr/include/sys/trcmacros.h definiert ist, um nicht generische Daten aufzuzeichnen. Wenn diese Makros nicht verwendet werden können, lesen Sie den Artikel zur Subroutine utrchook .
Tracebericht generieren
Eine vollständige Beschreibung von trcrpt finden Sie im Artikel zum Befehl trcrpt . Dieser Befehl wird verwendet, um einen lesbaren Tracebericht aus der mit dem Befehl trace generierten Protokolldatei zu generieren. Standardmäßig formatiert der Befehl Daten aus der Standardprotokolldatei /var/adm/ras/trcfile. Die trcrpt -Ausgabe wird in die Standardausgabe geschrieben.
Geben Sie Folgendes ein, um einen Tracebericht aus der Standardprotokolldatei zu generieren und in /tmp/rptout, zu schreiben:
trcrpt >/tmp/rptout
Um einen Tracebericht aus der Protokolldatei /tmp/tlog in /tmp/rptout, zu generieren, der Programm-und Systemaufrufnamen enthält, verwenden Sie
trcrpt -O exec=on,svc=on /tmp/tlog /tmp/rptout
Tracedaten aus einem Speicherauszug extrahieren
Wenn der Trace aktiv war, als das System einen Speicherauszug erstellt, kann er normalerweise mit dem Befehl trcdead abgerufen werden. Verwenden Sie die Option -o ausgabedatei , um das Überschreiben der Standardtraceprotokolldatei auf dem aktuellen System zu verhindern.
Beispiel:
trcdead -o /tmp/tlog /var/adm/ras/vmcore.0
Erstellt eine Traceprotokolldatei /tmp/tlog , die anschließend wie folgt formatiert werden kann:
trcrpt /tmp/tlog
Befehle der Tracefunktion
Die folgenden Befehle sind Teil der Tracefunktion:
| Befehl | Funktion |
|---|---|
| Trace | Startet die Traceerstellung für Systemereignisse. Mit diesem Befehl können Sie die Größe und Verwaltung der Traceprotokolldatei sowie der internen Tracepuffer, die Traceereignisdaten erfassen, steuern. |
| trcdead | Extrahiert Traceinformationen aus einem Systemspeicherauszug. Wenn das System angehalten wird, während die Tracefunktionen aktiv sind, wird der Inhalt der internen Tracepuffer erfasst. Dieser Befehl extrahiert die Traceereignisdaten aus dem Speicherauszug und schreibt sie in die Traceprotokolldatei. |
| trcnm | Generiert eine Kernelnamensliste, die vom Befehl trcrpt verwendet wird. Eine Kernelnamensliste setzt sich aus einer Symboltabelle und einer Ladeprogrammsymboltabelle einer Objektdatei zusammen. Der Befehl trcrpt verwendet die Datei mit der Kernelnamenslistendatei, um bei der Formatierung eines Berichts aus einer Traceprotokolldatei Adressen zu interpretieren. Hinweis: Es wird empfohlen, die Option -n trace anstelle von trcnmzu verwenden. Dadurch werden Namenslisteninformationen in die Traceprotokolldatei anstatt in eine separate Datei eingefügt und enthalten Symbole aus Kernelerweiterungen.
|
| trcrpt | Formatiert Berichte mit Traceereignisdaten, die in der Traceprotokolldatei enthalten sind Sie können die Ereignisse angeben, die in den Bericht eingeschlossen (oder ausgeschlossen) werden sollen, sowie die Darstellung der Ausgabe mit diesem Befehl festlegen. Der Befehl trcrpt verwendet die Traceformatierungsvorlagen, die in der Datei /etc/trcfmt gespeichert sind, um zu bestimmen, wie die für jedes Ereignis aufgezeichneten Daten zu interpretieren sind. |
| trcstop | Stoppt die Traceerstellung für Systemereignisse. |
| trcupdatum | Aktualisiert die in der Datei /etc/trcfmt gespeicherten Traceformatierungsvorlagen. Wenn Sie Anwendungen oder Kernelerweiterungen hinzufügen, die Traceereignisse aufzeichnen, müssen Sie der Datei /etc/trcfmt Vorlagen für diese Ereignisse hinzufügen. Der Befehl trcrpt verwendet die Traceformatierungsvorlagen, um festzulegen, wie die für jedes Ereignis aufgezeichneten Daten zu interpretieren sind. Softwareprodukte, die Ereignisse aufzeichnen, führen normalerweise den Befehl trcupdate im Rahmen des Installationsprozesses aus. |
Aufrufe und Subroutinen der Tracefunktion
Die folgenden Aufrufe und Subroutinen sind Teil der Tracefunktion:
| Subroutine | Beschreibung |
|---|---|
| trcgen, trcgent | Zeichnet Traceereignisse mit mehr als fünf Datenwörtern auf. Die Subroutine trcgen kann verwendet werden, um ein Ereignis als Teil des Systemereignistrace (Tracekanal 0) aufzuzeichnen oder um ein Ereignis in einem generischen Tracekanal (Kanäle 1 bis 7) aufzuzeichnen. Geben Sie die Kanalnummer in einem Subroutinenparameter an, wenn Sie das Traceereignis aufzeichnen. Die Subroutine trcgent hängt eine Zeitmarke an die Ereignisdaten an. Wenn Sie AIX 5L Version 5.3 mit dem Technology Level 5300-05 und höher verwenden, wird die Zeitmarke unabhängig von der verwendeten Subroutine immer an die Ereignisdaten angehängt. Verwenden Sie trcgenk und trcgenkt im Kernel. C-Programmierer sollten immer die Makros TRCGEN und TRCGenK verwenden. |
| utrchook, utrchook64 | Zeichnet Traceereignisse mit bis zu fünf Datenwörtern auf. Diese Subroutinen können verwendet werden, um ein Ereignis als Teil des Systemereignistrace (Tracekanal 0) aufzuzeichnen. Kernel-Programmierer können trchook und trchook64verwenden. C-Programmierer sollten immer die Makros TRCHKL0 - TRCHKL5 und TRCHKL0T - TRCHKL5T verwenden. Wenn Sie diese Makros nicht verwenden, müssen Sie ein eigenes Trace-Hook-Wort erstellen. Das Format wird mit der Datei /etc/trcfmt dokumentiert. Beachten Sie, dass die 32 -Bit-und 64-Bit-Traces unterschiedliche Hookwortformate haben. |
| Trcoff | Setzt die Erfassung von Tracedaten im Systemereignistracekanal (Kanal 0) oder in einem generischen Tracekanal (1 bis 7) aus. Der Tracekanal bleibt aktiv und die Tracedatenerfassung kann mit der Subroutine trcon wiederaufgenommen werden. |
| trcon | Startet die Erfassung von Tracedaten in einem Tracekanal. Der Kanal kann entweder der Systemereignistracekanal (0) oder ein generischer Kanal (1 bis 7) sein. Der Tracekanal muss jedoch zuvor mit dem Befehl trace oder mit der Subroutine trcstart aktiviert worden sein. Sie können die Tracedatenerfassung mithilfe der Subroutine trcoff aussetzen. |
| trcstart | Stellt eine Bibliotheksschnittstelle für den Tracebefehl bereit. Sie gibt die Kanalnummer des von ihr gestarteten Trace zurück. Wird ein generischer Kanal angefordert, ist die Kanalnummer eine der folgenden Nummern: 1,2,3,4,5,6, 7. Andernfalls ist die Kanalnummer 0. |
| trcstop | Gibt einen generischen Tracekanal frei und inaktiviert ihn. |
Dateien der Tracefunktion
| Datei | Beschreibung |
|---|---|
| /etc/trcfmt | Enthält die Traceformatierungsvorlagen, die vom Befehl trcrpt verwendet werden, um zu bestimmen, wie die für jedes Ereignis aufgezeichneten Daten zu interpretieren sind. |
| /var/adm/ras/trcfile | Enthält die Standardtraceprotokolldatei. Mit dem Befehl trace können Sie eine andere Traceprotokolldatei angeben. |
| /usr/include/sys/trchkid.h | Enthält Trace-Hook-ID-Definitionen. |
| /usr/include/sys/trcmacros.h | Enthält häufig verwendete Makros für die Aufzeichnung von Traceereignissen. |
Traceereignisdaten
Das Format der Traceereignisdaten finden Sie in der Datei /etc/trcfmt .
Hook-IDs verfolgen
hhh00000Dabei ist hhh die Hook-ID.hhhh0000Dabei ist hhhh die Hook-ID.Eine dreistellige ID hat eine implizite 0 in ihrer niedrigstwertigen Ziffer, sodass eine 32-Bit-Hook-ID einem 64-Bit-Hook im Format hhh0entspricht.
Die meisten Trace-Hook-IDs sind in der Datei /usr/include/sys/trchkid.h definiert. Die Werte 0x0100 bis 0x0FF0 können von 64-Bit-Benutzeranwendungen verwendet werden. Die Werte 0x010 bis 0x0FF sind für 32-Bit-Benutzeranwendungen verfügbar. Alle anderen Werte sind für die Verwendung durch das System reserviert. Die aktuell definierten Trace-Hook-Kennungen können mit dem Befehl trcrpt -j aufgelistet werden.
Generische Tracekanäle der Tracefunktion
Die Tracefunktion unterstützt bis zu acht aktive Tracesitzungen gleichzeitig. Jede Tracesitzung verwendet einen Kanal der Multiplex-Trace-Gerätedatei /dev/systrace. Kanal 0 wird von der Tracefunktion verwendet, um Systemereignisse aufzuzeichnen. Die Traceerstellung für Systemereignisse wird mit den Befehlen trace und trcstop gestartet und gestoppt. Wenn Sie bestimmte Prozesse oder Threads verfolgen oder wenn ein Programm verfolgt wird, wird nur Kanal 0 verwendet. Die Kanäle 1 bis 7 werden als generische Tracekanäle bezeichnet und können nur von Subsystemen für andere Tracetypen, wie z. B. Datenverbindungstraces, verwendet werden.
Um die Traceerstellung mithilfe der generischen Tracekanäle der Tracefunktion zu implementieren, ruft ein Subsystem die Subroutine trcstart auf, um einen Tracekanal zu aktivieren und die Kanalnummer zu ermitteln. Die Subsystemmodule können dann Traceereignisse mit den Makros TRCGEN oder TRCGENT oder, falls erforderlich, trcgen, trcgentaufzeichnen.Subroutine trcgenkoder trcgenkt . Die von der Subroutine trcstart zurückgegebene Kanalnummer ist einer der Parameter, die an diese Subroutinen übergeben werden müssen. Das Subsystem kann die Tracedatenerfassung mit den Subroutinen trcoff und trcon aussetzen und wiederaufnehmen und einen Tracekanal mit der Subroutine trcstop inaktivieren. Das Subsystem muss die Benutzerschnittstelle bereitstellen, um das Subsystem-Tracing zu aktivieren und zu inaktivieren.
Die Trace-Hook-IDs, die meisten in der Datei /usr/include/sys/trchkid.h gespeichert sind, und die Traceformatierungsvorlagen, die in der Datei /etc/trcfmt gespeichert sind, werden von allen Trace-Kanälen gemeinsam genutzt.