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

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

ТИА!

1 ответ1

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 чтобы подавить переменные, которые не важны для вас, чтобы их изменение не увеличивало количество создаваемых точек данных.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .