Obter o uso máximo de memória do executável linux

3

Eu preciso de um script de shell que recupere o consumo máximo de memória de um executável do Linux. O executável pode gerar processos filhos usando quantidades significativas de RAM que devem ser incluídas no total.

Eu tentei /usr/bin/time -f "%M" /path/to/executable , mas isso sempre gera 0 , embora usando ps eu possa verificar se o processo está realmente consumindo RAM significativa.

Por que time está me fornecendo 0 o tempo todo e como posso obter o número que estou procurando?

    
por Isaac Sutherland 09.09.2010 / 18:36

4 respostas

1

Acho que time -f %M só funciona nos kernels recentes do Linux (experimentalmente, não é suportado em 2.6.26 / amd64 e é suportado em 2.6.32 / i386).

Um tópico anterior no Stack Overflow não apareceu muito.

Sem suporte ao kernel, monitorar o uso da memória é bastante difícil. Existem algumas maneiras de fazer isso:

  • LD_PRELOAD uma pequena biblioteca que sobrecarrega mmap , sbrk e outras chamadas do sistema de alocação de memória (supondo que você não execute nenhum binários estáticos).
  • ptrace os processos assistem a alocação de memória e bifurcação.
  • Assista /proc/ (funciona apenas para um único processo e você não sabe o que acontece entre as medidas).

Todas essas formas requerem alguma programação; Não conheço uma ferramenta existente.

    
por 09.09.2010 / 23:43
1

pmap mostra toda a memória alocada para um processo e até fornece o total. Detectar os processos filhos é mais difícil, talvez você possa combiná-los com strace , mas não consigo pensar de maneira simples.

    
por 10.09.2010 / 04:17
0

O comando ps pode ser usado para medir a quantidade de memória que cada processo usa.

% MEM mostra a porcentagem de memória física que um processo usa. Embora nem sempre a imagem completa possa identificar processos responsáveis pela paginação e troca do sistema.

SZ mostra o tamanho virtual aproximado de um processo.

RSS é o tamanho do Conjunto Residente e é a quantidade real de memória que o processo estava usando quando o ps foi executado.

Verifique a sua página man ps para obter opções para listar árvores de processo.

    
por 09.09.2010 / 20:22
0

Eu recomendo usar o link .

cgmemtime measures the high-water RSS+CACHE memory usage of a process and its descendant processes.

To be able to do so it puts the process into its own cgroup.

For example process A allocates 10 MiB and forks a child B that allocates 20 MiB and that forks a child C that allocates 30 MiB. All three processes share a time window where their allocations result in corresponding RSS (resident set size) memory usage.

The question now is: How much memory is actually used as a result of running A?

Answer: 60 MiB

cgmemtime is the tool to answer such questions.

    
por 23.03.2015 / 19:52