Wenn man mal kurzfristig über einen mittellangen Zeitraum das Verhalten von Speicher und CPU in ein Logfile packen möchte, kann man das folgendermaßen bewerkstelligen:
Zunächst mal pastet man folgende Zeile in die Konsole:
/usr/bin/vmstat | /usr/bin/sed "s/^/$(date) | /" > /var/log/perflog.log
Damit erzeugt man die ersten Zeilen des Logfiles. Das macht es im Nachhinein einfacher das Logfile auszuwerten.
Anschließend erzeugt man einen Eintrag im Crontab:
* * * * * /usr/bin/vmstat | /usr/bin/awk 'NR == 3' | /usr/bin/sed "s/^/$(date) | /" >> /var/log/perflog.log
Das bewirkt, daß jede Minute eine neue Zeile in das Logfile geschrieben wird.
Die Logfilelocation kan man natürlich frei wählen.
Eine weitere schöne Möglichkeit bietet sich mit top.
Trägt man folgende Zeile in die Crontab ein:
/usr/bin/top -c -b -n 1 | /usr/bin/sed ':a;N;$!ba;s/[ \t]*\n/;/g' | /usr/bin/awk -F";" '{print $1,"|", $2,"|", $3,"|", $4,"|", $8}' | /usr/bin/sed "s/^/$(date) | /" >> /var/log/performance.log
Wird ein sehr ausführliches Performancelog erstellt.
Hier bitte nicht vergessen das Logrotate (/etc/logrotate.d) zu aktivieren.
Das Tüpfelchen auf dem i bildet folgende Zeile:
* * * * * (/usr/bin/users;COLUMNS=1800 /usr/bin/top -c -b -n 1) | /usr/bin/sed ':a;N;$!ba;s/[ \t]*\n/;/g' | /usr/bin/awk -F";" '{print "users: ", $1,"|",$2,"|", $3,"|", $4,"|", $5,"|", $9}' | /usr/bin/sed "s/^/$(date) | /" | /usr/bin/sed "s/users: top/users: | top/" >> /var/log/performance.log
Hiermit werden die jeweils angemeldeten User, die Speicherauslastung, der CPU-Load, die Uptime und der aktuell cpu-hungrigste Task incl. Timestamp gelogged.