26.4. DTrace verwenden
Zurück | Kapitel 26. DTrace | Weiter

## 26.4. DTrace verwenden

Bevor die DTrace-Funktionaltät benutzt werden kann, muss das DTrace-Gerät existieren. Um das Gerät zu laden, geben Sie das folgende Kommando ein:

`#` `kldload dtraceall`

Die DTrace-Unterstützung sollte jetzt verfügbar sein. Um alle Sonden anzuzeigen, kann der Administrator nun den folgenden Befehl eingeben:

`#` `dtrace -l | more`

Alle Ausgaben werden an das `more`-Programm übergeben, da der Bildschirmpuffer sehr schnell überlaufen wird. Ab diesem Punkt kann DTrace als einsatzbereit angesehen werden. Jetzt ist es an der Zeit, sich näher mit dem Satz von Werkzeugen zu beschäftigen.

Der Werkzeugsatz ist eine Sammlung von vorgefertigten Skripten, die von DTrace ausgeführt werden können, um Systeminformationen zu sammeln. Es gibt Skripte, die offene Dateien überprüfen, den Speicher, CPU-Verbrauch und noch viel mehr. Entpacken Sie die Skripte mit dem folgenden Befehl:

`#` `gunzip -c DTraceToolkit* | tar xvf -`

Wechseln Sie mit dem `cd`-Kommando in dieses Verzeichnis und ändern Sie die Berechtigung zum Ausführen von allen Dateien, deren Name klein geschrieben ist, auf `755`.

All diese Skripte müssen inhaltlich verändert werden. Diejenigen, die auf `/usr/bin/ksh` verweisen, müssen in `/usr/local/bin/ksh` geändert werden und die Anderen, welche `/usr/bin/sh` verwenden, müssen so angepasst werden, dass sie `/bin/sh` verwenden. Schliesslich müssen noch diejenigen, die `/usr/bin/perl` enthalten, auf `/usr/local/bin/perl` umgeschrieben werden.

### Wichtig:

Zu diesem Zeitpunkt ist es klug, den Leser noch einmal daran zu erinnern, dass die Unterstützung von DTrace in FreeBSD noch unvollständig und experimentell ist. Viele dieser Skripte werden nicht funktionieren, da diese entweder zu sehr Solaris™-spezifisch sind oder Sonden verwenden, die zur Zeit noch nicht unterstützt werden.

Zum Zeitpunkt, an dem dieses Dokument geschrieben wurde, existieren nur zwei Skripte im DTrace-Werkzeugsatz, die von FreeBSD komplett unterstützt werden: die Skripte `hotkernel` und `procsystime`. Diese beiden werden in den folgenden Teilen dieses Abschnitts genauer untersucht.

`hotkernel` wurde entworfen, um zu identifizieren, welche Funktion die meiste Kernelzeit beansprucht. Normal ausgeführt, wird es Ausgaben ähnlich der Folgenden produzieren:

`#` `./hotkernel` Sampling... Hit Ctrl-C to end.

Der Systemadministrator muss die Tastenkombination Ctrl+C drücken, um den Prozess zu stoppen. Nach dem Abbruch wird das Skript eine Liste von Kernelfunktionen und Zeitmessungen ausgeben, aufsteigend sortiert nach den Zeiten:

kernel`_thread_lock_flags 2 0.0% 0xc1097063 2 0.0% kernel`sched_userret 2 0.0% kernel`kern_select 2 0.0% kernel`generic_copyin 3 0.0% kernel`_mtx_assert 3 0.0% kernel`vm_fault 3 0.0% kernel`sopoll_generic 3 0.0% kernel`fixup_filename 4 0.0% kernel`_isitmyx 4 0.0% kernel`find_instance 4 0.0% kernel`_mtx_unlock_flags 5 0.0% kernel`syscall 5 0.0% kernel`DELAY 5 0.0% 0xc108a253 6 0.0% kernel`witness_lock 7 0.0% kernel`read_aux_data_no_wait 7 0.0% kernel`Xint0x80_syscall 7 0.0% kernel`witness_checkorder 7 0.0% kernel`sse2_pagezero 8 0.0% kernel`strncmp 9 0.0% kernel`spinlock_exit 10 0.0% kernel`_mtx_lock_flags 11 0.0% kernel`witness_unlock 15 0.0% kernel`sched_idletd 137 0.3% 0xc10981a5 42139 99.3%

Dieses Skript funktioniert auch mit Kernelmodulen. Um diese Eigenschaft zu verwenden, starten Sie das Skript mit dem Parameter `-m`:

`#` `./hotkernel -m` Sampling... Hit Ctrl-C to end. ^C MODULE COUNT PCNT 0xc107882e 1 0.0% 0xc10e6aa4 1 0.0% 0xc1076983 1 0.0% 0xc109708a 1 0.0% 0xc1075a5d 1 0.0% 0xc1077325 1 0.0% 0xc108a245 1 0.0% 0xc107730d 1 0.0% 0xc1097063 2 0.0% 0xc108a253 73 0.0% kernel 874 0.4% 0xc10981a5 213781 99.6%

Das `procsystime` Skript fängt die Systemaufruf-Zeiten ab und zeigt diese für eine gegebene PID oder einen Prozessnamen an. Im folgenden Beispiel wurde eine neue Instanz von `/bin/csh` erzeugt. `procsystime` wurde ausgeführt und verbleibt so, während ein paar Befehle in die andere Instanz von `csh` eingegeben werden. Dies sind die Ergebnisse dieses Versuchs:

`#` `./procsystime -n csh` Tracing... Hit Ctrl-C to end... ^C Elapsed Times for processes csh, SYSCALL TIME (ns) getpid 6131 sigreturn 8121 close 19127 fcntl 19959 dup 26955 setpgid 28070 stat 31899 setitimer 40938 wait4 62717 sigaction 67372 sigprocmask 119091 gettimeofday 183710 write 263242 execve 492547 ioctl 770073 vfork 3258923 sigsuspend 6985124 read 3988049784

Wie aus der Ausgabe ersichtlich ist, verbraucht der `read()`-Systemaufruf die meiste Zeit in Nanosekunden, während der Systemaufruf `getpid()` hingegen am schnellsten läft.

Zurück | Nach oben | Weiter
26.3. Die DTrace Unterstützung aktivieren | Zum Anfang | 26.5. Die Sprache D

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.