Использование «watch» для обнаружения разницы в значениях и записи в файл

Использование «watch» для обнаружения разницы в значениях и записи в файл

Я пытаюсь выявить причину периодических скачков %CPU на сервере с помощью команды: watch -n .5 "ps aux | sort -rk 3,3 | head -n 2", которая отображает процесс с самым высоким %CPU каждые 0,5 секунды.

Однако, поскольку его трудно отловить (событие случайное, и я понятия не имею, как долго оно длится), я хочу сделать следующее: 1. Уменьшить интервал (чтобы увеличить вероятность отлова события) и записать вывод в файл. 2. Поскольку верхний процесс в любом случае обычно постоянен, я хотел бы записывать только тогда, когда есть разница в значении между двумя последовательными выводами (например, когда происходит скачок загрузки ЦП), чтобы избежать создания такого огромного файла.

ТИА!

решение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

Единственная проблема в том, что поскольку использование ЦП каждым процессом меняется со временем, а то, что вы ищете, это именно использование ЦП, эффект uniqочень ограничен, и все равно создается большой объем данных. Вы можете использовать cutдля подавления переменных, которые не важны для вас, так что их изменение не увеличит количество произведенных точек данных.

Связанный контент