Auf FreeBSD können aus Sicherheitsgründen oder zur Kontrolle der Benutzer alle gestarteten Prozesse aufgezeichnet werden. Dazu muss zuerst die entsprechende Logdatei angelegt werden.
# touch /var/account/acct
Nun kann das Aufzeichnen mit Hilfe von accton gestartet werden:
# accton /var/account/acct
Soll das Aufzeichnen bei einem Neustart des Systems automatisch wieder gestartet werden, muss ein entsprechender Eintrag in der /etc/rc.conf gemacht werden:
# echo 'accounting_enable="YES"' >> /etc/rc.conf
Nun können die auf dem System ausgeführten Prozesse mit Hilfe von lastcomm ausgelesen werden. Dabei werden die gebrauchte CPU-Zeit und der Zeitpunkt, an dem der Prozess gestartet wurde, angezeigt:
# lastcomm | head
cron -F root __ 0.001 secs Sat Aug 16 14:03
sh - beat __ 0.004 secs Sat Aug 16 14:03
sh - beat __ 0.007 secs Sat Aug 16 14:03
fetch - beat __ 0.008 secs Sat Aug 16 14:03
sh - beat __ 0.005 secs Sat Aug 16 14:03
rm - beat __ 0.001 secs Sat Aug 16 14:03
sh -F beat __ 0.001 secs Sat Aug 16 14:03
awk - beat __ 0.002 secs Sat Aug 16 14:03
sh -F beat __ 0.000 secs Sat Aug 16 14:03
date - beat __ 0.002 secs Sat Aug 16 14:03
Nun kann mit lastcomm auch abgefragt werden, welcher Prozess wann gestartet wurde. Die -S Option zeigt die Startzeit des Prozesses an, die -E Option die Zeit, zu welcher der Prozess beendet wurde:
# lastcomm -SE mysqlcheck
mysqlcheck - root __ Sat Aug 16 04:59 Sat Aug 16 05:03
mysqlcheck - root __ Sat Aug 16 04:27 Sat Aug 16 04:59
Auch können die gestarteten Prozesse eines Benutzers ausgelesen werden:
# lastcomm beat | head
sh - beat __ 0.004 secs Sat Aug 16 14:18
sh - beat __ 0.007 secs Sat Aug 16 14:18
fetch - beat __ 0.008 secs Sat Aug 16 14:18
sh - beat __ 0.005 secs Sat Aug 16 14:18
rm - beat __ 0.001 secs Sat Aug 16 14:18
sh -F beat __ 0.001 secs Sat Aug 16 14:18
awk - beat __ 0.002 secs Sat Aug 16 14:18
sh -F beat __ 0.000 secs Sat Aug 16 14:18
date - beat __ 0.002 secs Sat Aug 16 14:18
sh -F beat __ 0.001 secs Sat Aug 16 14:18
Möchte man in Echtzeit anschauen, welche Prozesse ausgeführt werden, so kann folgender Befehl verwendet werden:
# tail -f -c 0 /var/account/acct | lastcomm -f -
pt_chown - root __ 0.002 secs Sat Aug 16 14:10
csh -F beat ttyp2 0.001 secs Sat Aug 16 14:10
[ - beat ttyp2 0.002 secs Sat Aug 16 14:10
sleep - root __ 0.001 secs Sat Aug 16 14:08
id - root __ 0.002 secs Sat Aug 16 14:10
sh -F root __ 0.000 secs Sat Aug 16 14:10
sed - root __ 0.002 secs Sat Aug 16 14:10
sh -F root __ 0.001 secs Sat Aug 16 14:10
dirname - root __ 0.001 secs Sat Aug 16 14:10
realpath - root __ 0.002 secs Sat Aug 16 14:10
perl5.8.8 - root __ 0.197 secs Sat Aug 16 14:10
sh - root __ 0.012 secs Sat Aug 16 14:10
sh -F root __ 0.001 secs Sat Aug 16 14:10
head - root __ 0.002 secs Sat Aug 16 14:10
[...]
Mit Hilfe von sa können nun Statistiken aus den gesammelten Daten erstellt werden. Mit Hilfe der -m Option kann eine Statistik pro Systembenutzer erstellt werden. In der ersten Spalte wird der Benutzername, in der zweiten die Anzahl aufgerufener Befehle, in der dritten Spalte die verbrauchte CPU Zeit in Minuten und in der vierten Spalte die Anzahl I/O Operationen angezeigt. Die letzte Spalte zeigt das "CPU storage Integral" an.
Die Informationen aus /var/account/acct werden regelmässig zusammengefasst und in zwei Dateien namens /var/account/savacct und /var/account/usracct geschrieben. Sollen diese Zusammenfassungen von sa nicht konsultiert werden, kann die -i Option verwendet werden:
# sa -m
root 355295 2469616839080897.00cpu 4680095707762672640tio4716451977516570624k*sec
operator 1320 2444245624632115.00cpu 4619567317775286272tio4673811998809535488k*sec
sshd 24 2438677375134378.50cpu 0tio4657441095305658368k*sec
smmsp 46 2433793290438792.50cpu 4621256167635550208tio4663265208397997056k*sec
beat 55809 2457577981511816.50cpu 4624633867356078080tio4700035557291664384k*sec
guest 195 2446241946682436.50cpu 4638496509959077888tio4669250949699600384k*sec
nobody 384 1.32cpu 183408tio 23944k*sec
# sa -mi
root 26203 8.28cpu 414130tio 1569806k*sec
operator 840 0.05cpu 10tio 53464k*sec
sshd 6 0.00cpu 0tio 850k*sec
smmsp 31 0.00cpu 61tio 9326k*sec
beat 35755 2.30cpu 225tio 2961561k*sec
nobody 384 1.32cpu 183408tio 23944k*sec
Ruft man sa ohne Optionen auf, werden die Statistiken pro Befehl angezeigt.:
# sa | head
6734 10.511re 10.46cp 0avio 6866k cc1
1992 7.495re 6.51cp 0avio 2122k perl5.8.8
1017 9.142re 4.22cp 16avio 1148k bsdtar
46443 484.530re 3.28cp 0avio 14967k sh
170 19.333re 3.10cp 3459avio 41k find
157832 176.759re 2.12cp 0avio 42037k sh*
48233 15.835re 2.03cp 0avio 26532k sed
26 2.005re 2.00cp 1avio 44k perl
608 2.390re 1.75cp 19avio 760k mtree
Die erste Spalte zeigt an, wie oft der Befehl ausgeführt wurde, die zweite die Laufzeit in Minuten, die dritte Spalte die totale CPU Zeit in Minuten, die vierte Spalte die durchschnittliche Anzahl I/O Operationen. Möchte man die Liste nach der durchschnittlichen Anzahl I/O Operationen sortiert haben, kann die -d Option verwendet werden. Soll nach totalen CPU-Zeit sortiert werden, verwendet man die -k Option.
Mehr Informationen findet man in den Manpages accton(8), lastcomm(1) und sa(8).