BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Gestartete Prozesse aufzeichnen

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).

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
Ports-Subversion-Repository spiegeln
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
 Permalink