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