「watch」を使用して値の違いを検出し、ファイルに書き込む

「watch」を使用して値の違いを検出し、ファイルに書き込む

私は、watch -n .5 "ps aux | sort -rk 3,3 | head -n 2" コマンドを使用して、サーバーで断続的に %CPU スパイクが発生する原因を突き止めようとしています。このコマンドは、0.5 秒ごとに %CPU が最も高いプロセスを表示します。

ただし、キャッチするのが難しいため (イベントはランダムで、どれくらい続くかわかりません)、次の操作を実行したいと思います。1. 間隔を短くして (イベントをキャッチする可能性を高めるため)、出力をファイルに書き込みます。2. トップ プロセスは通常は一定であるため、2 つの後続の出力間に値の違いがあるとき (CPU スパイクが発生したときなど) のみ書き込み、このような巨大なファイルが作成されないようにします。

ティア!

答え1

時計については忘れてください。少なくとも理論的には、これで十分です。

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

唯一の問題は、各プロセスの CPU 使用率が時間の経過とともに変化し、特に CPU 使用率を求めているため、 の効果はuniq非常に限られており、それでも大量のデータが生成されることです。 を使用して、cut重要でない変数を抑制し、それらの変化によって生成されるデータ ポイントの数が増えないようにすることができます。

関連情報