Você deve conseguir fazer isso usando o comando padrão ps
. De man ps
:
%mem %MEM ratio of the process's resident set size to the physical
memory on the machine, expressed as a percentage.
rss RSS resident set size, the non-swapped physical memory that
a task has used (inkiloBytes).
vsz VSZ virtual memory size of the process in KiB (1024byte units).
Device mappings are currently excluded; this is subject
to change.
O único outro detalhe que você precisa é o seu processo 'PID. Então, se seu aplicativo é chamado myApp, você pode obter o PID assim:
ps x | grep myApp
Que imprime uma lista como esta:
15909 pts/3 S 0:37 myApp
22583 pts/6 S+ 0:00 grep --color myApp
A primeira coluna é o ID do processo (PID). Agora, se você quiser automatizar isso, você precisa pular a linha que contém o comando grep e salvar a saída em uma variável BASH:
pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}')
A parte awk
faz o comando imprimir apenas o primeiro campo, o PID.
Você pode reunir tudo isso em um único liner que salvará o uso de memória de seu aplicativo a cada minuto em um arquivo chamado memlog.txt
:
while sleep 60; do \
pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}') && \
ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt ; \
done
-
while sleep 60
faz com que o bash rode em um loop infinito, esperando 60 segundos entre loops -
sleep 60
diz para esperar por 60 segundos. Altere esse valor se você precisar atualizá-lo com mais frequência.
A saída resultante é um arquivo ( memlog.txt
) com 4 colunas: o PID do seu aplicativo, o tamanho do conjunto residente, o tamanho da memória virtual e a porcentagem de memória. Por exemplo:
4166 25240 633028 0.3
4166 25240 633028 0.3
4166 25240 633028 0.3
Isso pode ser facilmente estendido para incluir o uso da CPU e um tempo para cada medição. Por exemplo, para incluir o horário:
while sleep 60; do \
date=$(date +%D" "%H:%M:%S);
echo -n "$date : " >> memlog.txt;
pid=$(ps x | grep myApp | grep -v grep | awk '{print $1}') && \
ps xo pid,rss,vsz,%mem | grep "$pid" >> memlog.txt; \
done