
私は、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
重要でない変数を抑制し、それらの変化によって生成されるデータ ポイントの数が増えないようにすることができます。