使用“watch”檢測值的差異並寫入文件

使用“watch”檢測值的差異並寫入文件

我試圖使用以下命令捕獲伺服器中間歇性%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抑制對您不重要的變量,以便它們的變化不會增加生成的數據點的數量。

相關內容