* nix mede o uso de memória

6

Eu gostaria de medir a memória total (como a RAM) usada por um programa durante sua execução. Idealmente, algo como time que executa o programa e imprime estatísticas quando sai.

Existe tal ferramenta padrão no mundo unix / linux / bsd? Obrigado.

EDITAR :

o programa que eu estou tentando fazer o perfil leva frações de segundo para executar, então qualquer coisa que implique "enquanto estiver correndo, cheque isso" não funcionará. é por isso que estou pedindo uma ferramenta como "tempo".

    
por pistacchio 03.01.2010 / 19:10

7 respostas

2

O comando strace pode ser de alguma utilidade. Ele mostrará a você em quais chamadas do sistema o tempo está sendo usado:

$ strace -cTv zip /tmp/test.zip /usr/share/dict/words
  adding: usr/share/dict/words (deflated 73%)
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00    0.000055           2        34           read
  0.00    0.000000           0        21           write
  0.00    0.000000           0        12         3 open
  0.00    0.000000           0         9           close
  0.00    0.000000           0         3         3 access
  0.00    0.000000           0         1           rename
  0.00    0.000000           0         3           brk
  0.00    0.000000           0         1           gettimeofday
  0.00    0.000000           0         4           munmap
  0.00    0.000000           0         3           mprotect
  0.00    0.000000           0         6           _llseek
  0.00    0.000000           0         6           rt_sigaction
  0.00    0.000000           0        12           mmap2
  0.00    0.000000           0         8         1 stat64
  0.00    0.000000           0         1         1 lstat64
  0.00    0.000000           0         9           fstat64
  0.00    0.000000           0         1           fcntl64
  0.00    0.000000           0         1           set_thread_area
------ ----------- ----------- --------- --------- ----------------
100.00    0.000055                   141         8 total
    
por 03.01.2010 / 20:07
1

No Linux, você pode ler / proc / [pid] / status; o campo VmPeak é o tamanho máximo da memória virtual, VmHWM é o tamanho máximo do conjunto de residentes.

O syscall getrusage () pode, ou não, ajudar. A estrutura contém, e. um campo maxrss, mas pelo menos no Linux isso nunca é preenchido.

    
por 03.01.2010 / 19:29
1

Se você não se importar em repetir a execução algumas vezes, você pode usar ulimit -Hv para definir o limite de memória para o shell (no Bash) e, em seguida, pesquisar binário no mínimo quando o aplicativo sair com êxito.

    
por 03.01.2010 / 20:50
1

Eu sugeriria valgrind. O aplicativo maciço reportará estatísticas de uso de heap, pelo menos.

    
por 03.01.2010 / 21:14
0

Nenhuma ferramenta padrão, exceto ps (que também não é padrão em relação às opções / saída). Isso não lhe dará a usabilidade time .

Você pode usar nmon para coletar estatísticas de todo o sistema, ele captura o uso de memória dos processos (provavelmente será inútil para processos de curta duração). Suporta muitas plataformas.

    
por 03.01.2010 / 19:50
0

Você pode tentar escrever seu próprio script que possa fazer isso. Ele poderia obter o PID do programa lançado e usar ps ou / proc / [pid] / status para obter informações de memória sobre ele. Claro que isso não caracterizaria totalmente o uso da memória, mas deveria lhe dar uma boa ideia.

    
por 03.01.2010 / 21:05
0

Use apenas a contabilidade do processo ( acct ou psacct dependendo da sua distribuição). O registro contábil do processo inclui estatísticas de "memória usada".

    
por 04.01.2010 / 01:44