¿Existe una herramienta que ejecute una línea de comandos e informe el uso total de RAM máximo?
Me estoy imaginando algo análogo a / usr / bin / time
linux
command-line
memory-management
jes5199
fuente
fuente
[ Editar : funciona en Ubuntu 14.04:
/usr/bin/time -v command
asegúrese de utilizar la ruta completa.]Parece
/usr/bin/time
que te da esa información, si la pasas-v
(esto está en Ubuntu 8.10). Ver, por ejemplo, aMaximum resident set size
continuación:fuente
/bin/time -v
lo resuelvetime -l
en MacOS, ofrece resultados similares.(Esta es una pregunta antigua ya respondida ... pero solo para el registro :)
Me inspiró el guión de Yang y se me ocurrió esta pequeña herramienta, llamada memusg . Simplemente aumenté la frecuencia de muestreo a 0.1 para manejar procesos de vida muy cortos. En lugar de monitorear un solo proceso, lo hice medir la primera suma del grupo de procesos. (Sí, escribo muchos programas separados que funcionan juntos) Actualmente funciona en Mac OS X y Linux. El uso tenía que ser similar al de
time
:Solo muestra el pico por el momento, pero estoy interesado en pequeñas extensiones para registrar otras estadísticas (aproximadas).
Es bueno tener una herramienta tan simple para echar un vistazo antes de comenzar cualquier perfil serio.
fuente
ps -o rss=
donde rss es el tamaño de la memoria real (conjunto residente) del proceso (en unidades de 1024 bytes) desde mi página de manual de BSD.Valgrind one-liner:
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
Tenga en cuenta el uso de --pages-as-heap para medir toda la memoria en un proceso. Más información aquí: http://valgrind.org/docs/manual/ms-manual.html
fuente
time
, Te estoy dejando.valgrind --massif
. También puede usar lams_print
herramienta que viene con ella para obtener resultados útiles (incluyendo gráficos ascii de uso a lo largo del tiempo)time
sin embargo, tomando al menos 10 veces más tiempo en un comando comols
.En Linux:
Use
/usr/bin/time -v <program> <args>
y busque " Tamaño máximo de conjunto residente ".(No debe confundirse con el Golpe
time
comando integrado! Así que utilice la ruta completa ,/usr/bin/time
)Por ejemplo:
En BSD, MacOS:
Uso
/usr/bin/time -l <program> <args>
, buscando " tamaño máximo de conjunto residente ":fuente
sudo apt-get install time
Quizás (gnu) el tiempo (1) ya hace lo que quieres. Por ejemplo:
Pero otras herramientas de creación de perfiles pueden proporcionar resultados más precisos según lo que esté buscando.
fuente
time
es un comando integrado cuando se usacsh
. Si usa la ruta exacta, le permitirá ejecutar el comando externo. Hasta donde sé, solo la versión GNU admite la opción de formato./ usr / bin / time tal vez hace lo que quieres, en realidad. Algo como.
Vea el tiempo (1) para más detalles ...
fuente
En MacOS Sierra use:
Puede usar
grep
para tomar lo que quiera, tal vez.fuente
command time -l
lugar de lo/usr/bin/time -l
que hará que su shell realmente llame a un binario llamado entime
lugar de la función incorporada. (Sí,command
no es un marcador de posición,command time
es diferente de solotime
).Si el proceso se ejecuta durante al menos un par de segundos, puede usar el siguiente script bash, que ejecutará la línea de comando dada y luego imprimirá para stderr el pico RSS (sustituya
rss
cualquier otro atributo que le interese). Es algo ligero y funciona para mí con elps
incluido en Ubuntu 9.04 (que no puedo decirtime
).fuente
fuente
Bueno, si realmente desea mostrar el pico de memoria y algunas estadísticas más detalladas, le recomiendo usar un generador de perfiles como valgrind . Un buen front-end valgrind es alleyoop .
fuente
Puede usar una herramienta como Valgrind para hacer esto.
fuente
Aquí hay (basado en las otras respuestas) un script muy simple que observa un proceso que ya se está ejecutando. Simplemente lo ejecuta con el pid del proceso que desea ver como argumento:
Ejemplo de uso:
fuente
Use Massif: http://valgrind.org/docs/manual/ms-manual.html
fuente
Heaptrack es una herramienta de KDE que tiene una interfaz gráfica de usuario y una interfaz de texto. Me parece más adecuado que valgrind comprender el uso de memoria de un proceso porque proporciona más detalles y gráficos de llamas. También es más rápido porque controla menos ese valor. Y te da el uso máximo de memoria.
De todos modos, el seguimiento de rss y vss es engañoso porque las páginas podrían compartirse, por eso
memusg
. Lo que realmente debe hacer es realizar un seguimiento de la suma dePss
in/proc/[pid]/smaps
o usepmap
. El monitor de sistema GNOME solía hacerlo, pero era demasiado costoso.fuente
Reinventar la rueda, con guión de bash hecho a mano. Rápido y limpio.
Mi caso de uso: quería monitorear una máquina Linux que tiene menos RAM y quería tomar una instantánea del uso por contenedor cuando se ejecuta bajo un uso intensivo.
Salida de muestra:
fuente
En macOS, puede usar DTrace en su lugar. La aplicación "Instrumentos" es una buena GUI para eso, viene con XCode afaik.
fuente
'htop' es el mejor comando para ver qué proceso está usando cuánta RAM .....
para más detalles http://manpages.ubuntu.com/manpages/precise/man1/htop.1.html
fuente
Lo siento, estoy aquí por primera vez y solo puedo hacer preguntas ...
Usado sugerido:
entonces:
Esto es muy diferente de lo que
top
muestra el comando en un momento similar:¿Cuáles son las unidades medidas de Valgrind?
La
/usr/bin/time -v ./test.sh
contestado a - debe alimentar directamente ejecutable/usr/bin/time
como:fuente