
我試圖使用以下命令捕獲伺服器中間歇性%CPU峰值的原因:watch -n .5“ps aux | sort -rk 3,3 | head -n 2”,其中顯示具有最高%的進程CPU 每0.5 秒一次。
但是,由於很難捕獲(事件是隨機的,我不知道它會持續多長時間),所以我想執行以下操作: 1.減少間隔(以增加捕獲事件的機會)並將輸出寫入a file 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
抑制對您不重要的變量,以便它們的變化不會增加生成的數據點的數量。