Verwenden von „watch“, um Werteunterschiede zu erkennen und in eine Datei zu schreiben

Verwenden von „watch“, um Werteunterschiede zu erkennen und in eine Datei zu schreiben

Ich versuche, die Ursache für eine zeitweilige CPU-Auslastungsspitze in einem Server mit dem Befehl „watch -n .5 "ps aux | sort -rk 3,3 | head -n 2"“ zu ermitteln. Dabei wird alle 0,5 Sekunden der Prozess mit der höchsten CPU-Auslastung angezeigt.

Da es jedoch schwierig ist, es zu erfassen (das Ereignis ist zufällig und ich habe keine Ahnung, wie lange es dauert), möchte ich Folgendes tun: 1. Das Intervall reduzieren (um die Chance zu erhöhen, das Ereignis zu erfassen) und die Ausgabe in eine Datei schreiben. 2. Da der oberste Prozess normalerweise ohnehin konstant ist, möchte ich nur schreiben, wenn zwischen zwei nachfolgenden Ausgaben ein Werteunterschied besteht (z. B. wenn der CPU-Spitzenwert auftritt), um die Erstellung einer so großen Datei zu vermeiden.

Danke!

Antwort1

Vergessen Sie die Uhr, das hier sollte zumindest theoretisch funktionieren:

while true; do
  # I cut the header first with tail
  cat file <(ps aux | tail -n +2 | sort -rk 3,3 | head -n 2) | sort | uniq | sponge file
  # A certain amount of delay
  sleep 0.1
done

Das einzige Problem besteht darin, dass die CPU-Auslastung jedes Prozesses im Laufe der Zeit variiert und Sie insbesondere die CPU-Auslastung ermitteln möchten. Der Effekt uniqist daher sehr begrenzt und es werden trotzdem große Datenmengen erzeugt. Sie können verwenden, cutum die für Sie unwichtigen Variablen zu unterdrücken, damit ihre Variation die Anzahl der erzeugten Datenpunkte nicht erhöht.

verwandte Informationen