time
é um comando brilhante se você quiser descobrir quanto tempo de CPU um determinado comando leva.
Estou à procura de algo semelhante que possa medir o uso máximo de RAM do programa e quaisquer filhos. De preferência, ele deve distinguir entre a memória alocada usada e não utilizada. Talvez ele possa fornecer o uso mediano da memória (portanto, o uso da memória que você deve esperar ao executar por um longo tempo).
Então eu gostaria de fazer:
rammeassure my_program my_args
e obtenha uma saída semelhante a:
Max memory allocated: 10233303 Bytes
Max memory used: 7233303 Bytes
Median memory allocation: 5233303 Bytes
Eu olhei para memusg
https://gist.github.com/526585/590293d6527c91e48fcb08edb8de9fd6c88a6d82, mas considero isso um tanto quanto um hack.
./tstime -t bash -c 'perl -e "\$a=\"x\"x100000000;\$b=\$a.\$a;\$b=\"\";\$a=\"\";sleep 10;"'
glibc
(e outras bibliotecas variadas, eles são chamados de "compartilhados" para alguma coisa). Muitos daemons carregam a configuração nos filhos de memória e fork (2), que compartilham os dados de configuração. Depois, existem dados nos buffers readahead / writebehind gerenciados pelo kernel. Além disso, existem serviços que são uma manada de processos pouco acoplados (pense no ambiente da área de trabalho e em todos os applets e itens de segundo plano).time
é um built-in do seu shell. Se você quiser,time
mas precisar de mais informações, tente o GNUtime
no modo verbose (-v
):Pesquise o pacote "time" ou "gnutime" no seu gerenciador de pacotes.
fonte
wait3
preenche uma estrutura descrita emgetrusage(2)
: 'Nem todos os campos são significativos no Linux. [...]tstime
relata 10652 KiB. Novamente no Ubuntu 10.04./usr/bin/time -v perl -e '$a="x"x100000000;$b=$a.$a;sleep 10;'
. top diz que leva cerca de 570 MB, mas o tempo diz 2,3 GB. Na prática, esse número não é habitável para mim.Talvez exagere, mas acabei de descobrir que
valgrind
tem uma boa ferramenta chamadamassif
. Eu testei emxterm
:E você obtém um bom gráfico de uso de memória:
juntamente com informações de uso de memória excessivamente detalhadas. Detalhes no manual do valgrind .
Os programas serão executados cerca de 20x mais lentamente. Além disso, executei alguns comandos dentro do
xterm
. Sua pegada de memória foi levada em consideração porque--trace-children=yes
a opção está lá!fonte
Embora o tópico seja bastante antigo, quero compartilhar outro projeto que surgiu a partir do recurso do kernel Linux do cgroups.
https://github.com/gsauthof/cgmemtime :
fonte
Parece que o tstime não funciona mais no sistema não-root no Linux> = 3.0. Aqui está um utilitário de pesquisa que escrevi para solucionar o problema: https://github.com/jhclark/memusg/blob/master/memusg
fonte
/usr/bin/time -v
fornece a saída correta nas versões mais recentes. Nas versões mais antigas, você só precisa dividir por 4 para obter a quantidade correta.