Есть программа, которая иногда ест много памяти. Потребление памяти ею можно отслеживать командой top -b -d60 -o +%MEM -c | grep memory_eater | grep -v grep > memory.log & disown
Но иногда она быстро отрабатывает – за несколько минут, и файл остаётся пустой. В чём проблема? Слишком малый объём текста зависает в кеше и не сбрасывается? Можно ли как-то ускорить сбрасывание?
P.S. Если увеличить частоту опроса top до -d1
или -d0.1
, всё важное фиксируется, но лог увеличивается на 2-3 порядка. Реально достаточно писать раз в минуту. Вопрос не в том, как отслеживать память, а как записать этот лог в файл.
Ответ:
top -b -d60 -o +%MEM -c | grep --line-buffered memory_eater | grep -v --line-buffered grep > memory.log & disown
или
top -b -d60 -o +%MEM -c | stdbuf -o0 -i0 grep memory_eater | stdbuf -o0 -i0 grep -v grep > memory.log & disown