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.
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:
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 3988049784Wie aus der Ausgabe ersichtlich ist, verbraucht der
read()
-Systemaufruf die meiste Zeit in Nanosekunden,
während der Systemaufruf getpid()
hingegen am
schnellsten läft.
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>.