Verwenden Sie "watch", um Wertunterschiede zu erkennen und in eine Datei zu schreiben

277
user305131

Ich versuche, die Ursache eines intermittierenden% CPU-Spikes in einem Server mit dem Befehl einzufangen: watch -n .5 "ps aux | sort -rk 3,3 | head -n 2". Dabei wird der Prozess mit dem höchsten Prozentwert angezeigt CPU alle 0,5 Sekunden.

Da es jedoch schwierig ist, zu fangen (das Ereignis ist zufällig und ich habe keine Ahnung, wie lange es dauert), möchte ich Folgendes tun: 1. Verringern Sie das Intervall (um die Wahrscheinlichkeit des Ereignisses zu erhöhen) und schreiben Sie die Ausgabe in Eine Datei 2. Da der Top-Prozess normalerweise ohnehin konstant ist, möchte ich nur dann schreiben, wenn zwischen zwei aufeinanderfolgenden Ausgaben ein Unterschied besteht (z. B. wenn die CPU-Spitze auftritt), um zu vermeiden, dass eine so große Datei erstellt wird.

TIA!

0

1 Antwort auf die Frage

1
retrography

Forget about watch, this should do, at least theoretically:

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 

The only problem is that since CPU usage of each process varies over time, and what you are seeking for is particularly the CPU usage, the effect of uniq is very limited and still a large amount of data is produced. You can use cut to suppress the variables that are not important for you, so that their variation does not increase the number of data points produced.