使用“watch”检测值的差异并写入文件

使用“watch”检测值的差异并写入文件

我正在尝试使用以下命令来捕获服务器中间歇性 %CPU 峰值的原因:watch -n .5 "ps aux | sort -rk 3,3 | head -n 2",该命令每 0.5 秒显示一次 CPU 百分比最高的进程。

但是由于很难捕捉(事件是随机的,我不知道它持续多久),我想做以下事情:1.减少间隔(以增加捕捉事件的机会)并将输出写入文件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抑制对您不重要的变量,以便它们的变化不会增加产生的数据点数量。

相关内容