time
es un comando brillante si desea calcular cuánto tiempo de CPU tarda un comando determinado.
Estoy buscando algo similar que pueda medir el uso máximo de RAM del programa y de cualquier niño. Preferiblemente debe distinguir entre la memoria asignada que se usó y la que no se usó. Tal vez incluso podría proporcionar el uso medio de memoria (por lo que el uso de memoria que debe esperar cuando se ejecuta durante mucho tiempo).
Entonces me gustaría hacer:
rammeassure my_program my_args
y obtener una salida similar a:
Max memory allocated: 10233303 Bytes
Max memory used: 7233303 Bytes
Median memory allocation: 5233303 Bytes
He visto memusg
https://gist.github.com/526585/590293d6527c91e48fcb08edb8de9fd6c88a6d82 pero considero que esto es un truco.
./tstime -t bash -c 'perl -e "\$a=\"x\"x100000000;\$b=\$a.\$a;\$b=\"\";\$a=\"\";sleep 10;"'
glibc
(y otras bibliotecas variadas, se denominan "compartidas" por algo). Muchos demonios cargan la configuración en la memoria y los niños fork (2), que luego comparten los datos de configuración. Luego hay datos en buffers readahead / writebehind administrados por el kernel. Y luego están los servicios que son una manada de procesos débilmente acoplados (piense en su entorno de escritorio y todas sus aplicaciones y material de fondo).time
está integrado en su shell. Si te gustatime
pero necesitas más información, prueba GNUtime
en modo detallado (-v
):Busque el paquete "time" o "gnutime" en su administrador de paquetes.
fuente
wait3
llena una estructura que se describe engetrusage(2)
: 'No todos los campos son significativos en Linux. [..] '.tstime
10652 KiB. De nuevo bajo Ubuntu 10.04./usr/bin/time -v perl -e '$a="x"x100000000;$b=$a.$a;sleep 10;'
. arriba dice que toma alrededor de 570 MB, pero el tiempo dice 2.3 GB. En la práctica, ese número no es útil para mí.Tal vez exagere, pero acabo de descubrir que
valgrind
tiene una buena herramienta llamadamassif
. Lo probé enxterm
:Y obtienes un buen gráfico de uso de memoria:
junto con información de uso de memoria demasiado detallada. Detalles en el manual de valgrind .
Sin embargo, los programas se ejecutarán aproximadamente 20 veces más lento. Además, ejecuté algunos comandos dentro del
xterm
. Su huella de memoria se ha tenido en cuenta porque--trace-children=yes
la opción está ahí.fuente
Aunque el tema es bastante antiguo, quiero compartir otro proyecto que surgió de la función del núcleo cgroups Linux.
https://github.com/gsauthof/cgmemtime :
fuente
Parece que tstime ya no funciona en sistemas no root en Linux> = 3.0. Aquí hay una utilidad de encuestas que escribí para hackear el problema: https://github.com/jhclark/memusg/blob/master/memusg
fuente
/usr/bin/time -v
da la salida correcta en versiones más nuevas. En versiones anteriores solo necesita dividir por 4 para obtener la cantidad correcta.