läuft vmstat alle 300 Millisekunden

972
karthikeyan vijayan

Gibt es eine Möglichkeit zu laufen vmstat, iostat, sarBefehle wiederholt mit einem Intervall von 300 Millisekunden?

Ich weiß, dass die Standardeinstellung 1 Sekunde beträgt, aber ich möchte alle 300 Millisekunden für die Überwachung der Systemleistung laufen lassen.

1

2 Antworten auf die Frage

0
Thomas Dickey

Sie könnten ein Skript schreiben, das den Befehl wiederholt im Abstand von 0,3 Sekunden aufruft:

  • Einige Systeme ( z. B. Linux, FreeBSD, Solaris ) bieten einen Befehl auf sleepBefehlsebene, der Intervalle von weniger als 1 Sekunde akzeptiert. Für diese ist es möglich, eine gewöhnliche Shell-Schleife wie z

    #!/bin/sh CMD=vmstat $CMD while : do $CMD | tail -n 1 sleep 0.3 done

    Das ist natürlich nicht in POSIX .

  • Andere Skriptsprachen wie Perl bieten Funktionen, die stattdessen verwendet werden können. Für Perl gibt es die usleepFunktion in Time::HiReszB
 #! / usr / bin / perl -w Verwenden Sie streng; use Time :: HiRes qw (usleep);  unser $ CMD = "vmstat"; System ($ CMD); während (1) { system ("$ CMD | tail -n 1"); usleep (300000); } 
Nur ein Hinweis "vmstat" ist "nahezu in Echtzeit", so dass der Unterschied zwischen 300/500/800 Millisekunden nicht wirklich groß sein kann. Unfundednut vor 9 Jahren 0
Der akkumulierte Fehler über mehrere Minuten würde sich jedoch bemerkbar machen (selbst nach Berücksichtigung der Startzeit von `vmstat` selbst). Thomas Dickey vor 9 Jahren 1
-1
rhys stevens

Ich habe diesen Ansatz ausprobiert, indem ich in einer while-Schleife mit dem vmstat geklopft habe, so dass ich leicht ausbrechen konnte, wenn ich meinen Test beendet hatte, und dann die gesammelte Protokolldatei in csv analysiert, um sie für die grafische Darstellung zu importieren. Es hat funktioniert, aber vmstats 1. Linie war fast immer gleich, also war dies USELESS. Ich musste vmstat manuell ausführen und die Protokolle in einer Datei sammeln und sie danach bearbeiten.

#!/bin/bash OUTPUT="/dropinbox/vmstat_$(hostname)_$(date +%Y-%m-%d_%H-%M).csv"  echo Starting Recording... echo Press Q to exit.  # create blank temp file echo '' > /tmp/vmstat.log  while true; do  # -t time -a active and inactive memory reporting -n no repeate headers -S M size vmstat 1 1 -tanwS M >> /tmp/vmstat.log  # In the following line -t for timeout, -N for just 1 character # -t 0.25 therefore loop will run 4 times a second. read -t 0.25 -N 1 input if [[ $input = "q" ]] || [[ $input = "Q" ]]; then # The following line is for the prompt to appear on a new line. echo Finshed break fi done  # remove blank lines sed -i '/^$/d' /tmp/vmstat.log # remove headers sed -i '/procs/d' /tmp/vmstat.log # Keep 1 line of the 2nd headers grep -m1 r /tmp/vmstat.log > /tmp/headers tr -s ' ', < /tmp/headers | sed s/,// > $OUTPUT # remove all 2nd line headers sed -i '/r/d' /tmp/vmstat.log # process columns into csv output missing out column 18 (Date) as this got in myway awk 'BEGIN { OFS = "," }!($18="")' /tmp/vmstat.log |tr -s ',' >> $OUTPUT cat -vet $OUTPUT echo finished saving to $OUTPUT