Existe uma ferramenta que execute uma linha de comando e relate o total de pico de uso de RAM?
Estou imaginando algo análogo a / usr / bin / time
linux
command-line
memory-management
jes5199
fonte
fonte
[ Edit : Funciona no Ubuntu 14.04:
/usr/bin/time -v command
Certifique-se de usar o caminho completo.]Parece
/usr/bin/time
que você fornece essas informações, se você passar-v
(isso é no Ubuntu 8.10). Veja, por exemplo,Maximum resident set size
abaixo:fonte
/bin/time -v
resolve isso.time -l
MacOS, produz resultados semelhantes.(Esta é uma pergunta antiga já respondida .. mas apenas para constar :)
Fui inspirado pelo script de Yang e criei esta pequena ferramenta, chamada memusg . Simplesmente aumentei a taxa de amostragem para 0,1 para lidar com processos de vida muito curtos. Em vez de monitorar um único processo, eu o fiz medir a soma rss do grupo de processos. (Sim, eu escrevo muitos programas separados que funcionam juntos) Atualmente, ele funciona no Mac OS X e Linux. O uso tinha que ser semelhante ao de
time
:Ele mostra apenas o pico no momento, mas estou interessado em pequenas extensões para gravar outras estatísticas (aproximadas).
É bom ter uma ferramenta tão simples para dar uma olhada antes de iniciar qualquer perfil sério.
fonte
ps -o rss=
que rss é o tamanho da memória real (conjunto de residentes) do processo (em unidades de 1024 bytes) na minha página de manual do BSD.Linha única Valgrind:
valgrind --tool=massif --pages-as-heap=yes --massif-out-file=massif.out ./test.sh; grep mem_heap_B massif.out | sed -e 's/mem_heap_B=\(.*\)/\1/' | sort -g | tail -n 1
Observe o uso de --pages-as-heap para medir toda a memória em um processo. Mais informações aqui: http://valgrind.org/docs/manual/ms-manual.html
fonte
time
, Estou deixando você.valgrind --massif
. Você também pode usar ams_print
ferramenta que vem com ele para a saída acessível (incluindo gráficos ascii de uso ao longo do tempo)time
normal, levando pelo menos 10 vezes mais tempo em um comando como essels
.No Linux:
Use
/usr/bin/time -v <program> <args>
e procure " Tamanho máximo do conjunto de residentes ".(Não deve ser confundida com o Bash
time
comando interno! Portanto, use o caminho completo ,/usr/bin/time
)Por exemplo:
No BSD, MacOS:
Use
/usr/bin/time -l <program> <args>
, procurando " tamanho máximo do conjunto de residentes ":fonte
sudo apt-get install time
Talvez o (gnu) time (1) já faça o que você deseja. Por exemplo:
Mas outras ferramentas de criação de perfil podem fornecer resultados mais precisos, dependendo do que você está procurando.
fonte
time
é um comando incorporado ao usarcsh
. Se você usar o caminho exato, ele permitirá que você execute o comando externo. Até onde eu sei, apenas a versão GNU suporta a opção de formato./ usr / bin / time talvez faça o que você quer, na verdade. Algo como.
Veja o tempo (1) para detalhes ...
fonte
No MacOS Sierra, use:
Você pode usar
grep
para pegar o que quiser, talvez.fonte
command time -l
vez do/usr/bin/time -l
que fará com que o seu shell realmente chame um binário chamado emtime
vez da função interna. (Sim,command
não é um espaço reservado,command time
é diferente do que apenastime
.)Se o processo for executado por pelo menos alguns segundos, você poderá usar o seguinte script bash, que executará a linha de comando especificada e imprimirá o stderr do RSS de pico (substitua
rss
qualquer outro atributo no qual você esteja interessado). É um pouco leve e funciona para mim com ops
incluído no Ubuntu 9.04 (o que não posso dizertime
).fonte
fonte
Bem, se você realmente deseja mostrar o pico de memória e algumas estatísticas mais detalhadas, recomendo usar um criador de perfil como o valgrind . Um bom front-end do valgrind é o alleyoop .
fonte
Você pode usar uma ferramenta como Valgrind para fazer isso.
fonte
Aqui está (com base nas outras respostas) um script muito simples que assiste a um processo já em execução. Você acabou de executá-lo com o pid do processo que deseja assistir como argumento:
Exemplo de uso:
fonte
Use o Maciço: http://valgrind.org/docs/manual/ms-manual.html
fonte
Heaptrack é uma ferramenta do KDE que possui uma interface gráfica e de texto. Acho mais adequado do que o valgrind entender o uso da memória de um processo, pois fornece mais detalhes e gráficos. Também é mais rápido porque faz menos verificação desse valor. E fornece o pico de uso da memória.
De qualquer forma, rastrear rss e vss é enganoso porque as páginas podem ser compartilhadas, é por isso que
memusg
. O que você realmente deve fazer é acompanhar a soma dePss
in/proc/[pid]/smaps
ou usepmap
. O monitor do sistema GNOME costumava fazer isso, mas era muito caro.fonte
Re-inventando a roda, com script bash feito à mão. Rápido e limpo.
Meu caso de uso: eu queria monitorar uma máquina Linux com menos RAM e tirar uma foto instantânea do uso por contêiner quando executado sob uso pesado.
Saída de amostra:
fonte
No macOS, você pode usar o DTrace. O aplicativo "Instruments" é uma ótima interface gráfica para isso, vem com o XCode afaik.
fonte
'htop' é o melhor comando para ver qual processo está usando quanta RAM .....
para obter mais detalhes http://manpages.ubuntu.com/manpages/precise/man1/htop.1.html
fonte
Desculpe, sou a primeira vez aqui e só posso fazer perguntas ...
Usado sugerido:
então:
isso é muito diferente do que o
top
comando mostra em um momento semelhante:o que são unidades medidas do Valgrind?
O
/usr/bin/time -v ./test.sh
nunca respondeu - você deve alimentar diretamente o executável para/usr/bin/time
gostar:fonte