Como você grava a quantidade de memória que um aplicativo está usando no OS X

0

Estou num Mac Mini com o OS X 10.8.2. Eu sou um desenvolvedor de aplicativos, mas neste caso estou construindo um aplicativo em C ++, então eu não posso usar o Xcode para esta questão. Gostaria de acompanhar a quantidade de memória que meu aplicativo está usando, mas não quero gravá-lo manualmente. Como faço isso?

MAIS INFORMAÇÕES: Quero gravar o dia todo. Eu vou ter o aplicativo rodando o dia todo, para que eu possa comparar os picos de memória. Não me oponho a aplicativos de terceiros, desde que sejam confiáveis. Obrigado.

    
por Josiah 03.12.2012 / 17:52

1 resposta

3

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 
    
por 03.12.2012 / 18:18